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.
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.