Du bist nicht angemeldet.

  • »djberningo« ist der Autor dieses Themas

Beiträge: 814

Wohnort: Ingolstadt

Beruf: Senior Software Engineer

  • Private Nachricht senden

1

01.06.2020, 21:48

Rust

Meinen Feiertag habe ich mit dem Lernen einer neuer Programmiersprache verbracht: Rust.

Ich wollte einfach mal den Tag sinnvoll und nicht nur mit Lesen von "Die drei Sonnen" verbringen (übrigens, ein richtig geiles Buch für Nerds) :-) Und außerdem brauche ich ohnehin ein kleines Tool, der meine Zeilen mit Werten in eine SQL-Liste für die WHERE-IN-Clause, z.B. für

Quellcode

1
SELECT werte FROM tabelle WHERE werte IN ('test', 1, 'zwei', 3.0)
umwandelt.

Das habe ich inzwischen geschafft, was gar nicht so einfach war.

Rust soll irgendwann C++ vom Thron stoßen - zumindest für Neuentwicklungen. So stellen sich das viele Fans und auch Mozilla, der Urheber dieser Sprache, jedenfalls vor. Und weil neben des rasanten Aufstiegs in die Programmiersprachen-Chartsauch Microsoft von Rust als Systemprogrammiersprache und seinen Sicherheitsaspekten ziemlich angetan ist, war das nun endlich der Anlass, mir das mehr als nur anzuschauen. Große Teil von Servo, der Javascript-Engine von Mozilla, wurden damit programmiert. Und außerdem gibt es noch die Bibliothek Rust-SDL2 für die Spieleprogrammierung, die langsam aber stetig weiterentwickelt wird. :D

Rust kann für Embedded Systeme und für's Web als WebAssembly kompiliert werden und ist jetzt schon echt vielseitig. Ich würde behaupten, dass man in spätestens 5 Jahren nicht um die Sprache herumkommt, auch wenn sie den Anfänger definitiv überfordert. Auch aus meiner Perspektive ist die Lernkurve sehr steil, weniger wegen der Syntax, sondern wegen der Art, wie mit dem Speicher umgegangen bzw. gearbeitet wird. Rust verwendet nämlich keinen Garbage Collector wie bei Java oder Pointer bzw. manuelles Speichermanagment wie bei C/C++. Rust geht einen ganz anderen, mir bis dato unbekannten Weg: Ownership, Scopes und Lifetimes. Zu jedem Zeitpunkt sind die Zustände von Variablen und ihrem zugewiesenen Speicher bekannt und vom Programmierer, wenn nötig, zu definieren. Es darf nur eine veränderliche Variable mit dem zu arbeitenden Wert oder Objekt geben, alle anderen leihen sich Referenzen darauf. Wer mehr wissen will, zieht sich den letzten Link rein.

Das Perfide daran: Der Borrowchecker ist quasi wie eine Ehefrau und beklagt jede Kleinigkeit. Man kämpft quasi anfangs fortwährend gegen den Compiler und darf sich einfach nicht entmutigen lassen. Wie eine Ehefrau versteht Rust, was ich meinen könnte, sagt mir aber dann ganz genau, wie es richtig ist und was ich tun muss. Wirklich, derart gute Fehlermeldungen und Hinweise hatte ich noch nie bei keinem Compiler gesehen. Und mit etwas Übung sollte auch bald die Harmonie und Routine kommen...

Für die finalen 24 Zeilen habe ich bestimmt an die 2 Stunden gebraucht. Es war nicht einfach zu verstehen, dass Zeile 11 und 12 Strings mit format! produzieren, weshalb der Typ sich ändert - von einer Referenz (&string) zu einem String auf dem Heap (String). Nunja, ich will euch nicht weiter langweilen. Eines sei aber gesagt: Es fühlte sich an, wie gegen einen Endboss zu kämpfen, dessen Angriffsmuster man erst verstehen muss.

henrikf

Pixelor-Team

Beiträge: 6 828

Wohnort: Bad Aibling / Bayern

Beruf: Software-Entwickler

  • Private Nachricht senden

2

01.06.2020, 23:26

Ich finde »Rust« auch super spannend, vor allem wegen der Idee, dass es keine »Garbage Collection« verwendet und dieses eben in der Syntax verankert. Ich finde nur überhaupt keine Zeit, mich damit zu befassen. Mich freut es aber, dass die Sprache im aktuellen Tiobe-Index (Dein Link oben) bereits auf Platz 21 vorgerückt ist. Was die Leute dagegen an der Sprache »Go« finden, bleibt mir ein Rätsel. Die ist ja ähnlich neu wie Rust, und vermutlich ist die nur deswegen auf Platz 12, weil da Google mit seiner Marktmacht dahinter steckt.

Bis es C++ verdrängt ist es aber noch ein weiter weg. Zumal die aktuellen Compiler für C++ schon sehr sehr gut sind, und das Know-How bei den Programmierern einfach da ist (ich selber kann zum Beispiel immer noch ANSI-C, was schon mal die halbe Miete von C++ ist). Allerdings ist C++ teilweise so dermaßen verkopft - ich sage nur »overloading« von Operatoren - dass ich mich ernsthaft frage, wer so etwas in der Praxis tatsächlich nutzt, und dann von seinen Team-Kollegen nicht geköpft wird. ;)
--== Island2Live / Henrik Fisch==--
Homepage: http://www.island2live.com/ deviantART: http://island2live.deviantart.com/
Spielt gerade: Yonder: The Cloud Catcher Chronicles

  • »djberningo« ist der Autor dieses Themas

Beiträge: 814

Wohnort: Ingolstadt

Beruf: Senior Software Engineer

  • Private Nachricht senden

3

02.06.2020, 10:35

Was die Leute dagegen an der Sprache »Go« finden, bleibt mir ein Rätsel. Die ist ja ähnlich neu wie Rust, und vermutlich ist die nur deswegen auf Platz 12, weil da Google mit seiner Marktmacht dahinter steckt.

Go ist absolut einfach, minimalistisch und kompiliert sauschnell (klar, bei dem Minimalismus). Es erzeugt eine einzige Binary ohne Abhängigkeiten, wenn man Bindings auf C-Libraries (DLLs, SO) nicht braucht (z.B. libsdl2.so). Eine Runtime braucht man zudem auch nicht.

Viel wichtiger: Es ist die Nummer-1-Sprache für die Google Cloud, gefolgt von Python und dann Java. Rust lässt sich nicht so ohne Weiteres verwenden (geht nur über REST-APIs).

Eine Systemsprache ist "Go" auf gar keinen Fall. Das wird auch, soweit ich weiß, auch gar nicht mehr als solche beworben.

Bis es C++ verdrängt ist es aber noch ein weiter weg. Zumal die aktuellen Compiler für C++ schon sehr sehr gut sind, und das Know-How bei den Programmierern einfach da ist (ich selber kann zum Beispiel immer noch ANSI-C, was schon mal die halbe Miete von C++ ist). Allerdings ist C++ teilweise so dermaßen verkopft - ich sage nur »overloading« von Operatoren - dass ich mich ernsthaft frage, wer so etwas in der Praxis tatsächlich nutzt, und dann von seinen Team-Kollegen nicht geköpft wird.

Völlig verdrängt wird ohnehin so schnell nichts. Dafür gibt es zu viele Libs in C und C++. Dynamisches Binden von C-Libraries ist schon nicht mehr ganz so easy mit Rust-FFI. Ich glaube aber, das neue sicherheitsrelevante Software mit keinen oder sehr wenigen Abhängigkeiten zu C-Libs durchaus nicht mehr mit C++ geschrieben werden. Das sehe ich auch an den Anfragen aus LinkedIn.

Für die Spiele-Entwicklung, die Wartung von Legacy-Software und Neuentwicklungen, die viele Abhängigkeiten zu Frameworks und Libs haben wird weiterhin wohl noch lange auf C++ zurückgegriffen, schon weil das Ökosystem von Rust einfach zu klein ist. Außerdem gibt es C für jede nur erdenkliche Architektur. Und dann gibt es auch noch Java für System-Software im Backend oberhalb der OS-Schicht. Java wird hier noch sehr lange die Nummer 1 bleiben. Meine subjektive Glaskugel sagt mir, dass Rust sich zwischen C/C++ und Java im Backend ansiedeln wird. Und Go wird sich in den Regionen DevOps und Google Cloud festbeißen.

C++03 ist ja schon recht komplex, aber irgendwie noch zu bewältigen. Ich finde die Komplexität seit C++11 aber echt zu heftig. Durch die Neuerungen ändert sich das Paradigma, der ganze Programmierstil. Und ich habe tatsächlich keine Motivation, in C++ >11 zu programmieren, da ich persönlich C++ eher für älteres Zeugs verwenden würde (z.B. XBox-Programmierung würde mich interessieren). Ich würde also lieber auf C++98 und C++03 zurückgreifen. Ansonsten bleibe ich auch bei C, wie ich ja anhand meiner DOS-Allegro-Tests gezeigt habe. Zur guten alten DOS-Zeit war C++ ja noch nicht mal standardisiert. Jeder Kompiler-Hersteller hat bis 1998 sein eigenes Süppchen gekocht.

henrikf

Pixelor-Team

Beiträge: 6 828

Wohnort: Bad Aibling / Bayern

Beruf: Software-Entwickler

  • Private Nachricht senden

4

02.06.2020, 11:56

C++ & Rust

OK, ich muss meine Meinung zu C++ revidieren: Ich habe mir eben mal in der englischen Wikipedia den Artikel zu C++ 11 durchgelesen ... bzw. versucht ihn durchzulesen. Das mit »C ist die halbe Miete« kann ich so nicht mehr stehen lassen. Bei den »Initializer lists« und deren Verwendung in Konstruktoren von Objekten ... habe ich abgeschnallt. Wer denkt sich denn so eine Syntax aus? Da ist ANSI-C ja nur noch 1/4tel der Miete. ;)

Dein Hinweis mit Rust und SDL2 hat mich wiederum sehr neugierig gemacht. Ja, wie gesagt: Rust ist schon sehr spannend. Aber im Moment bin ich wieder mit meinem Atari-Spiel zugange und da ist 6502-Assembler angesagt. :D
--== Island2Live / Henrik Fisch==--
Homepage: http://www.island2live.com/ deviantART: http://island2live.deviantart.com/
Spielt gerade: Yonder: The Cloud Catcher Chronicles

  • »djberningo« ist der Autor dieses Themas

Beiträge: 814

Wohnort: Ingolstadt

Beruf: Senior Software Engineer

  • Private Nachricht senden

5

02.06.2020, 18:53

OK, ich muss meine Meinung zu C++ revidieren: Ich habe mir eben mal in der englischen Wikipedia den Artikel zu C++ 11 durchgelesen ... bzw. versucht ihn durchzulesen. Das mit »C ist die halbe Miete« kann ich so nicht mehr stehen lassen. Bei den »Initializer lists« und deren Verwendung in Konstruktoren von Objekten ... habe ich abgeschnallt. Wer denkt sich denn so eine Syntax aus? Da ist ANSI-C ja nur noch 1/4tel der Miete.


:-D Abgeschnallt. :thumbsup: Besser kann ich das gar nicht informieren, obwohl ich die Initializer Lists noch nicht so schlimm finde. Die Lamda-Ausdrücke, die an sich eigentlich ganz easy sind, empfinde ich als syntaktischen Murks, der notwendig ist, damit das alles kompatibel zu alten C++-Sprachversionen bleibt. Anstatt neue Keywords zu verwenden, muss man sich die Stellung der Keywords und damit die Semantik merken. Ganz ehrlich: kognitiv überfordert mich das, außer ich progge 10 Jahre am Stück damit und oute mich als Masochist.

Ansi-C ist dagegen tatsächlich hübsch. Aber wenn man sieht, wie Gnome versucht, damit objektorientiert zu arbeiten (GObject), wird's wieder hässlich. So wie: von hinten hui, von vorne pfui.


Dein Hinweis mit Rust und SDL2 hat mich wiederum sehr neugierig gemacht. Ja, wie gesagt: Rust ist schon sehr spannend. Aber im Moment bin ich wieder mit meinem Atari-Spiel zugange und da ist 6502-Assembler angesagt.

Hatte ich schon geschrieben, dass ich mich auch noch mit stabilen Rasterzeilen-Interrupts für den C64 beschäftige? Es gibt schon Code... (ich muss ihn mal nach Github pushen).

Ich nutze Visual Studio Code und den KickAssembler. Ich suche noch etwas Vernünftiges zum Debuggen, wo ich nicht tausend Keyboard-Shortcuts ins deutsche Layout transformieren und auswendig lernen muss. Vermutlich werde ich mit einem älteren VICE arbeiten. Mal sehen. Direkt auf der Maschine coden... neee... dazu bin ich dann doch bequem :-D

Und 6502-Assembler ist gegen C++ und Rust Entspannung pur, auch wenn man jede Kleinigkeit implementieren muss (man freut sich aber schon über einen geteilten Hintergrund). Vielleicht schaue ich mir auch an, ob Turbo Rascal (heißt so) nur von esotherischer Natur ist oder man wirklich damit proggen und echte Ergebnisse produzieren kann.

Rust lerne ich auch aufgrund der "Gewinnerzielungsabsicht" :-D Ich will endlich die sechsstellige-Jahresgehalt-Mauer durchbrechen. :twisted:

henrikf

Pixelor-Team

Beiträge: 6 828

Wohnort: Bad Aibling / Bayern

Beruf: Software-Entwickler

  • Private Nachricht senden

6

02.06.2020, 21:16

Rust lerne ich auch aufgrund der "Gewinnerzielungsabsicht" :-D Ich will endlich die sechsstellige-Jahresgehalt-Mauer durchbrechen. :twisted:

Davon bin ich Lichtjahre entfernt ... aber ich suche im Moment auch nicht wirklich. Wenn ich mir die Anfragen auf Xing ansehe, dann mache ich mir aber auch nicht wirklich Sorgen. ;)
--== Island2Live / Henrik Fisch==--
Homepage: http://www.island2live.com/ deviantART: http://island2live.deviantart.com/
Spielt gerade: Yonder: The Cloud Catcher Chronicles

Ähnliche Themen