
Einfach Komplex – Der Software- und IT-Podcast· Folge 110
Rust: Konzepte, Architektur und Einsatzgebiete mit Marcel Koch #110
Dienstag, 19. Mai 2026 · 1 h 08
Kapitelklicken springt direkt hin
Shownotes
Rust gewinnt seit Jahren Entwicklerherzen und positioniert sich als ernsthafte Alternative zu etablierten Größen wie C oder C++. Gemeinsam mit Marcel Koch schauen wir unter die Haube der Sprache und klären, warum der Hype absolut gerechtfertigt ist. Der historische Grundstein von Rust liegt zwar in der garantierten Speichersicherheit ohne bremsenden Garbage Collector, doch das ist längst nicht mehr der einzige Grund für den Siegeszug der Sprache.
Ein massiver Treiber für die aktuelle Verbreitung ist WebAssembly (WASM). Rust hat sich hier als absolute First-Class-Language etabliert. Durch die Möglichkeit, Kernlogik einmal zu schreiben und dann performant in den Browser zu bringen, verschwimmen die klassischen Grenzen zwischen Backend und Frontend. Plötzlich lassen sich rechenintensive Aufgaben mit nahezu nativer Geschwindigkeit direkt in Web-Applikationen ausführen, was völlig neue Architekturansätze ermöglicht.
Gleichzeitig werfen wir einen Blick auf die Developer Experience und die teils berüchtigte Lernkurve. Wer von Sprachen wie Python oder JavaScript kommt, wird anfangs unweigerlich mit dem strengen Compiler von Rust kämpfen. Doch genau dieser Compiler fungiert nicht als bloßer Fehler-Melder, sondern fast schon als strenger Mentor, der Entwickler zu sauberer Architektur zwingt. Ergänzt durch das hochgelobte Tooling rund um den Paketmanager Cargo bietet Rust ein modernes Ökosystem, das den Frust früherer C-Projekte schlichtweg überflüssig macht.
Links zur Folge
Marcel im Web marcelkoch.net
Marcel auf LinkedInlinkedin.com/in/mknet
Zu Cross-Plattform-Entwicklung mit Rust
heise.de/hintergrund/Cross-Plattform-Applikati…
heise.de/hintergrund/Cross-Plattform-Applikati…
heise.de/hintergrund/Cross-Plattform-Applikati…
Rust Buch rust-buch.de
Konferenzen
md-devdays.de/act-details/1000897
oxidizeconf.com/sessions/beyond_ffi_shipping_n…
rustlab.it/talks/back-to-the-future-building-c…
Wikipedia de.wikipedia.org/wiki/Rust_(Programmiersprache)
Web Assemblyde.wikipedia.org/wiki/WebAssembly
Rust Foundation rustfoundation.org
------
Einfach Komplex ist ein Podcast von Heisenware.
Teste Heisenware kostenlos unter heisenware.com/einfach-komplex (heisenware.com/einfach-komplex)
Transkriptvom Podcast bereitgestellt · Zeitmarken springen hin
Moin zufolge 110 von einfach komplex. Heute zum Thema Rust mit dem Marcel Koch Moin Marcel. Hallo zusammen, freut mich hier zu sein. Moin, bin auch da. Huhu. Ja, sehr cool. Rust ist eine Programmiersprache, so viel weiß ich auch noch, wofür man die genau einsetzt, wie die sich abgrenzt, was sie heute noch für ne Daseinsberechtigung hat, das hab ich schon n bisschen rausgehört, all solche Themen wollen wir heute mal beleuchten und vielleicht auch was so die Besonderheiten sind.
Aber bevor wir das tun, Marcel. Magst du dich ein bisschen vorstellen, dass die Hörer und Hörer wissen, mit wem haben Sie es denn hier heute hauptsächlich zu tun? Mache ich gerne. Vielen dank, Gerrit. Ja, ich bin Marcel, hast du ja schon gesagt, ich betreibe eine kleine, wie ich gerne sage, nahbare softwareberatung ich arbeite mit einem Netzwerk aus Freelancern zusammen, wenn es mal auch um größere Projekte geht und habe mich in den letzten Jahren auf Trust Plattform Entwicklung auf Basis von Rust. Oft gepaart mit Flatter spezialisiert. Ich hab ne lange Historie von verschiedenen Dingen die ich gemacht hab, war lange Consultant in Webagenturen unterwegs und bin seit 2018 selbständig unterwegs und zusätzlich eine
Herzensangelegenheit von mir ist noch das Thema Kommunikation in der IT und da gebe ich auch Coachings und Trainings im Bereich gewaltfreie Kommunikation und Transaktionsanalyse. Sehr schön. Cool, dass du da bist. Die die Zeit heute für uns nimmst. Du meine erste Frage, vielleicht ist n guter Einstieg. Warum hast du Rust eigentlich Rust? Das klingt ja n bisschen rostig.
Und damit kommen wir schon zur ersten Frage, die ich gar nicht beantworten kann. Podcast schon erledigt? Ich, ich glaube es, da steckt dieses robust drin und wenn ich, wenn ich das richtig im Kopf habe, aber das kann ich nicht richtig beantworten, aber ich glaube, es ging darum, eine eine Programmiersprache zu entwickeln, die besonders eine robuste Codebase mit sich bringt, vielleicht ist auch ne Urban Legend und dann hat man das.
So wie bei bei Samba share. Da hat man ja auch irgendwann mal überlegt ne was wo steckt SNB überall drin, deswegen nennen wir das jetzt Samba bei diesem Windows Netzwerk Kram und ich glaube das hat damit zu tun, das ist natürlich immer n bisschen schwierig und da gibt es auch diese ganzen, diese ganzen Wortspielereien, es gibt ja beispielsweise in in Deutschland die die Oxydice das ist ne ne kleine Konferenz und ja und da gibt es auch Grüße gehen raus an den Matthias Endler der auch ne. Consultingfirma hat die der Carode genannt hat, und da kann man diese ganzen Dinge irgendwie da darauf Münzen ist natürlich nicht unbedingt der der bestgewählte Name, wenn das, wenn es da verstehen soll, dass
es besonders lange hält und nicht rostet, so, aber ich weiß es nicht hundertprozentig. Klingt aber erstmal ganz passend eigentlich und ganz gut, OK, und aber jetzt vielleicht, wo du dann auch immer noch mehr zu sagen kannst ist, wofür eignet sich jetzt Rust? Ganz besonders also ich hab schon verstanden, es gibt viele Programmiersprachen, ja und viele haben so ihre Eigenarten und und besonderen Anwendungsfälle, manche sind Allrounder, andere eignen sich besonders für Machine Learning oder so was ist da bei Rust eigentlich der Hauptanwendungsfall, wofür wird es eingesetzt? Ursprünglich ist ja Rust groß geworden unter dem Schirm von von Mozilla, und da ging es damals darum, eine Alternative zu C plus Plus zu entwickeln.
Die bestimmte Probleme, die man in der Entwicklung mit C und C plus plus, ganz besonders in Bezug auf das Speichermanagement, die die, die man dort hat, dass man die mit der neuen Programmiersprache, in dem Fall Rust, nicht mehr hat und Rust an sich wird heutzutage sehr oft innerhalb von der Systemprogrammierung gesehen und wurde auch ne ganze Zeit lang noch mal mit go verglichen, weil das irgendwie total unfair ist.
Go hat einen ganz anderen, einen ganz anderen Hintergrund, auch ein ganz anderes Ziel, denn Rust ist aus meiner Sicht viel breiter in den Möglichkeiten und da gehen wir bestimmt später auch noch drauf ein. Aus meiner Sicht nicht nur bei bei der Systemprogrammierung zu sehen, sondern auch bei bei Business Anwendungen wie beispielsweise was man heutzutage oft in in Java oder in in C Sharp schreibt und deswegen würde ich sagen erstmal wenn man hingeht und sagt, ich hätte gerne etwas. Sehr robustes, Performantes und besonders sicheres. Das ist ja im Deutschen so. 22 hat 2 Bedeutung, dann geht man in in Richtung Rust.
Wenn wir uns mal die Blogosphäre oder Linkedin mal angucken, da wird sehr viel gestritten und diskutiert und ach Rust ist der ist der neue Hype et cetera und bringt ja eigentlich gar nichts, aber letzten Endes geht es dahin zu sagen, ich möchte. Innerhalb meiner Sprache, wenn ich sie, wenn ich sie schreibe, eine sehr solide Codebase haben, eine Codebase, die sehr lange wartbar ist und in der Ausführung hätte ich gerne keinen Garbage Collector, also sehr viel im Bezug auf Performance und da reiht sich dann Rust irgendwo zwischen C Java und C plus Plus und C. Auf der anderen Seite, direkt in der Mitte ein und dort. Erfüllt es seinen Platz sehr gut und grundsätzlich sind die die Dinge, die momentan da gemacht
wird. Es wird ja auch viel darüber gesprochen. Ja, Rust ist jetzt im Linux Kernel und so weiter es stimmt auch alles, aber wie gesagt, ich verwende Rust hauptsächlich im Rahmen von Cross Plattform Entwicklung für Mobile und Desktop Entwicklung und da kann man das sehr gut einsetzen und auch sehr gut in andere Programmiersprachen integrieren, beispielsweise also wenn ich noch mal auf die Frage zurückkomme, wenn wir es einordnen müssen, dann haben wir diese Hochsprachen in Bezug auf.
In Bezug auf Sishab und Java. Und dann haben wir sowas wie C und C plus Plus und genau damit dann in der Mitte können wir, dann können wir den Rust einsetzen. Und Marcel sagt noch einmal schnell von der Zeitskala her ist Rust ja deutlich ne deutlich aktuellere Sprache, sag ich mal. Also C und C plus Plus sind ja schon vor ewigen Zeiten, standen da nämlich gar nicht fest. Ich weiß gar nicht wann, aber Rust gibt es seit wann ungefähr pi mal Auge. 2021 ist, wenn ich das richtig im Kopf habe, die, die 1.0 rausgekommen war es 2019 also letzten Endes ist das ne relativ junge Sprache.
Also jünger als und so weiter alles auf jeden Fall ja. Genau, und das hat natürlich auch den Vorteil, dass das eine neuere Sprache von den älteren Fehlern eben lernen kann. Es gibt es auch bestimmte Dinge, die. Die bei Rust im Vergleich beispielsweise zur CMC Plus Plus nicht gegeben ist. Zum Beispiel die Geschichte mit den Headern ich hab, ich halte regelmäßig Trainings in in Rust für für Leute, die momentan COLC plus plus schreiben und da gab es auch schon mal die Frage, ja, wie sieht denn das aus, wenn ich jetzt Header ausgeben möchte, aber die Implementierung nicht, sondern die möchte ich nominär ausgeben, wie kann ich das denn machen? Das ist beispielsweise auch ne Sache. Also ich bin da jetzt nicht
blind Links hier unterwegs, sage Rust ist das Beste, das muss man unbedingt einsetzen und das ist beispielsweise dann ein ein Thema, wo wo ich sage, da hat Rust nichts zu bieten, weil sie sagen, alles was was ich, was ich verbreite, ist auf Basis von dem kompletten Quellcode und ich kann jetzt beispielsweise keine Header Dateien ausliefern und dagegen dann später Linken, das unterstützt Rust nicht. Dafür gibt es n sehr starkes Modulsystem, aus meiner Sicht auch übersichtlicher als wie man das in in C und C plus Plus kennt.
Aber ich bin natürlich auch da n bisschen parteiisch. Vielleicht noch mal für unsere Zuhörer kurz, was du jetzt gesagt hast, ist schon sehr tief, also Header und verlinken und so weiter das mal n bisschen aufzuklären. Ich hab ja auch so meine Wurzel in C plus plus. Ich bin leider sehr eingerostet, eingerostet da.
Was C plus plus alleine angeht, weil bei Rust lerne ich heute auch genau während so Zuhörer, was die Sprache hergibt und so weiter hab ich tatsächlich noch, leider noch nie die Zeit gehabt mich tief mit zu befassen und auch nur irgendwas zu programmieren, aber kurz gesagt in C plus Plus gibt es tatsächlich n ziemlich starken Unterschied, den gibt es in Python und in wenn man so Python oder Javascript macht, da kennt man den überhaupt nicht, da weiß man gar nicht wovon die sprechen, die Jungs mit Header und Source file ja sogenannte ja die haben. Auch historisch über die über die Zeiten irgendwie bestimmte Endungen.
Die sind aber auch nicht strikt, also mal Punkt h für Header, also ne H wie Header oder HPP für Header plus plus oder wenn ich da templates drin hab oder irgendsowas und dann halt das Punkt C file in das ist eigentlich Standard in C. Das heißt immer Punkt C eigentlich, da hab ich noch nichts anderes gesehen und C plus plus heißt ganz oft Punkt CPP, also für C plus plus Morales ja und tatsächlich muss ich. Wenn ich jetzt in dieser Programmiersprache C plus, Plus oder C mich befinde, meinen Code, den ich schreibe, aufteilen zwischen diesen, zwischen diesem Header file und dem ja, dem Source File implementierungspfeil, und das ist, das ist am Anfang schwer zu erklären, für Leute, die da reinkommen, warum, warum zur
Hölle muss man das machen, das muss man mit vielen anderen Programmiersprachen auch nicht machen, ja, und es hat aber. Es hat es hat da, es hat damit auch, also ich glaube, es ist erstmal, weil es historisch ist und weil man früher jedes einzelne Byte sparen musste und so weiter und weil, weil es einen Compiler und einen Linker gibt, den wir jetzt nicht näher drauf eingehen, aber es gibt schon seine Gründe und nur kurz gesprochen, im Header erzähl ich eigentlich im Prinzip nur, wie die Funktion aussieht, ich deklariere sie typischerweise, also ich kann sehen, es gibt die Funktion, die heißt, die hat den Namen so und so, die die wird zurückgeben, den den den Datentyp so und so, und sie wird.
Erwarten die Eingabeargumente vom Typ Integer, integer, String oder Irgendsowas? Das kann ich hinschreiben und dann reicht n Semikolon dahinter und dann bin ich fertig mit dem Header und hab die Funktion deklariert wie man sagt und dann gehe ich in den in den in das Source File und nenne sie quasi noch mal ganz leicht anderen Regeln und implementiere sie.
Da will ich die Klammer die nachdem ich das wieder hingeschrieben hab die Funktion mach ich dann die geschweifte Klammer auf. Und quasi das, was die Programmiersprache, was ich, was ich wirklich machen will, was die Funktion tun soll, wenn sie aufgerufen wird von außen, da steht dann normalerweise im Source file ne und jetzt kurz das aufzuräumen mit dem linken und so weiter also wir haben ja bei den C und ich glaub bei Rust auch du griffst nicht weg, das ist ja ne kompilierte Sprache, das haben wir noch gar nicht gesagt, aber wir haben einen Compiler der darüber läuft, genau. Der ist sehr, sehr wichtig.
Genau. Wir haben ja nämlich das da, die, so kann man die Programmiersprachen so n bisschen kategorisieren, es gibt die die kompiliert werden, das ist nämlich CC plus plus Rust. Ja und auch Java zum Beispiel wird kompiliert, da muss man schon n bisschen gucken, da ist so n bisschen n grauer Bereich, weil da so ne virtuelle Engine ist, die da kompiliert ja, aber genau weil ich, ich würde sie zu den kompilierenden Sprachen zählen, jetzt krieg ich gleich n paar Kommentare im Nachgang, aber egal nehm ich den Kauf ich.
Unterstütz das, ich unterstütz es wird ja bald kompiliert. Richtig so. Und aber das und das genau der Byte Code wird kompiliert und jetzt kommt was Wichtiges, das was dann da rauskommt ist dann sind ist 1 von 2 Sachen entweder es ist direkt n Programm was ich ausführen kann, Executable in Maschinencode und der ist dann auch sehr performant und da muss ich auch aufpassen, dass der Compiler quasi den richtigen Maschinencode für die richtige Plattformarchitektur kompiliert und so das ist nicht alles so einmal kompiliert und dann geht das überall, da muss n bisschen gucken.
Oder aber das zweite ist, wenn nicht n ausführbares Programm direkt rauskommt, dann kommt eine sogenannte Bibliothek raus. Also das ist quasi einfach nur n zusammengepackter binärer Haufen von diesen Funktionen, die wir gerade besprochen haben, die die dann wieder in einem in einer weiteren Executable reingelinkt werden können. Also ich quasi mach ich nen Sack von Funktionalität fertig schnür den oben zu sag das ist jetzt hier irgendwie ne bildverarbeitungssack Funktionalität. Und dann kommt ein anderer Kollege hin, der sagt, Ich habe jetzt hier ein kleines Programm, da lese ich einfach nur von einer Platte ein und jetzt nutze ich den Bibliothekskram aus dem Sack und Linke den verbinde den
quasi bytecode technisch mit meinem Code und dann habe ich was neues Großes geschaffen. Ne so, jetzt habe ich viel erzählt damit wir verstehen ungefähr was ist ne libry und diese libry Teile, die stehen halt quasi normalerweise halt nicht im Header, sondern die werden halt durch implementiert und jetzt gibt es bei C plus plus ganz modern und ganz schick. Das hat mit Template zu tun, das lass ich jetzt weg. Wir wollen uns über Rust unterhalten, die Möglichkeit aber auch diesen Sack von Funktion tatsächlich im Header zu bauen, das heißt, ich lass im Prinzip dieses CCPP oder C File weg, in C geht das nicht, aber in C Plus geht das und ich schreib dann nur noch im Header alles hin, das hat den Vorteil, dass ich nicht mehr linken muss
im Prinzip, sondern ich kann es direkt reinkompilieren es ist so wie ich hab es gerade mitgeschrieben in dem in dem neuen Code und das hat den neuen großen Vorteil ist es. Cross Plattform per Definition ja, weil also fast, also weil weil ich keinen Byte Code mehr hab. Ich hab immer minus immer minus n paar ganz krasse Edge Cases Cases ja aber im Prinzip war das sehr portabel das ganze Ding ja aber ich hab halt den Nachteil, dass auch der Code lesbar bleibt. Ja da kann ich nichts mehr verstecken, ist halt kein Maschinencode ja ist halt wie wie Open Source dran geklebt ja das ist halt auch so n Ding kann man machen aber ist dann irgendwie ja so.
Und du sagst jetzt, da gab es jetzt Leute, die haben gesagt, ja, und warum kann ich in Rust nicht auch Header Bibliotheken schreiben, wo ich gar kein binäres Paket hab, was ich irgendwo gegenlinken muss, sondern ich will es irgendwie einfach mitnehmen. Ja und du sagst das kann Rust heute zum Beispiel noch nicht. Ja richtig, jetzt hab ich lange viel erzählt, aber ich glaube es war vielleicht noch mal zum Verständnis. Das ist doch wunderbar.
Das ist natürlich immer schwierig, die Dinge. So zu erklären, dass sie dann auch alle abholen, weil man dann nicht genau weiß, wer dann zuhört. Aber letzten Endes ist das genau richtig, was du gesagt hast. Du hast nur von Plattformen gesprochen, weil wir reden ja damit von Cross Plattformen und was ist eine Plattform, da gibt es ja die verschiedenen Architektur Plattformen, also die Prozessorarchitekturplattformen und dann gibt es die verschiedenen Betriebssysteme, das ist ja sehr schwierig, dann auch noch dieses Wort Plattform in den richtigen Kontext zu bringen, aber du hast vollkommen recht und bei dem Header ist es so und da hast du auch vollkommen recht. Ist die Idee, dass man, ich will
es vielleicht auch so, als Schnittstelle definieren, also letzten Endes sage ich, wie sieht meine meine meine Schnittstelle innerhalb meines C oder C plus plus Codes aus, unabhängig davon, wie ich das später implementiere. Also ich sage nur, das ist das ist, was du ja auch gesagt hast, meine meine Funktionssignatur, wie man ja auch sagt, also welche Parameter gehen rein, welche was kommt raus.
Und später könnt ich dann noch sagen, ich liefere etwas, was schon die sogenannte Maschinensprache ist. Was das Binäre ist, was schon auf die entsprechende Prozessorarchitektur übersetzt wurde. Ich weiß aber gar nicht, wenn ich das dann einsetze, was da genau drin steht und das ist ein Vorteil, weil ich bestimmte Dinge nicht verraten muss, und das ist ein Nachteil, um jetzt mal noch mal zu bestätigen, dass es auch Nachteile bei Rusk gibt, wenn ich zu rusk gehe, dort habe ich die Möglichkeit nicht zu sagen, ich definiere meine meine reine Schnittstelle.
Sage ich liefer das dementsprechend aus. Ich implementiere einen ganz geheimen Algorithmus oder einen Audiocodec, also etwas was was. Patentiert ist im Notfall so. Was genau was patentiert ist und was dann eine bestimmte Datei dekodiert p 3 oder sowas. Und dann müsste ich, wenn ich nur das in einem reinen Rust mache müsste das dementsprechend dann auch komplett als Quellcode rausgeben.
Bei C und C plus Plus hab ich die Möglichkeit das auch mit den Header zu machen. Es gibt auch Umwege das mit Rust zu machen, aber da sind wir jetzt, ich wollte das nur als Beispiel bringen, dass es, dass es nicht nur Vorteile gibt im im Bezug auf Rust, aber das ist wirklich einer der wenigen Nachteile, die ich jetzt aufzählen werde.
Genau. Aber jetzt noch mal ganz kurz gesprochen hat, hat jetzt Rust also gar nicht das Konzept von Headers und Source. Es gibt keine Header Dateien in Rust. Es gibt letzten Endes nur. RS Dateien, also was den was den Quellcode angeht und die strukturiere ich. Ich glaube, wenn ich das richtig im Kopf habe, so wie das auch bei bei C plus plus Einzug hält in Module und diese Module kann ich komplett schneiden wie ich möchte und habe aber keine zusätzliche Definition einer Schnittstelle die ich irgendwie linken muss, sondern ich hab eine gewisse Struktur innerhalb meines Codes.
Nicht diese 2 Ebenen von von Headern und der jeweiligen Orientierung. Got it. Und gleich wenn wir da sind, da können wir gleich n bisschen, wir gehen ja sowieso n bisschen unter die Haube der Sprache, auch um n bisschen zu gucken. Marcel, Wie sieht das dann aus mit den mit der wie heißt das, wenn ich jetzt quasi ein Modul Reinlade in n anderes Rust Modell ist das auch n Import oder wie funktioniert das? Was schreibe ich oben hin oder inklud oder irgend so NC plus Plus ist ja so irgendwie inklud bla bla bla ja würde ich das machen in Rust.
Das machst du mit Use. Also letzten Endes gibt es die Möglichkeit mein meine eigene, mein eigenes Programm in verschiedene Module zu zu unterteilen und dort benutze ich dann ein ein sogenanntes Schlüsselwort, also was, was reserviert ist für die Sprache. Das nennt sich dann Mod, um dann bestimmte Module aufzuteilen und wenn ich dann bestimmte Symbole, also etwas, was in einem anderen Modul oder in einem anderen sogenannten Crate, also das ist eine externe Bibliothek.
Die ich einbinden kann. Gibt jetzt beispielsweise auch die die Website crades. IO und dort sind alle da. Da ist im Prinzip die, die sind alle Packages genau Unterschied zwischen Package und Crades, aber alle externen Bibliotheken die es so gibt da draußen von der Community sind da aufgelistet. Wenn du irgendwo gefunden werden willst und sagst oh ich hab jetzt hier meine mein super webframework, dann gehst du zu crades IO und sagst ich veröffentliche jetzt hier mal mein entsprechendes Crades.
Also so, so n bisschen wie das bei NPM wäre, der ganz genau geht Manager von. Richtig, genau. Und bei bei NPM ist es so, dass es sowohl die die Webseite gibt, die dann NPM heißt und auch das der sogenannte Package Manager. Oder es gibt auch Leute, die das als Bildsystem bezeichnen. Ich ich finde, dass das schwierig dieses dieses Produkt zu bezeichnen, aber da unterscheiden wir in Rust and Trade, das ist das Paket, also ist ja die Kiste auf Englisch und dann gibt es Cargo. Das ist dann das das Tool mit dem ich das alles verwalte. Also ich verwalte wie heißt mein mein Projekt, wie heißt meine Applikation oder meine Bibliothek, was sind meine Dependencies, die dann auf die die Crades IO standardmäßig Liste und der oder die die
Bibliothek dort verlinkt und sagt Ich möchte beispielsweise Tokyo verwenden und da was implementieren, das ist etwas was in der asynchronen Programmierung gerne verwendet wird, oder ein Webframework namens Exum. Und das trag ich dann dort in meine sogenannte Cargo tommel. Tommel ist eine bestimmte Auszeichnungssprache, um zu strukturieren, so heißt mein Programm, das ist die Version von Rust, die ich verwenden möchte, das sind meine Dependencies. Folgendes ist noch wichtig für den Compiler et cetera, das trag ich da ein.
Im Java Space ist das beispielsweise die POMM XML, die man bei Melvin kennt. Das das ist. Alle Programmiersprachen haben ja so n Ökosystem um sich rum. Richtig. Und bei und. Du hast, du hast das also genannt, ne dieses Cargo. Cargo genau, wenn wenn ich standardmäßig gehst, geht man hin. Wenn man jetzt anfängt und sagt ich möchte also wenn ich meine Trainings beginne, fangen wir an zu sagen, ich möchte erstmal Rust installieren, dann gibt es etwas, das nennt sich Rust. Mit dem verwalte ich die entsprechenden Stand die die entsprechenden Standardbibliotheken, die sogenannten Compy Targets, also das von von verschiedenen Plattformen gesprochen.
Prozessorarchitekturplattformen, und die spreche ich ja mit Rust direkt an. Wenn ich jetzt Java beispielsweise nehme, dann haben wir vorhin drüber gesprochen, da, dann gibt es einen Byte Code, dieser Byte Code läuft auf einer virtuellen Maschine, deswegen brauche ich für für Java wenn ich was kompiliere keine verschiedenen compile targets, das brauche ich aber in Rust.
Diese verwalte ich mit Rust ab. Das installier ich damit und mit Rust. Nachdem ich Rust installiert habe und der Rust Compiler kommt dann mit und auch Cargo und das Standardwerk Weißt du oder den Standardschritt, den man in jeder Programmiersprache macht, ist das Hello World. Man geht dann hin und sagt dann Cargo New, Hello World und dann bekomme ich mein meine kleine Binary, hab da meine meine Main Funktion drin, also der Startpunkt eines Programms und dort kann ich dann sagen Hallo mein Name ist Marcel und ich spiele gerne Gitarre so und dann.
Gibt man das raus, kompiliert das dann mit Cargo Bild oder führt Cargo Run aus und dann hat man das, was man standardmäßig auf seiner jeweiligen Prozessorarchitektur hat schon geliefert, führt das aus und hat seine sogenannte Executable, also wirklich die die Datei in der Maschinensprache ohne Runtime und das muss ich noch mal unterstreichen, ohne Garbage Collection. Das ist einfach das Ding, was, was dann ausgeführt wird ohne zusätzliches Zeug.
Das ist auch n Vorteil, wenn man es dann deployen will später und sagt, ich möchte beispielsweise auf einem genux Server was laufen lassen, Du hast am Ende nur eine Datei, eine Binary die du hast, die du hochladen musst und dann führst du das einfach aus. Bei Go ist das beispielsweise auch so, das ist aber der der immense Vorteil Vergleich wenn du jetzt Note, JS oder Java oder dot net und so weiter entwickelst, weil die brauchen ja immer noch ihre ihre Runtime.
Und das ist auch ein Vorteil. Nicht nur, wenn ich das jetzt auf dem News Server hochlade, sondern wenn wenn ich beispielsweise auch etwas machen möchte wie Web Assembly entwickeln, was ja wieder dann Byte Code im Browser ist. Aber da kommen wir vielleicht gleich dazu. So aber letzten Endes ist es so, Cargo ist der ist der Einsprungspunkt damit fängt alles an.
Also ich würde mal sagen 99,9% aller Brus Projekte basieren auf Cargo, da gehe ich hin cargo New. Kann loslegen. Tragt auch meine Dependencies ein, wenn ich welche haben möchte und dann kann ich loslegen, auch in inklusive Test und allem. Und sag mal jetzt, wir müssen da gleich glaub ich n bisschen den Speed hochdrehen, weil wir noch n bisschen bei den Dependencies, aber es interessiert mich trotzdem, weil das sind auch so die wichtigen Sachen, auch wo man ja auch als Entwickler irgendwie rumstolpert, wenn man, wenn man mit den Dependencies nicht klar kommt. Sag noch mal schnell, wie funktioniert das? Ich weiß ja, NC plus plus zum Beispiel, wenn ich jetzt, wenn ich jetzt ne Dependency nehme,
dann muss ich auch aufpassen, dass ich die Mitschiffe, dass die auch richtig gefunden wird auf dem Betriebssystem und so weiter das ist n also das Macht ja auch der Linke und der kann das zu Runtime machen, zu compile Zeit und so weiter das ist hinlänglich komplex, der ganze Kram. Damit muss man sich wirklich lange befassen und das ordentlich hinkriegen, ja nur vielleicht ein 2 Sätze, wie funktioniert das denn? Rust and ist in deiner Executable in der Hello World und sagen wir mal die Hello World braucht jetzt. Zeigt das an in einem Fenster und hat noch nen 3 d blinkie Blinkie oder irgendsowas und braucht dafür ne fette Bibliothek, die jemand anders schon gemacht hatte in Rust. So die du jetzt mit deinem Cargo
da und deinem Trommel und so weiter alles hin formuliert hast und die hast du jetzt damit eingebunden. Ja wird die jetzt in den Byte Code mit Einkompiliert geschmissen, so ist das dann einfach n bisschen dicker, das Ding hat das dann irgendwie nicht was weiß ich 2 Kilobyte sondern irgendwie dann 4 Megabyte und das ist alles drin und es isoliert und funktioniert einfach.
Oder muss ich das Ding irgendwie auf n System verteilen, finden, suchen oder irgendwas? Also kannst du da noch mal 2 Sätze zu. Sagen da, da steckt der Teufel natürlich im Detail. Standardmäßig ist das die Antwort, die du schon selbst gegeben hast. Und dann möcht ich noch mal korrigieren, ist kein buyte Code, sondern tatsächlich n Maschinencode und Maschinencode.
Ja ja wunderbar, wollen ja nur wollen das Gleiche wollen ja die die Wahrheit finden ja ja und letzten Endes ist das Binary dann deutlich größer, weil. Standardmäßig, das stimmt nicht in allen Fällen, aber standardmäßig wird das dann alles mit rein kompiliert, sodass du am Ende eben nur dieses eine Binary hast und diesen ganzen Hassel und das ist auch n Argument, dass ich immer wieder in den Trainings bringe.
Du hast bei bei den beim C oder C Plus plus Ökosystem hast du ganz viele verschiedene Möglichkeiten, wie du an die Packages kommst. Wie du das Einbildest, dann gibt es viel mehr cemake und und verschiedene Möglichkeiten das das das einzubinden wenn es um rein Rust geht ist das total einfach im Vergleich, zumindest wenn du mich fragst weil du sagst ich hab mein crades IO. Das binde ich ein.
Das sorgt dafür, dass dass, dass ich das verwenden kann, dann baue ich das, dann ist das Reinkompiliert und fertig ist die Kiste. OK, God it, wow. Ich wurde noch nicht so schnell so doll abgehängt, aber aber es ist, aber es ist richtig cool. Es es ist halt, es ist halt auch n sehr sehr sehr breites und tiefes Thema.
Es ist nicht so wegen ich mach mal n bisschen. Data Science mit Python und und und. Pandas oder so. Völlig richtig. Ja, und das? Ist schwierig, ja. Wollen ja auch mal ans Angemachte gehen. Ja, hier ne nicht nur jetzt hattest du schon das das Stichwort Garbage collection irgendwie schon 23 mal erwähnt.
Ja und auch im Vorgespräch und und auch in meiner Recherche, ich habe ja bei mir gar keine Ahnung was was dahinter jetzt eigentlich steckt, aber ich glaub das sollten wir jetzt schon mal besprechen und und und noch mal verstehen was sich dahinter versteckt, ja. Oder eben nicht bei Rust. Ja, und warum? Ja, lustigerweise hab ich auch mit meiner Frau zusammengesessen und dann hat sie mich auch gefragt, warum ist das denn so n so n so n dickes Ding und dann hab ich ihr versucht das auch mal zu erklären und ich glaube es ist mir auch geglückt. Jetzt versuch ich das mal so zu wiederholen und hoffe es glückt mir dann noch mal.
Also letzten Endes ist es ja so, wenn ich wenn ich ein Programm habe, dann ist es so, dass ich immer irgendwie einen bestimmten Teil von meinem Arbeitsspeicher reservieren muss, indem ich etwas reinschreibe so das heißt. Ich lese beispielsweise eine Datei ein und will das will etwas mit mit ihr machen oder ich habe einen bestimmten String, den ich nur ausgeben möchte, also zum Beispiel Hallo, ich bin Marcel und ich spiele gerne Gitarre und dann ist es so, dass in in vielen Sprachen, die heute verwendet werden, darunter Python, darunter wieder Java, darunter auch Java Script, ob ob, ob auf dem Server oder jetzt im Browser ist selber dahingestellt und da wird Speicher reserviert beziehungsweise.
Man spricht davon. Allokation, das heißt, ich sage, das ist mein geh weg, du, das ist jetzt mein Speicher und dann arbeite ich damit, und wenn ich den aber nicht mehr brauche, weil ich da was eingelesen habe, meine Operation durch ist und so weiter, dann kann ich den wieder freigeben, weil irgendwann ist das Ding auch aufgebraucht und jeder kennt das ja von sich mit, zumindest mit Festplatten kennt das jeder und auf auf den Smartphones auch. Irgendwann ist der Speicher halt halt aufgebraucht und deswegen ist es ist es total.
Wichtig, dass wir den, dass wir den Speicher wieder freigeben und in einer, in einer Sprache oder in den meisten Sprachen, die heutzutage verwendet werden, passiert das über die Garbage Collection, das heißt, ich mach erstmal gar nichts und sage der der Umgebung, gib mir bitte mal diesen Speicher, dann mach ich nichts mehr damit und dann kommt ein Assistent, der dann sagt, Ah, Marcel hat jetzt hier, da diese diese Datei gelesen oder diesen diesen String. Hallo, ich bin Marcel Spiel gerne Gitarre ausgegeben. Ich sehe da, der wird nicht mehr verwendet. Ich räum den mal auf, also kann man sich wirklich vorstellen wie ach das wird markiert, man spricht auch von Mark and Sweep, das heißt, das wird markiert und
dann wird das weggefegt oder gewischt und diese diesen Punkt, dem muss diese Runtime, also etwas was dann das Programm ausführt, muss das irgendwie umsetzen und das führt dazu, dass das auf der einen Seite erstmal passieren muss, das heißt, während das passiert, kann das Programm nicht weiterlaufen und zweitens. Um dieses Aufräumen zu machen, braucht die Runtime auch wieder Speicher.
So, und das bedeutet unter unterm Strich, dass dass die die Ausgabe beziehungsweise die die die, dass es dem Programm, wie soll man sagen Ausführungsfluss kurz unterbricht und dass dadurch die die Performance leiden kann, nicht muss, aber es ist immer was, was noch zusätzlich dazu kommt, das heißt da ist irgendwas noch dabei innerhalb von von der Runtime.
Und das trennt im Prinzip, oder dass das das verlangsamt, das, was der, was der Prozessor an Performance bringen könnte, dass das kann das dementsprechend verlangsamen und da muss irgendwas mit getan werden und das gibt es bei Rust aufgrund der Tatsache, dass es ein, wie ich gerne sage, ein Semi manuelles Speichermanagement gibt, nicht, denn da gibt es die Idee des sogenannten Oderships, bei dem der der Rust Compiler zur compile Zeit weiß. Ah, da wird Speicher gebraucht, hier wird er aufgeräumt und wenn das Programm ausgeführt wird, dann ist das alles schon damit eingebacken sozusagen, und das muss dann nicht zur Laufzeit passieren.
Das passiert dann zur Übersetzungszeit das ist das, was man sagt, ich sag hab ich mein Rust Code, ich will den Maschinencode haben und dann. Während während das passiert, diese Übersetzung dieser Kompilierung wird dann entschieden, wie verwalte ich denn den Speicher, wenn der ras Compiler das ich nicht kapiert, was ich, was ich da machen möchte oder ich es nicht kapiere, dann meckert der Compiler und sagt das kapier ich nicht das das kann ich nicht verwalten geh weg und deswegen passieren bestimmte Fehler die bei anderen Programmiersprachen zur zur Laufzeit passieren, also wenn das ausgeführt wird die passieren in Ras nicht.
Das C plus Plus und C angeht, da gibt es auch eine Speicherverwaltung, aber die mach ich komplett selbst und das hab ich gestern hab ich noch n linkedin Post abgesetzt, wo ich auch noch gesagt habe, sogar das Weiße Haus und die CISA hat mal da davor gewarnt, dass so und so viele Probleme durch Speichermanagement, manuelles Speichermanagement kommen und da kommt eben dieser Hype daher. Es ist auch n Hype, das will ich auch nicht, will ich nicht in Abrede stellen.
Aber trotzdem gibt es auch den Vorteil, dass der Rust Compiler da bestimmte Dinge abnimmt und man nicht alles selbst im Kopf behalten muss und sich selbst drum kümmern muss. Denn wenn ich in einen Speicher reinschreibe oder den Überschreibe, den ich vorher reserviert habe von Nick, ich hab gesagt, ich will jetzt, ich sag jetzt einfach mal 5 Einhalt egal und auf einmal schreibe ich aber 10.
Dann oder lese Szenen, dann passt das nicht mal zusammen und dann gibt es Probleme. Das ist diese große Geschichte mit Garbage Collection und dem Speichermanagement, so mal zusammen hydriert. Hab ich verstanden. Burkhard würd es mir Recht geben, ja. Ja, total. Und ich geb noch mal n anschauliches Beispiel vom klingt klingt jetzt immer noch so. Jetzt wird sich so zuhören.
Ja keine Ahnung, aber ich bin faul so ich hab Bock auf diesen Garbage Collector, der macht das Halt für mich ja ist auch richtig so ne und also du wir müssen jetzt gucken warum brauch ich das manchmal und ich geb mal was zum Anfassen ich hab mal. Ich durfte mal in meinem Leben kuda programmieren, das ist die, die die Programmiersprache für die Grafikkarten, für die Nvidias, die man ja heute sehr, sehr gut kennt, die ja unsere KI im Moment rechnet. Vorher haben Sie die Bitcoins geschürft, und davor hab ich mit den Dingern, mal mit Kuda 1, also die erste Version dieser Sprache, ewig her, hab ich mal 3 d Rekonstruktion gerechnet auf der Grafikkarte quasi auf und zwar auf meiner Grafikkarte, die da im Computer stand, die sie
hat nebenbei auch noch den Bildschirm da befeuert da und. So, und jetzt mal als greifbares Beispiel da, da willst du jetzt auf einmal. Musst du jetzt tatsächlich relativ viel Daten hochladen, nämlich die, die Rohdaten für die für die und das sind 2 d Projektionen quasi sind, also Matrizen oder Zahlenfelder 2 d ganz viele eine Millionen oder Irgendsowas und und und und die muss ich dann quasi auf der Grafikkarte, weil das schnell geht in so n 3 d Bild zusammenrechnen. Ich muss die halt quasi drehen und schieben und so weiter ausprobieren bis die schön 3 d sind. So und jetzt haben diese Grafikkarten nicht so viel Speicher.
Also heute ja damals. Ich weiß nicht 2 Gigabyte oder 4 was ich da hatte, keine Ahnung. Ja und so ne Matrize selber ist halt fett so und jetzt willst du die jetzt willst du genau und und jetzt deswegen nimmst du da so ne Programmiersprache wie Rust oder C plus plus, denn jetzt willst du das Memory Management nicht nur nicht Garbage Collection haben, sondern explizit weil du musst genau wissen ich wie ich allokiere was was Marcel gesagt hatte jetzt genau.
Diese Größe an Speicher auf der Grafikkarte und ich weiß OK minus diesen ganzen anderen Quatsch, dass die noch so machen muss. Passt das gerade so dahin? Ja, hätte ich die jetzt aber schon zweimal da die Matrixe macht bumm und die und die die die knallt dir die Grafikkarte um die Ohren weil der Speicher überlaufen ist.
Da kannst du gar nichts mehr rechnen. Ja und jetzt das anschauliche Beispiel ist, du willst sowas mehrere Male da rechnen auf der Karte jetzt musst du das Hochschieben von deinem Arbeitsspeicher RAM in den Grafikkartenspeicher dann rechnest du das. Und jetzt willst du, wenn die Rechnung, sobald die Rechnung fertig ist, willst du keine Zeit verlieren?
Willst du jetzt diesen Speicher deallokieren? Du willst jetzt sofort sagen der ist weg, ich kill den ja ich brauch den nicht mehr um um im übernächsten Moment zu sagen, hier hole ich mir jetzt die nächste das die nächste Matrix Matrix um die zu rechnen das würde nie funktionieren mit dem Garbage Kollektor weil du weißt nie wann der läuft, der ist nämlich auch implizit, der ist nicht explizit du kannst nicht als Programmierer steuern wann dein Garbage Kollektor läuft denn das ist dieses Mark and Sweep der der denkt irgendwann so, oh ja, die jetzt eigentlich ist die Matrix, die benutzt keiner mehr, woher weiß der das der ist keiner zeigt mir quasi auf diesen Speicher, das ist so die Idee, ja die steht da
alleine im Raum, also wird die ja geflaggt, da kann weg ja aber wann die wirklich weg ist weißt du nicht, ja und dann kannst du das Problem haben der der Garbage Collector ist langsamer als du die nächste Matrix hochlädst, dann ist die noch nicht deallokiert und der macht die nächste Matrix fertig auf der Grafikkarte und Boom ja hast du halt auf einmal nicht 4 Gigabyte allokiert sondern 8 Gigabyte und das war halt zu viel ja. Also überall da, wo wir auch hardwarenah sind, wo wir, wo wir Arbeitsspeicher nicht zur Verfügung haben oder wo wir einfach riesige Probleme rechnen, selbst wenn du riesigen Speicher hast, da wo du riesige Matrizen zusammenrechnest, willst du gerne explizit das Memory Management da haben und dich nicht darauf verlassen,
dass der Garbage Collector früh genug da war, bevor du den nächsten großen Blocker blockierst? Ja. Vielleicht macht das noch mal so n bisschen auch greifbar, warum man das dann noch braucht. Ja explizit Memory Management. Ja, und da komm ich noch mal Gerrit auf deine Frage von vorhin zurück mit.
Also ich könnt dir jetzt jemand zuhören und sagen, also wenn du jetzt bislang bis hier durchgehalten hat und gar nicht so mit am Hut hat, Hut ab, geil, du hast ja vorhin gefragt, warum sollte man das einsetzen und da würde ich gerne das kurz noch mal anbringen, was ich vorhin auch gesagt hatte, wenn du eine bestimmte. Man spricht ja von Codebase, also hast du eine bestimmte Sache für dich in in dem Programmcode umgesetzt und wenn du sagst, du möchtest flexibel sein in dem wo du das einsetzt, also ob du das auf einem Mobilgerät einsetzt, ob du das auf dem auf dem normalen Desktop Rechner, die wir gerade alle vor uns haben einsetzt oder ob du das vielleicht noch sogar auf einem Mikrocontroller einsetzt,
also irgendwas, was in dem Backofen läuft oder sowas. Da ist mein Punkt, an dem ich dahin komme. Es gibt sehr viele Einsatzgebiete von von Rust. Ach, so einen hab ich vergessen tatsächlich, das mit Web Assembly, also ich möchte das vielleicht im Browser laufen lassen und da kommt für meine Begriffe Rust besonders ins Spiel. Du hast eine sehr sehr neue Sprache mit mit einem wunderbaren Typsystem können wir auch gleich mal drauf eingehen, aber du hast eine sehr robuste und trotzdem flexible Möglichkeit diesen.
Diesen Programmcode in verschiedene Umgebungen einzubetten und zu verwenden, und das ist auch der Grund, warum ich so dafür plädiere, für Cross Plattformen, also es geht tatsächlich um mobile Apps auf My Phone auf auf dem Android oder und oder. Auch Anwendungen wie was weiß ich, Photoshop oder Microsoft Word, die tatsächlich auf dem Rechner laufen und da gehen wir hin, ich bin meinem Team und sagen wir bedienen unsere Kunden damit zu sagen, was ist tatsächlich der Kern eures Businesses.
Gießen, das in den Rust Code und wir sind für ich n Kunde hat zu mir mal gesagt Herr Koch, ich möchte, dass das in 30 Jahren noch läuft, da hab ich erst mal geschluckt und hab gesagt na gut also ich würd jetzt mal die Wette eingehen, dass das in 30 Jahren noch existiert und das ist der Punkt warum wir in unseren Projekten vermehrt auf auf Rust setzen um zu sagen da ist der Business OK geht auch so n bisschen in das Domain driven Design rein, da ist der der der der.
Business Wert hier ist die Core Domain also wirklich das wo was, was die Firma ausmacht, das Gießen wir da rein, wir sind vollkommen flexibel, das in andere Bereiche einzubetten, also jetzt unabhängig von diesem ganzen technischen Kram. Aber das ist wirklich Business wert, den man hat um zu sagen wir übersetzen das in diesen Rust Code und auf einmal sagt dann was weiß ich in der Firma wie Oracle Ach das mit Java ist doch immer so ne gute Idee wenn sie nicht machen aber so also man ist. Sehr, sehr, sehr flexibel und trotzdem sehr robust bei bei der Sache in Bezug auf auf seine, auf seine Business Logik. Das ist das was wir, was wir hauptsächlich machen. Ja, kompilierter Code Cross Plattform musst du dich noch mal naiv nachfragen und du kannst
den du meinst, den kann man in verschiedenen Stellen einsetzen, vom Mikrocontroller bis zur mobile App und so weiter. Genau. Den gleichen Code dann oder so also also ja, ja, führ das gern noch mal n Tick aus, wie du das genau meinst. Also oder hast du da n Beispiel oder so was du da machen kannst? Also es ist.
Ich habe beispielsweise einen einen Kunden, der kommt aus der Messtechnik und da gibt es verschiedene. Es gibt um um um Umwelttechnik geht es, um Messen, draußen im Wald, ist da, so kann das sowas gar nicht sagen, und da gibt es bestimmte mathematische Verfahren, und wir haben den Fall, dass wir diese Verfahren sowohl auf dem Telefon.
Als auch auf dem Desktop und ein im Rahmen von einem Messgerät, also wo man dann das das Telefon nicht mehr dazu braucht wiederverwenden wollen und du bist dann in mit mit Rust in der Lage das einmal zu kodieren das auch aus aus meiner Sicht sehr elegant zu kodieren durch das Typsystem, also wie man den Code gestaltet und dass man sagt es gibt bestimmte Repräsentationen von dem. Also wenn man jetzt sagen würde, ich hab einen einen Weg, den ich habe, ich hab ne gewisse Strecke, ich hab ne ich hab bestimmte Anzahl von von Bäumen, ich definiere einen einen Wald beispielsweise und da kannst du das in in Rust so kodieren und kannst durch diese verschiedenen compai Tage, von denen ich vorhin gesprochen habe dann
sagen, OK, das läuft jetzt auf dem iphone, das läuft jetzt auf Android, das läuft jetzt auf Windows, das läuft auf Linux, das läuft dann auch auf dem Mikrocontroller, standardmäßig ist das da so n. SEM 32 oder NESP 32 und das kannst du dann dementsprechend tatsächlich, wenn du bestimmte Dinge beachtest, wiederverwenden, ohne es noch mal neu schreiben zu müssen. Und das ist für mich Cross Plattformen in in in Gänze sozusagen, weil ich sage, ich hab. Kein Part of the Programming Language quasi schon, aber du brauchst kein extra Tool mehr von außen dran flanschen, es kommt mit mit dem Inhalt der Sprache. Richtig, und durch diese verschiedenen verschiedenen. Compile targets also man, man
könnte es dann sagen, das das wird dann übersetzt wie n Dolmetscher, Übersetzer das dann in die verschiedenen Geräte für für das für das iphone, für für Android, für den entsprechenden kleinen Chip, diese Mikrocontroller und das hab ich dann als Basis für alles und darüber hinaus kann ich das auch noch wunderbar testen, das ist ja auch immer so ne Geschichte ne ich hab ich hab wunderbare Anforderungen ne und auf einmal geht das Ding dann in Produktion ist auf dem Handy installiert auf einmal stürzt dieser Kram ab.
Und das ist durch dieses Speichermanagement auch noch mal. Wie soll ich mal sagen, Businessfreundlicher, weil ich bestimmte Dinge während der Entwicklung feststelle und der der der Compiler, also derjenige, der übersetzt der Dolmetscher sagt mir, OK, das versteh ich nicht, das, das müssen wir noch mal klären, aber wenn ich das dann übersetzt habe, hab ich sehr, sehr, sehr robuste Software in der Produktion, das ist diese Geschichte mit Cross Plattform. Ich bin sehr flexibel und ich bin trotzdem. Sehr robust innerhalb, wenn das mal läuft, das ist das ist aus meiner Sicht das das Hauptargument oder die beiden Hauptargumente für für den Einsatz von Rust. Wenn ich dafür Gerrit noch mal
zu sagen, was du gesagt hast, wir wir codieren quasi einmal in der Sprache des Rust, das könnt man sagen wie Englisch einmal runter den gleichen Code, den gleichen Algorithmus und wird und dann macht Rust quasi aus einmal Code 10 oder 20 verschiedene kleine Progrämmchen, die für die 10 oder 20 verschiedenen. Bereiche, nämlich Telefon, Desktop, Sensor im Wald und so weiter geeignet.
Bei der Tage. Also so so. Also es ist. Genau, genau. Es kommt bei der Tage genau und auch es entstehen. Quasi ganz viele Programme daraus, die auch ganz unterschiedlich sind, vom Maschinencode her jeweils auf die entsprechende Plattformarchitektur blablabla angepasst. Aber es ist wird, es entsteht quasi aus einem Code heraus und es ist und dieses dieses Bauen in ist quasi Teil der Rust Sprache, wenn ich das richtig verstehe. Richtig, ich habe auch noch ein anderes Beispiel. Ein anderer Kunde von mir.
Die heißen Zeitkapsel, die machen Fotospeicherung in der Cloud. Also wenn man hier sagt, Ich möchte Google oder Apple nicht vertrauen, da kann man, kann man da hingehen und da ist wirklich die Idee, dass dieser Kern, also der der, der der sogenannte Core von dem, was wir gerade besprochen haben, also wirklich das, was das Business ausmacht, dass wir das auch in in Rust definiert haben, und ob das jetzt auf dem, wie gesagt, auf dem iphone läuft oder auf Android oder, und das ist auch nur das große Ding.
Weil wir keine Runtime haben im Bezug auf die Garbish Collection und dass der Code ausgeführt werden muss et cetera, sind wir auch in der Lage, sehr gut. Web Assembly, Das ist eine, das ist im Prinzip Byte Code, also eine Repräsentation von Rust. Also wieso n kleines Progrämmchen von dem Booker gerade gesprochen hat, dass ich für den Browser vorbereite und Browser ist es total wichtig, dass die Dinger natürlich nicht besonders groß sind. Sondern dass ich nicht auf einmal 4 Megabyte runterlade, nur weil ich jetzt diese Applikation starten möchte, kann ich natürlich machen, aber durch diese Möglichkeit, dass dass ich diese ganze Runtime nicht brauche, kann ich auch sehr kleine Web Assembly Module
erzeugen und dadurch eignet sich Rust wieder für dieses Cross Plattform. Also ich geh dann hin ganz konkret bei bei Zeitkapsel und sage. Wir definieren bestimmte Dinge von unserer Abfolge, von der Verschlüsselung. Da geht es dann auch um um das das Verschlüsseln der ganzen Fotomediathek et cetera, und das definiere ich einmal und binde das in die verschiedenen Plattformen dann ein, inklusive dem Browser und dann habe ich im im Browser die gleiche Logik, die ich auch auf dem Telefon habe und binde die Binde, die dann nur an die man spricht dann von von einem Core und von einer Shell.
Dass dass der Chor das exakt das gleiche macht und die Shell sagt dann, ach ja, ich Speicher jetzt meine bestimmten Dinge nicht auf der Festplatte, sondern im sogenannten Local Storage im Browser, aber der, der der Punkt ist einfach, ich definiere das einmal, das ist da, das kann ich immer nur noch mal unterstreichen, ich definiere das einmal, verwende das über diese Struktur, auf diesen ganzen Sachen wieder und auch wenn sich meine Technologie ändert, also wir benutzen ja viel flatter. Und angenommen, Flatter wäre jetzt nicht mehr da oder Google würde sagen, das machen wir jetzt nicht mehr, das ist so ne Technologie um die Oberfläche zu machen auf den verschiedenen Geräten, dann gehen wir einfach
woanders hin und sagen OK, dann machen wir es, machen wir es auf einer anderen Ebene, weil wir diesen robusten Kern haben, den ich immer wieder verwerten kann. Ich kann das immer, ich hab das Gefühl, ich hab es jetzt zum zum sechsten Mal gesagt, aber ich find das sehr so genial, dass dass ich das machen kann.
Ja. Marcel, Ich will ich find ich find es cool, dass also du motivierst Motivierst mit deiner mit deiner Begeisterung natürlich für Rust. Ich glaube ich werd auch im Nachhinein noch mir das so mal angucken müssen. Ich würd dich gerne mal fast wieso n bisschen quizduell oder irgend sowas n paar Sachen abfragen die die die mir so wichtig sind irgendwie wenn ich ne Programmiersprache kennenlerne ja vielleicht können wir das irgendwie. So nämlich, so die Inhalte, so weißt du, wie schreibe ich das hin?
So, ja, das haben wir noch gar nicht besprochen. Ich möchte, bevor wir dann machen wir sofort bevor ich hab nur eine Sache verwechselt. Vorhin hab ich von 2021 ist die 1.0 rausgekommen, ich hab das verwechselt, da ist die Rust Foundation gegründet worden, das ist ne Sache die ich noch erwähnen möchte, also weil die Rust wird aber auch wenn man das das immer wieder hört ist bei Mozilla gegründet worden und so weiter und so weiter mittlerweile gibt es eine ganze Riege an Firmen. Die, die Rust unterstützen innerhalb von dieser Rust Foundation.
Und da ist Mozilla nur climb dabei. Also da sind Größen wie ABS auch Google, Microsoft macht ganz viel mit Azure, also dass diese Cloud von von von Microsoft auch Basis von Rust und das ist auch der Punkt warum ich zu meinem Kunden damals sagen konnte, also es geht so n bisschen ins Quizduell rein, schon wo ich zu meinem Kunden sagen könnte, also ich kann es nicht, kann es natürlich garantieren, aber ich gehe fest davon aus, durch diese Breite der Unterstützung der Firmen. Halte ich es für sehr, sehr, sehr unwahrscheinlich, dass das auf einmal weggeht, wie wenn Google mal sagt, wir haben keinen Bock mehr, eine bestimmte, ein bestimmtes Produkt oder eine bestimmte Sprache zu unterstützen. Das ist auch noch mal ein ein
Punkt, der der in die Richtung geht, also die 1.0 kam 2015 raus, die Rust Foundation ist 2021 gegründet worden, mein Fehler so und jetzt. Ab ins Quizduell. Ab ins Quizduell. Ja, ich hab einfach noch mal. Ich will einfach noch mal so die Dinger raushauen, so ne von den Sprachen die ich so kenne also. Klassen und Objektorientierung hab wie sieht das aus? In Rust hab ich auch glaskeyword und kann ich Instanzen erzeugen, ist das ganz normal.
Wie ist in Heritans geregelt und so weiter jetzt mal so von den Keywords in der Sprache. Es gibt weder Klassen noch eine typische Vererbung. Es gibt es gibt Structs, also Datenstrukturen, die du alleine verwenden kannst und an die du Methoden oder Funktionen binden kannst. Ich unterscheide Methoden und Funktionen.
Associated Functions heißt das dann in in Rust. In anderen Sprachen heißt es dann klassenfunktionen, das heißt, Methoden greifen auf bestimmte Inhalte innerhalb des Structs zu und Associated Functions hängen an dem Struct und die kannst du sozusagen statisch verwenden, unabhängig von von der dem Zustand der des Structs.
Vererbung gibt es bei Structs nicht, du fängst dann an so ne Composition, also man macht dann eher composition als in Harritons es. Gibt etwas, das nennt sich Trades. Das ist vergleichbar mit ich komm dann wieder auf Java zurück, weil ich, weil ich halt n Java background habe, was vergleiche mit Interfaces in in Java, also du, du beschreibst ein bestimmtes Verhalten von von einem Struck beziehungsweise von diesen entsprechenden Funktionen, das ist so ähnlich wie das, was du vorhin mit den Headern gesagt hast. Also ein Trade beschreibt das das entsprechende Verhalten implementiert, das aber standardmäßig nicht. Dort kannst du eine eine Vererbung herstellen, also ein Trade kann sagen, ich bin das
und ein Trade sagt, ich mach das von dem und dem und dem und dem und dann hast du sozusagen so ne so n ganzen Korb von Funktionen. Standardmäßig gibt es bei gibt es aber keine Vererbung bei Klassen, weil es auch gar keine Klassen gibt und das wird dann durch die Composition gelöst. OK, God it, aber ich ich bin jetzt mal Devil's Advocate und sag mal OK destructs gibt es ja auch im C plus plus. Ja, also es gibt ja beide Keywords Struct und class. Und im Prinzip ist Destruct und die Class das gleiche minus destruct by default public ist und ne class by default private ist was ihre Members angeht, aber was ich jetzt so rausgehört hab von deinem Rust Erläuterung mit, dass es Methoden gibt die quasi ihren eigenen State
isolieren wenn ich eine struct instanziere was ich wahrscheinlich kann und dass ich jetzt Aktionen habe die Struct weit laufen, das sind ne quasi analog die statischen hab ich im Prinzip Objektorientierung gelöst. Ich nenn es nicht class. Aber ich, ich habe quasi meinen Struck, das so so sich so eigentlich verhält wie ne Glas und ich habe sowas wie statische und wenn man Funktion für mich ist das also ich sag immer es gibt ja 1000 und und eine Ausprägung in den Programmiersprachen aber am Ende geht es nur darum kann ich irgendwas hinschreiben was ich wiederverwerten kann und da einen isolierten State drauf hab was ich irgendwie so nenne wie Instanzfunktionen oder Methoden oder da geht es halt schon los mit den ganzen Namen so und und
hab ich gleichzeitig auch auf diesem Ding die Möglichkeit Funktionen aufzurufen die quasi quer. Spät, irgendwie funktionieren für alle gleich, sind also quasi den den State Destructs selber, also der Klasse selber quasi benutzen. Das ist dann so ne Art statische Funktion, scheint so zu sein in Rust.
Also würd ich Haken dran machen, dann kann ich könnte ich mit arbeiten gut nächste Frage funktionales Programmieren es gibt javascript zum Beispiel viel schöner oder einfacher man muss aufpassen, C plus Plus entwickelt sich krass weiter, aber jedenfalls in den älteren C plus plus Ausprägungen war es nicht ganz so einfach, gibt es ja sehr mächtige Funktion funktionale. Ja, Möglichkeiten zum Beispiel an einem RE ne ich hab RE map, ich hab reduce, ich hab filter, ich hab was weiß ich und so weiter und kann quasi und die Retournieren quasi die Funktion hier gerade wieder das Ergebnis, so dass ich quasi so ne Chain von von Prozess Prozessor prozessorierungen machen kann. Von meinen Daten gibt das auch n
Rust. Weißt du was ich meine? Ich glaube, ich weiß was du meinst. Also was ich gerade eben auch noch mal sagen wollte ist, dass dass du Rust, wenn du möchtest auch komplett funktional schreiben kannst. Es gibt auch Closures, die du definieren kannst, also auch anonyme. Solche anonyme Funktionen. Und dann bin ich auch gleich zugekommen. Genau, also die gibt es auch standardmäßig in Bezug auf das auf das Chaining was du, was du auch sagst, gibt es auch die Möglichkeiten das das hängt dann davon ab welche welche Trades beziehungsweise welche konkreten Sachen du machen möchtest. Du kannst das auch, kannst das auch Chainen da geht es ja auch noch hier Map, Reduce, flatmap und Gedöns. Die die Möglichkeiten gibt es
nicht, alles ist in der Standardbibliothek enthalten, aber du kannst auch Rust auch mit mit unter der Unterstützung von von dem ein oder anderen Trade auch komplett funktional schreiben. Du musst überhaupt keine Objektorientierung anstreben, indem du dann Methoden bindest, sondern du sagst ich arbeite hier nur mit sich durch die Gegendreiche, das geht ja. OK, cool.
Dann, genau Datentypen ist immer hinlänglich langes Thema. Vielleicht aber also ich geh davon aus, dass Rust auch nen guten Array Typen hat, den ich einfach verwende, der standardisiert ist und und hoffentlich auch nen Dictionary Datentypen also so n Key Value mapper, da gibt es so NC Plus plus leider ja, beim Standard Array ist es eigentlich relativ klar, bei der bei der Standard Map gibt es dann die Hash Map und so weiter nachdem ob dann betwee hinter ist oder ne Hash Implementierung und so weiter ich was hat sich Rust überlegt?
Das ist da ein Typ den man empfiehlt oder gibt es da auch schon wieder mehrere oder ganz ganz schnell? Ganz, ganz, ganz schnell. Es gibt Arrays, Arrays sind sind fix, sie können nicht verändert werden, wenn du eine Veränderbare Liste haben möchtest, nimmst du einen Vektor und bei einem Quebellu nimmst du eine Hash Map.
Von der es auch mehrere Implementierungen gibt. Aber es gibt es gibt ne Standard hashmap und es gibt aber auch sowas was was ich hash Brown nennt, was wir dann sagen, wir implementieren das schneller und so weiter aber letzten Endes ist es weg, Array gibt es Vektoren gibt es für veränderbare Listen, das heißt falls du nicht weißt wieviel sollen dann jetzt meine wie wie lang ist jetzt meine Liste?
Hey, so n bisschen wie n Python, wo ich verschiedene Datentypen hab hier nach Mutability. Also wenn ich wenn ich n mutible Objekt hab, dann ist es normalerweise n anderer Datentyp als wenn ich n mutible Objekt hab. Ne. In in die Richtung. Ja, ja, o. K gut. Ist nur wichtig zu verstehen. Es gibt Array und Vektoren und meistens nimmt man Vektoren, weil man am, weil man dann doch nicht weiß wie lang das Ding werden soll.
Ja, für die Zuhörenden kurz in C plus Plus ist es dann auch oft so. Da hast du dann immer den gleichen Datentyp und wenn du das irgendwie im Utable machen willst, also wenn du quasi erzwingen willst, dass von außen das keiner verändern darf und von außen ist meistens man selber als Entwickler, wenn man es irgendwie noch mal benutzt, da gibt es diese const flex, also man also mit C plus plus ist voll mit const. Hier ist congstar ist constant.
Alles Mögliche kann constant ja der Pointer, die Referenz, das Objekt selber, die Funktion und was weiß ich nicht alles das das muss man üben. Ja es gibt locker 6 stellen wo man Constant schreiben kann, das meint die das meint 6 verschiedene Dinger und ich hab ich hab verstanden das das haben Sie in Python glaub ich n bisschen abgeräumt indem man einfach sagt Pass mal auf dieser ganze Datentyp dieses Array das ist halt quasi in sich im youtube Feierabend, da brauchst du nicht mehr so viel Constant schreiben.
OK, was mich am meisten interessiert ist eigentlich, und das ist natürlich auch noch mal n ganz hartes Thema für ne für ne fortgeschrittene Minute in der wir sind, aber das muss ich jetzt trotzdem noch mal horchen, asynchronität, weil das ist ja, wenn also wir sprechen über Map Assembly, wir sprechen über High Performance und so weiter und sofort und ich, ich brech mal gerade mein ganze Programmiersprachen kreuz runter, ich sehe immer grob 2 Sachen, coole Programmiersprachen können sowohl sauberes Threading machen und haben dafür ihre Toolkits. Also arbeiten mit echten Threads, mit echten parallelen Parallelläufigkeiten und dann brauche ich die ganze Toolbox von Multi CS und so weiter um
das um um auszuschalten, dass ich da entsprechende Kollidierungen habe und und und. Noch viel wichtiger Threading ist das eine und saubere Promise basierte Asynculate Bibliothek, wo ich quasi ohne dass ich wahnsinnig werde in irgendwelchen Callback Chains, sondern wo ich sauber hinschreiben kann. Eine eine das in dir gibt es jetzt in den in den unterliegenden Sprachen gibt es da verschiedene Wörter für Promise, Futures und so weiter und sofort, aber ich will das einfach quasi sequentiell runterschreiben ich will als Entwickler sehen Awayed irgendwas ja und wir wissen alle er springt irgendwo anders in dem Programm macht das hat n Event loop quasi drin ja hier auch noch mal ne Frage was macht da Rust?
Haben wir hoffentlich in Rust einen eigenen sicher eingebauten Event loop oder muss ich mir den auch von außen dran kaufen und aktivieren oder wie funktioniert das? Was in die Sprache eingebacken ist, ist das Asic and the Wait, was nicht in die, was nicht in die Sprache eingebacken ist, ist die Runtime oder der der sogenannte Execute, wobei der Execute n Teil der Runtime ist. Es gibt de facto Standards, aber es gibt keine Standard Runtime für Asic and the Wait, die musst du dir von außen rein kaufen, die meisten nehmen dafür, das hab ich vorhin kurz erwähnt, Tokio.
Es gibt auch andere Möglichkeiten, je nachdem was man was man erreichen möchte. Dazu gibt es auch n Masse Artikel. Wir haben auch schon n linkedin Post zu zu gemacht, es ist wunderbar möglich das zu tun, man muss sich gut überlegen welche Runtime man nimmt, weil man sich dann auch etwas an sie bindet, weil sie bestimmte Sachen wie beispielsweise asynchrone Datei einlesen und so weiter da mal selbst implementiert, das ist das find ich spannend, dass das nicht geregelt wird in einer modernen Sprache. Das hätte ich also jetzt persönliche Meinung, ohne irgendwie wie zu wissen oder sowas, aber ich find ja. Das ist so grundsätzlich, dass und auch in Python ist es auch so, dass es lange nicht fix war.
Und es ist, natürlich gibt es bei mir ne Community Bibliothek, die man dafür nimmt und so, ich find das ist ein großer Vorteil von javascript da ich mach kurz nochmal javascript was in die Waage und voll ich javascript und Note GS also ne die haben ja die haben das festgelegt da ist das ist der der Event Loop ist Teil der der Idee von Note GS und so weiter und fix ja und für alle gleich und ist ja auch was total essentielles ja das Ganze.
Ja, diese ganze Nebenläufigkeit und und und. Die Eventschachtelung und so weiter ist ja quasi. Also es gibt Leute, die sagen, ich würde es ist überhaupt kein Ding, ne gehst du hin, nimmst Tokio, funktioniert alles. Die Community ist riesig, gibt so keine eigene Tokio Konferenz so also so so beliebt ist das, aber ich würde eben lügen wenn ich sagen würde das ist mitkommt mit der Sprache und man muss sich dann halt überlegen, dass dass man, dass das nicht Teil der kompletten Rust Foundation und der Sprache ist.
Das ist einfach nicht so, ich seh da jetzt nicht das Problem, aber ja ja. Vielleicht erliegt Tokio dann dem Schicksal der Boost Libraries, und die werden dann quasi peu a peu in den Standard mit übernommen. In den neueren Versionen von Rust wird man sehen, ne. Ich fand das nicht schlimm, ich find das auch.
Ich fand jetzt momentan ist ja jetzt momentan auch nicht so, du find es wahrscheinlich. Sogar gut. Ich find es gut. Ja ich bin mal. Ich bin meiner Meinung, also du musst ja auch als Entwickler sehen, ja wir haben, wir haben sowieso 1000 und eine Möglichkeit der Programmiersprachenauswahl und so weiter und sofort ja also wenn ich finde wenn.
Wenn mir irgendjemand sagt, ich garantier dir das und das ist cool, und das gehört zur Programmiersprache und somit ist es halt gut ausgewählt. Ja, und auch die Implementierung ist auch gut ausgewählt, wenn ich da weniger Freiheitsgrade hab für Sachen die ich finde. Zum Standard gehören zum Programmiersprachen Standard, dann bin ich nur happy, ja.
Also ich gehe auch davon aus, dass das nur noch ne Frage der Zeit ist, bis das bis das dann integriert wird. Aber das ist wirklich. Nur eine Vermutung von mir und das kann ich überhaupt nicht belegen, aber ich, ich geh davon aus, dass das ne, dass das passieren wird. Aber und. Jetzt kommt noch mein letzter und dann bin ich auch wirklich fertig, weil es ist spannend.
Es wird ne lange frage, was macht nichts vielleicht ich glaube alle die noch mit Rust nicht so viel zu tun hatten, die finden es vielleicht auch ganz spannend legen wir los, du hast mir angeteasert im im in der Vorschau schon als wir uns zusammengesprochen haben, da hast du gesagt es gibt keine Exceptions ja mal gucken ob ich das verstanden hab.
Aber das wär jetzt mal nächste Frage. Also Ausnahmebehandlung in Programmiersprachen ist ja auch ein Programmiersprachen Cross Konzept, was entweder haben die das oder nicht. Ja also ich sag es noch mal für die Zuhörer n ganzer ganzer Klassiker ist ja ich will irgendwie n Pfeil lesen und hab den Code hingeschrieben ja und den Read irgendwas und was meistens dynamisch ist, nämlich der der Pfeilname selber der Pass dahin.
So und sind aus irgendeinem Grund, und das ist, den gibt es schnell, gibt es dieses File nicht mehr an der Stelle, so wie es angegeben wurde und jetzt versucht quasi der Code an der Stelle n file zu lesen, was nicht existiert. Ja und das ist n klassischer Fall bei vielen Programmiersprachen, dann würde quasi die Read Funktion die aus dem Aus der Programmiersprache selber oft kommt.
Ja das ist ne standardbibliothek also file file IO ist also gehört genauso wie Entschuldigung Promis und so weiter gehört zu mich zur zur Stelle. Kürze mich zur Standardausrüstung einer Programmiersprache. So, und wenn das das nicht kann, ja dann, dann gibt es normalerweise ne Exception, was heißt normalerweise ja aber und ne Exception ist und das muss man vielleicht noch mal kurz hier auf die Tonspur bringen, dass man das versteht was los ist.
Normalerweise kann ne Funktion, wenn sie keine Exception hat, nichts anderes als von oben nach unten durchlaufen und ich trete aus der Funktion ich trete ein in die Funktion, indem ich sie aufrufe und geb die Argumente rein und ich trete aus aus der Funktion mit dem schönen Wort Return, das ist auch fast in allen Programmiersprachen gleich.
Das heißt fast immer return ne, weil ich komme zurück aus diesem Prozess. Ja und und wenn ich jetzt keine, wenn ich jetzt keine exceptions hab, dann komm ich da so raus und wenn dann muss ich in dem Return, das ist nämlich Punkt, dann muss ich entweder indem ich n Argument überschreibe oben was ich ziemlich aggly finde oder in dem Return Statement sagen hier ist irgendein Fehler vorgekommen in während ich das machen wollte eigentlich ja. Und deswegen gibt es exceptions, weil was das führt dazu. Eigentlich will ich im Return Statement sagen das Return was das Ding ausrechnen soll, nämlich zum Beispiel irgendwie ne Statistik die ich in dem Fall calculated hab ja jetzt muss ich auf einmal sagen es hat auch
nicht geklappt ja dann hab ich irgendwie 2 Datentypen weil die Statistik ist irgendwie ach was weiß ich, das war vielleicht irgendein Average also es ist irgendwie n Floating Point gewesen oder irgend sowas und jetzt will ich auf einmal sagen es hat nicht geklappt ja es ist dann 0 oder irgendwas oder so das ist halt da da komm ich halt so n Twist ja und deswegen hat man sich überlegt es gibt Exceptions.
Mhm und wenn ich ne Exception hab, dann brech ich an der Stelle wo ich irgendwie nicht mehr weiter kann, weil das File nämlich nicht ist. Ab den Flow und es ist der zweite Austrittspunkt aus einer Funktion, nämlich nicht der Return wert, sondern ich hör da auf und geb quasi dem Programm mit. Alter ich hab hier n Fehler gehabt, der heißt so und so und hier kann ich noch n Code und so weiter und dann rollt sich das alles ab ja so und du sagst dieses schöne Feature der Exceptions gibt es nicht oder was? Obwohl es so ne moderne Programmiersprache ist. Ja genau, es gibt auch keinen 0.
Wert. Also da, das ist ja genau der Punkt, der den bei dem mein Herz tatsächlich dann auch wieder ein bisschen hüpft. Denn viele Probleme, das hatte ich ja vorhin auch noch mal zu dir gesagt, passieren ja dann, während das während das Programm ausgeführt wird, und da ist es so, dass wir aus verschiedenen Sprachkonstrukten etwas bauen können, was letzten Endes auch für eine Fehlerbehandlung sorgt, aber dafür sorgt, dass wir kein kein unvorgesehenes Verhalten haben, denn. In in Rust gibt es sind die E Nams, also eine E. Nam ist im Prinzip eine eine Menge von von Variationen. Also ich könnte sagen ich hab einen, ich hab ein Tier und das hat die Ausprägung Katze und Hund und diesen Ausprägung Katz und Hund kann ich noch was
mitgeben n sogenannter Payload wie man gerne sagt also ich hänge noch zusätzliche Daten dort dran und bei bei Rust ist es so, dass ich standardmäßig oder in in vielen Fällen. Ein Enam habe, was sich result nennt und in diesem Result steckt entweder das wirkliche konkrete Ergebnis drin oder der Fehler, der bei der Ausführung der entsprechenden Funktion passiert ist. Und dann kann ich über das sogenannte Pattern Matching, das heißt ich habe einen bestimmten, eine bestimmte Variable und da können verschiedene Dinge drin sein. Also ich hab diese Varianten von. Von Tier oder ich hab den dieses ihr diese inumeration Enem von Tier und da hab ich Katze und Hund und da kommt jetzt eine Funktion die sagt Ich geb dir
jetzt n Tier zurück und dann sag ich mit dem Pattern Matching ja Moment in dem Fall von Katze mach ich das in dem Fall von Hund mach ich das und so kann ich dann auch mit Fehler oder mit dem mit dem jeweiligen Wert also mit dem jeweiligen Success der zurückkommt auch arbeiten und so gehe ich hin und muss.
Das ist wieder dieses dieses Punkt und ich hoffe jetzt verzeiht mir, dass mein Herz so hüpft, muss zur Kompeilzeit, also zur Übersetzungszeit dann sagen können, wie soll dieses Verhalten sein, dass ich auf keinen Fall in diese Situation einkomme, indem ich sage, oh, ich weiß nicht, es kam jetzt doch der Hamster zurück, was geht, was geht ab und wenn er wenn wenn ich den Hamster behandeln möchte, dann muss ich den definieren, wenn ich den Vordefiniert habe, muss ich ihn behandeln et cetera, das heißt, es gibt kein unvorhergesehenes Verhalten. So werden die Exceptions sozusagen ja ergänzt ersetzt. Ja, sag mal ich.
Ich bin provokativ und sage, OK, wir programmieren Rust halt immer so, dass wir einen komplexen Return Typ haben, ne, wir verzichten also wir haben keine Exceptions, dafür verzichten wir darauf einfache Returnwerte zu haben, sondern haben eigentlich immer nen Konstrukt was mindestens n Pair ist oder oder wie auch immer n oder irgend so was oder n Dictionary oder irgend so wie ja wo immer dran steht.
Hier kommt was raus und übrigens war das Scheiße, oder? Das war nicht Scheiße so. Ja, also richtig, ja muss quasi immer wenn ich und das wird wahrscheinlich bei den dann bei den Standardbibliothekfunktionen auch so sein, dass die dann auch schon quasi dieses Standard result nehmen, irgendwie OK, alles klar, also dann für unsere Zuhörer alles klar, dann haben wir quasi es so gelöst, dass wir tatsächlich dieses im Return wert, den wird der wird so Aufgepustet in Rust typischerweise einfach wahrscheinlich bei Policy muss es wahrscheinlich nicht tun, aber es ist der gute, der gute Weg, der gute Ton, der gute Ton, genau.
Hab ich einen Return wert, der quasi beides ausdrücken kann? Entweder den tatsächlichen Wert oder halt ein Fehler und ich kann das halt gut erkennen in der Sprache und dann brauch ich brauch ich vielleicht nicht das Exception Handling genau und das aber spielt natürlich in eine spielt die gleiche Geige sag ich mal weil das weiß man auch Exception Handling und das Abkürzen von Funktionen und das wieder aufräumen von Memory und so weiter das ist genauso. Nebenläufig speicherintensiv sag ich mal. Nicht ganz so performant, wie wenn ich das halt einfach abschalte.
Und wenn ich auch Garbage Collection abschalte, dann kann ich halt, ich sag mal ganz Hardware nah, wenn ich auf dem SP laufe oder irgend so was, da kann ich da richtig viel rausholen an Performanz ja man es ist auch so, dass man mit C plus plus kann man ja, man kann ja mit C plus plus auch Hardware nah programmieren, klar wissen wir Embedded, klar, da wird tatsächlich auch Exception Handling typischerweise abgeschaltet per Default, ja da muss ich auch anders irgendwie klarkommen so. Aus genau den Gründen.
Und nur um ne kleine Anekdote aus der Realität nochmal zu bringen. Es gab das ist durch die durch das Internet gegeistert, ich glaube vor 4 Monaten oder so wo dann irgendwie Cloud Flair Problem hatte und dann ist ganz ist so n Ruscode auch angezeigt worden oder geleakt worden oder was weiß ich und da gab es dieses wunderschöne Wort unrap und die Idee von Unrap ist ich hab meine ich hab dieses Result und da steckt etwas drin der der der Wert den ich wirklich haben möchte und wenn es mir. Puste ist und ich sage, ist mir vollkommen wurscht. Ich will jetzt, ich gehe fest davon aus, dass dieser Wert da drin steckt, dann ruf ich unrap aus und dann wird das einfach ausgepackt, ohne dass ich was
anderes behandeln muss und wenn ich das aber mache und da ist nichts drin, dann fängt das Ding auf einmal an zu crashen, so, und das ist der Punkt, also du kannst das machen, wenn du möchtest. Und deswegen ist Unrap eine Möglichkeit, um schnell zu ergeb, zu Ergebnissen zu kommen, wenn man das in Produktion reinbringen möchte, dann gibt es viele Leute, die statische Codeanalyse machen, also wo dann einer durchgeht und noch mal sagt, steckt hier irgendwo unrap drin und dann sagt Ah Unrap steckt hier drin, das darf nicht und das muss weg, so kann man das dementsprechend für die Produktion dann machen so das ist der der Punkt den man an an der Stelle bei Code ja auch gemacht hat und hat gesagt da
mach ich n unrap da war aber kein Wert drin bumm ist das Ding gecrasht. Arbeit. Auf jeden Fall mal ne Folge für wahrscheinlich Softwareentwickler oder mindestens für Leute, die sich für Rust interessieren. Aber macht nichts wir, wir haben ja verschiedene Folgen für verschiedene Geschmäcker, das so alles das ist genau richtig so. Ja ich fand es richtig spannend für. Wen soll es sonst sein, wenn ich für Leute, die sich für Rust interessieren.
Also und das das ist ja der Punkt, den den ich auch noch mal rausstellen möchte, auch für die für die Businessleute und auch für die Kunden, die ich, die ich habe, das ist so das, was ich vorhin schon gesagt habe, wenn man hingeht und sagt, ich möchte was Verlässliches machen. Ich möchte mein mein Business so sichern, dass ich sage, ich möchte in in Produktion wenig Probleme haben. Dann investiert in in die Idee das auf Basis von Ress zu machen kann ich nur empfehlen.
Könnt ihr auch meine Kunden mal fragen. Die die 2 Hauptthemen hab ich hier so rausgezogen ohne die ganzen technischen Details zu verstehen und mehr merken zu müssen. Ist nicht glaub ich nicht so wichtig, aber ich hab verstanden es ist einerseits für die Programmierer eigentlich super, weil das Ökosystem irgendwie stark ist und man eigentlich letzten Endes effizient ist.
Ja, Cross Plattformen haben wir drüber gesprochen. Programmiere einmal Compiler für alles und ist dann aber auch entsprechend für die Nutzer ganz praktisch, vielleicht auch kostengünstiger, sogar langlebig. Du hast auch von Robustheit gesprochen, das könnte man auch fast als Langlebigkeit irgendwie so n bisschen betiteln, ne hätt ich jetzt so mitgenommen und was ich auch noch verstanden hab ist, dass es irgendwie n ziemlich starken Compiler gibt und Probleme die entstehen nicht zur Runtime entstehen, sondern einfach schon im Entwicklungsprozess letzten Endes ne das exakt perfekt. Genau so hab ich es gemeint.
Was? Haben wir denn noch vergessen aus deiner Sicht? Also was sollten wir noch auf die Turnschuhe bringen heute zu Rust gibt es. Da was also wir, wir bleiben ja ehrlich in in der in der ganzen Kommunikation. Ja, das kommt natürlich auch alles mit einem, mit einer Gewissen, mit einem gewissen Aufwand, denn, und das das ist auch ne Sache, die man immer wieder liest und da ist auch was dran, die Lernkurve ist am Anfang schwierig. Und beziehungsweise nicht schwierig. Die Lernkurve ist erstmal steil, ich hab ja gesagt ich geb regelmäßig Rust Trainings und da ist es so es es geht über 3 Tage und das ist so erster Tag zweiter Tag Oh dritter Tag ah so und diese diese 3 Tage man braucht diese wo ich wo ich dann ich hab hol dir dann mal
Feedback ein nach den entsprechenden Tagen nachdem sie durch sind. Und es ist wirklich regelmäßig so, dass man am zweiten Takt sagt, also ich, ich, ich weiß nicht genau, wo soll denn das hinführen, irgendwie, wie wie, was ist denn jetzt hier und wie funktioniert denn das jetzt gerade, was ist jetzt mit diesem ownership, was das ist dieses Move und was weiß ich, und wenn es dann durch ist, dieser Anfang ist es, das ist wie also ich, ich vergleiche jetzt das gerne mit mit Gitarre spielen und und Schlagzeug spielen, ich find Schlagzeug spielen ist am Anfang relativ einfach, weil man macht es dann so n Takt Gitarre spielen das am Anfang relativ schwer mit diesen Saitendrücken was.
Alles und ich vergleich das dann gerne mit Rust ist dann wie wie Gitarre lernen, mehr wie Gitarre lernen als jetzt bei beispielsweise Schlagzeug musste erst mal durch, dass das irgendwie Sinn ergibt und wenn man es dann aber gemacht hat und dann so ne so ne gewisse Fingerfertigkeit hat, dann wird das einfacher und dann ergibt das auch alles Sinn und dann sagt man. Ach, ist ja irre.
Das finde ich total cool, dass das so ist. Und das möchte ich zumindest noch erwähnen. Guckt euch das an, probiert das erst mal aus und. Und gebt dem n bisschen ne Chance. Nicht nur Hello World und et cetera, sondern probiert das wirklich aus. Es hat alles seinen Sinn. Ich glaube, den anderen wirst du angesteckt haben.
Auf jeden Fall durch die Folge heute definitiv. Ich hoffe das sag noch mal ganz kurz für Deine Trainings, für wen ist das interessant? Also du hast vorhin schon mal gesagt, Personen die schon C plus plus können oder programmieren oder so die dann sag ich mal umschwenken oder ihr Repertoire erweitern oder ist das für blutige Neulinge, also ganz kurz so die Flughöhe wie wann sollte man da bei dir ins Training kommen? Ich passe die Trainings grundsätzlich an, die meisten Trainings gehe ich tatsächlich für C plus Plus und C Umsteiger, aber ich habe das auch.
Ich habe mit 2 Kollegen in der Vergangenheit auch ein ein Buch geschrieben im D Punkt Verlag für Anwendungsentwicklung, das richtet sich auch an Java Entwickler, also wenn man Interesse daran hat und sagt Ich möchte jetzt nicht mehr timescrip schreiben oder Python und ich möchte jetzt, dass es abgeht kann kann man sich immer an mich wenden, weil es.
Verschiedene Trainingspakete gibt, wenn man das das machen möchte. Das ist überhaupt nicht das das Problem, cool, weil ich die Leute dort abhole, wo sie stehen. Super cool, Marcel. Dann würd ich sagen, haben wir was zu Rust gelernt. Vielen herzlichen Dank, dass du für euch zu Gast warst. Und ja, mich hat es sehr gefreut und sage schon mal ciao.
Mach es gut, ciao. Ich kann mich auch nur gerne anschließen. Vielen dank Marcel. Ich hab auch sehr viel gelernt, ich muss mir ja mal Rust reinziehen n bisschen tiefer. Das freut mich. So soll es sein. Macht's gut. Ciao, bis dahin, Tschüss. Einfach komplex wird produziert und präsentiert von Heisenware Heisenware ist deine Loco Plattform zur Erstellung und zum Betrieb interaktiver Apps rund um den Shopfloor. Starte noch heute dein Free Trial unterheisenware.com einfach komplex.