Karriere
Wissen
Über uns
31. Mai 2023
Mit dem Ziel, uns die Besonderheiten und Unterschiede von Rust näherzubringen, verschaffte uns Rainer Stropek einen Überblick von den Basics über Konzepte wie Ownership und Borrowing zu Nebenläufigkeit mit Futures, async/await und Tokio.
Rainer Stropek ist ein erfahrener Fachmann im Bereich der Softwareentwicklung und seit 2008 als Mitbegründer und CEO der Firma "software architects" tätig. Das Unternehmen widmet sich der Entwicklung der preisgekrönten SaaS-Lösung "time cockpit". Zusätzlich unterstützt "software architects" seine Kunden bei der Umstellung auf Cloud Computing und SaaS. Vor seiner aktuellen Tätigkeit gründete und leitete Stropek zwei IT-Beratungsfirmen, die sich auf Entwicklung und Beratung im Microsoft-Technologie-Stack spezialisieren. Durch sein umfangreiches Know-how und seine mitreissende Art ist er bei Cudos ein beliebter Referent.
Für angehende Softwareingenieure, die bereits Erfahrung mit C, C++ und C# haben, ist Rust eine äusserst interessante Programmiersprache. Rust bietet eine Kombination aus Leistungsfähigkeit, Sicherheit und einfacher Syntax, die es ermöglicht, robuste und fehlerfreie Software zu entwickeln. Im Vergleich zu C und C++ verfügt Rust über Mechanismen wie den Ownership-Begriff und die Borrowing-Regeln, die helfen Speicherfehler wie Nullzeiger-Dereferenzierungen und Pufferüberläufe zu vermeiden. Darüber hinaus bietet Rust eine effiziente Unterstützung für Nebenläufigkeit.
In Rust sind Variablen standardmässig immutable. Das Keyword "mut" ermöglicht Mutationen!
Shadowing: Durch erneutes Deklarieren von Variablen können neue "bindings" erstellt werden.
Scopes: Variablen sind "block-scoped" und die Werte werden "gedropt" sobald sie den Scope verlassen.
Es gibt keine "statements", nur "expressions". Ohne Semikolon werden die Werte zurückgegeben, ohne "return" statement.
Besonderheiten bei den Datentypen: Arrays haben fixe Grösse und sind auf dem Stack gespeichert. Vektoren können wachsen und schrumpfen, und die Werte sind auf dem Heap gespeichert.
Slices sind temporäre "views" von Arrays und Vektoren.
Makros! Makros sind mit einem Ausrufezeichen gekennzeichnet und werden auch in Standard-Libraries verwenden, siehe die Instanzierung des Vektors im vorherigen Code-Snippet mit einem Makro.
Structs. Es gibt drei verschieden Struct-Typen.
Mit "impl" blocks können structs mit Funktionen erweitert werden.
Ownership und Borrowing sind grundlegende Konzepte in Rust, die zur Erstellung von sicherem und effizientem Code beitragen. Das Konzept der Ownership bedeutet, dass jedes Datenobjekt genau einen "Owner" hat. Wenn der Owner den Scope verlässt, wird die Ressource automatisch freigegeben. Dadurch werden Laufzeitfehler wie Speicherlecks oder Dateninkonsistenzen vermieden. Um jedoch flexibel auf Daten zuzugreifen, ohne sie zu besitzen, kommt das Konzept des "Borrowing" zum Einsatz. Borrowing ermöglicht es, temporäre Verweise auf Daten zu erstellen, ohne die "Ownership" zu übertragen. Alternativ kann der Owner die Ownership auch von sich aus transferieren – was in Rust "Moving" genannt wird.
Moving vs. Borrow. Ohne Borrow verliert main die Ownership über die Person, und kann diese beim zweiten Aufruf nicht noch ein zweites Mal transferieren.
Variante Shared Borrow. Die Funktion print_person darf die Person lesen, aber nicht mutieren!
Mit einem Mutable Borrow darf die Person auch mutiert werden.
Neben den Basics hat Rainer Stropek im Workshop auch weitere Themen aufgegriffen, die hier den Rahmen sprengen würden. Erwähnenswert sind diese Konzepte allerdings auf jeden Fall:
Danke für Ihr Interesse an Cudos. Ihre Angaben werden vertraulich behandelt – den Newsletter können Sie jederzeit abbestellen.