Rust Fragen



  • Die Einrichtung hat geklappt. Ich musste die Visual Studio 2015 C++ Build Tools installieren, da VS2017 wohl noch nicht vom Rust Installer richtig erkannt wird. Dann kam noch Git, Rust selbst und IntelliJ mit Rust Plugin dran und fertig war die Laube.



  • Starglider schrieb:

    - Welche Vorteile hat Rust gegenüber C++?

    Also, erstmal sei gesagt, dass man im Moment in C++ Dinge tun kann, die in Rust nicht bzw noch nicht funktionieren.

    Das, was mir spontan zu deiner Frage einfällt:

    • Man braucht keine Header-Dateien in Rust und spart damit Redundanz
    • Es gibt einen Quasi-Standard bzgl Build-System und Paketverwaltung: cargo
    • Die Typinferenz bei Rust ist mächtiger als in C++. Man muss deswegen weniger Typen hinschreiben und kann dem Compiler diese Sache überlassen.
    • Rust's Generics bieten heute schon das, was man seit langem in C++ einbauen wollte und bis jetzt immer noch nicht auf die Reihe bekommen hat: Modulares Type-Checking von Generics. In C++ fallen einige Fehler erst dann auf, wenn man versucht ein Template zu instantiieren was den Compiler dann einen Haufen von Fehlermeldungen auskotzen lässt mit irgendwelchen Implementierungsdetails, die einen selten interessieren, ohne dass man sofort sehen kann, wer Schuld hat: der Template-Autor oder derjenige, der ein Template benutzen wollte. In C++ nennt man diese Art des Type-Checkings "Concepts". Aber selbst eine abgespeckte Version ("Concepts Lite") hat es noch nicht in den Standard geschafft.
    • Das Typsystem in Rust bietet variants (enums) und tuples out-of-the-box an, was dann automatisch angenehmer zu nutzen ist (pattern matching, destructuring)
    • Es gibt viel weniger Fallstricke in Rust als in C++. C++ ist dagegen ein Minenfeld und man braucht eine Weile um zu wissen, wie man was machen sollte und wie nicht, damit Code weniger fehleranfällig ist. Die Verwendung von Referenzen in Rust macht Spaß. Wegen der borrow-check Regeln, verschwimmen die Grenzen zwischen Werten und Referenzen, ohne dass man sich irgendwelche Sorgen machen müsste
    • Move-Semantik ist viel einfacher in Rust. Man braucht auch keine Rvalue-Referenzen. Ein Objekt von A nach B umziehen zu lassen, klappt auch immer in Rust, während der Move-Konstruktor in C++ eine Ausnahme werfen kann.
    • Komplette Fehlerklassen werden in Rust ausgeschlossen. Es ist quasi unmöglich, Datenrennen, use-after-free oder buffer-overflow Fehler zu produzieren. Entweder hindert einen der Compiler dran und das Programm kann gar nicht übersetzt werden oder ein Check zur Laufzeit bricht das Programm. Wenn Du Programme baust, die per Netzwerk mit der weiten Welt reden können, ist das ein sehr interessantes Feature, weil Bugs aus diesen Fehlerklassen oft Sicherheitslücken darstellen und man dann ggf von außen angreifbar wäre
    • Die Rust Standardbibliothek kommt mir sehr durchdacht vor. Die HashMap bietet z.B. das sogenannte "Entry API" an, worüber man mit nur einem Lookup nachschauen kann, ob ein Schlüssel-Wert-Paar vorhanden ist und ggf hinzufügen oder modifizieren kann.

    Mein Fazit als C++ Programmierer: Rust ist ein moderneres, aufgeräumteres, vereinfachtes C++ mit Extra-Garantien bzgl Speichersicherheit. Man braucht eine Weile, um da rein zu kommen, aber dann macht es Spaß, Rust zu benutzen. Es gibt einige C++ Programmierer, die gesagt haben, dass ihre Zeit mit Rust sie zu einem besseren C++ Programmierer gemacht haben. Und ich kann auch verstehen warum.



  • Vielen Dank für deine sehr ausführliche Antwort.



  • krümelkacker schrieb:

    Starglider schrieb:

    - Welche Vorteile hat Rust gegenüber C++?

    Also, erstmal sei gesagt, dass man im Moment in C++ Dinge tun kann, die in Rust nicht bzw noch nicht funktionieren.

    Was geht in Rust z.B. noch nicht?





  • interessierter Mitleser schrieb:

    krümelkacker schrieb:

    Starglider schrieb:

    - Welche Vorteile hat Rust gegenüber C++?

    Also, erstmal sei gesagt, dass man im Moment in C++ Dinge tun kann, die in Rust nicht bzw noch nicht funktionieren.

    Was geht in Rust z.B. noch nicht?

    Doof ist, wenn man ein Array der Länge >= 32 hat, denn damit kann man fast nichts mehr automatisch erledigen lassen. Die Stdlib ist voll mit Implementierungen von Traits/Funktionen für Arrays nur von Länge 1 bis 32, da die Sprache noch keine Möglichkeit bietet sowas für alle Zahlen zu abstrahieren: https://github.com/rust-lang/rfcs/issues/1038
    Muss man dann manuell implementieren, was ziemlich nervig ist, aber auch kein unüberwindbares Problem darstellt.

    Unzufrieden bin ich ansonsten nur mit den Teilen der Stdlib, welche für Allokationen verantwortlich sind. Bei diesen ist es nicht vorgesehen, dass mal kein Speicher mehr zur verfügung steht. Fehlgeschlagene Allokation bedeutet bisher in Rust: sofort den Thread abstürzen lassen.



  • Was für Projekte realisierst du mit Rust?



  • Gibt es eigentlich ein nettes deutsches Rust Forum wie dies hier? Beim Suchen mit Google stoße ich leider oft auf ein Spiel welches sich auch Rust nennt.



  • Ein englisches Rust-Forum fände ich auch OK.





  • Jo, danke das kenne ich. Scheint noch nicht eine so große Rust Community zu geben. Ich habe noch ein PDF über Rust gefunden: https://www.gitbook.com/book/carlomilanesi/rust-programming-step-by-step/details Dort einfach Download PDF anklicken.

    Vielleicht gibt ja hier mit der Zeit auch ein Rust Unterforum so wie für C#



  • und auf jeden Fall: https://www.reddit.com/r/rust/ nicht vergessen



  • Super, so langsam wird es mit den Rustlinks.



  • Biolunar schrieb:

    interessierter Mitleser schrieb:

    krümelkacker schrieb:

    Starglider schrieb:

    - Welche Vorteile hat Rust gegenüber C++?

    Also, erstmal sei gesagt, dass man im Moment in C++ Dinge tun kann, die in Rust nicht bzw noch nicht funktionieren.

    Was geht in Rust z.B. noch nicht?

    Doof ist, wenn man ein Array der Länge >= 32 hat, denn damit kann man fast nichts mehr automatisch erledigen lassen. Die Stdlib ist voll mit Implementierungen von Traits/Funktionen für Arrays nur von Länge 1 bis 32, da die Sprache noch keine Möglichkeit bietet sowas für alle Zahlen zu abstrahieren: https://github.com/rust-lang/rfcs/issues/1038
    Muss man dann manuell implementieren, was ziemlich nervig ist, aber auch kein unüberwindbares Problem darstellt.

    Welche Stdlib-Funktionen betrifft das?



  • interessierter Mitleser schrieb:

    Biolunar schrieb:

    interessierter Mitleser schrieb:

    krümelkacker schrieb:

    Starglider schrieb:

    - Welche Vorteile hat Rust gegenüber C++?

    Also, erstmal sei gesagt, dass man im Moment in C++ Dinge tun kann, die in Rust nicht bzw noch nicht funktionieren.

    Was geht in Rust z.B. noch nicht?

    Doof ist, wenn man ein Array der Länge >= 32 hat, denn damit kann man fast nichts mehr automatisch erledigen lassen. Die Stdlib ist voll mit Implementierungen von Traits/Funktionen für Arrays nur von Länge 1 bis 32, da die Sprache noch keine Möglichkeit bietet sowas für alle Zahlen zu abstrahieren: https://github.com/rust-lang/rfcs/issues/1038
    Muss man dann manuell implementieren, was ziemlich nervig ist, aber auch kein unüberwindbares Problem darstellt.

    Welche Stdlib-Funktionen betrifft das?

    Kannst alle Traits auf https://doc.rust-lang.org/std/primitive.array.html nachlesen. Dort sieht man ganz schön, wie alle Traits für 1 bis 32 implementiert werden und für höhere Zahlen nicht.



  • Biolunar schrieb:

    interessierter Mitleser schrieb:

    Biolunar schrieb:

    interessierter Mitleser schrieb:

    krümelkacker schrieb:

    Starglider schrieb:

    - Welche Vorteile hat Rust gegenüber C++?

    Also, erstmal sei gesagt, dass man im Moment in C++ Dinge tun kann, die in Rust nicht bzw noch nicht funktionieren.

    Was geht in Rust z.B. noch nicht?

    Doof ist, wenn man ein Array der Länge >= 32 hat, denn damit kann man fast nichts mehr automatisch erledigen lassen. Die Stdlib ist voll mit Implementierungen von Traits/Funktionen für Arrays nur von Länge 1 bis 32, da die Sprache noch keine Möglichkeit bietet sowas für alle Zahlen zu abstrahieren: https://github.com/rust-lang/rfcs/issues/1038
    Muss man dann manuell implementieren, was ziemlich nervig ist, aber auch kein unüberwindbares Problem darstellt.

    Welche Stdlib-Funktionen betrifft das?

    Kannst alle Traits auf https://doc.rust-lang.org/std/primitive.array.html nachlesen. Dort sieht man ganz schön, wie alle Traits für 1 bis 32 implementiert werden und für höhere Zahlen nicht.

    Warum gibts da Traits für alle Array-Größen von 1 bis 32? Geht das nicht eleganter?



  • interessierter Mitleser schrieb:

    Biolunar schrieb:

    interessierter Mitleser schrieb:

    Biolunar schrieb:

    interessierter Mitleser schrieb:

    krümelkacker schrieb:

    Starglider schrieb:

    - Welche Vorteile hat Rust gegenüber C++?

    Also, erstmal sei gesagt, dass man im Moment in C++ Dinge tun kann, die in Rust nicht bzw noch nicht funktionieren.

    Was geht in Rust z.B. noch nicht?

    Doof ist, wenn man ein Array der Länge >= 32 hat, denn damit kann man fast nichts mehr automatisch erledigen lassen. Die Stdlib ist voll mit Implementierungen von Traits/Funktionen für Arrays nur von Länge 1 bis 32, da die Sprache noch keine Möglichkeit bietet sowas für alle Zahlen zu abstrahieren: https://github.com/rust-lang/rfcs/issues/1038
    Muss man dann manuell implementieren, was ziemlich nervig ist, aber auch kein unüberwindbares Problem darstellt.

    Welche Stdlib-Funktionen betrifft das?

    Kannst alle Traits auf https://doc.rust-lang.org/std/primitive.array.html nachlesen. Dort sieht man ganz schön, wie alle Traits für 1 bis 32 implementiert werden und für höhere Zahlen nicht.

    Warum gibts da Traits für alle Array-Größen von 1 bis 32? Geht das nicht eleganter?

    Bisher nicht. Siehe den github Link in dem Zitatbaum 😉



  • Wie heist das Rust-Plugin für IntelliJ? In "Browse Repositories" finde ich unter Rust nichts. https://intellij-rust.github.io/docs/quick-start.html



  • Hab jetzt doch gefunden. [Strg]+[Alt]+[S] -> Plugins -> Repo -> Rust installieren 😋



  • Rust 1.18 ist out now! 👍 😋


Anmelden zum Antworten