Abo
  • Services:
Anzeige
Rust ist benannt nach dem "rostigem" Pilzbefall auf Pflanzen.
Rust ist benannt nach dem "rostigem" Pilzbefall auf Pflanzen. (Bild: Wikimedia:Smartse - CC-BY-SA 3.0)

Mozillas Programmiersprache: Rust bedient sich bei der Konkurrenz

Rust ist benannt nach dem "rostigem" Pilzbefall auf Pflanzen.
Rust ist benannt nach dem "rostigem" Pilzbefall auf Pflanzen. (Bild: Wikimedia:Smartse - CC-BY-SA 3.0)

Gedacht ist Rust als schnellere und einfachere Alternative zu C und C++. Doch die Programmiersprache unterscheidet sich teils deutlich von ihren Vorbildern. Wir zeigen ihre Grundlagen anhand von Beispielen. Dabei wird auch klar, dass sich die Sprache großzügig bei der Konkurrenz bedient.
Von Andreas Möller

Die statisch typisierte Programmiersprache Rust soll schnell und sicher sein. Seit dem Erscheinen der Version 1.0 gilt die Sprache als stabil, so dass sich nun auch externe Entwickler damit vertraut machen können. Dabei wird schnell klar, dass Rust viele Anleihen bei anderen Sprachen macht. Wir erklären mit Hilfe einfacher Beispiele im Folgenden grundlegende Konzepte von Rust.

Anzeige

Speicher und Zeiger

Rust speichert wie ihr großes Vorbild C Variablen fester Größe in einem Stack. Zeigerwerte legt sie hingegen im Heap des Hauptspeichers ab. Der folgende Code demonstriert den kontrollierten Umgang mit alloziertem Speicher unter Rust.

Geänderte Besitzverhältnisse

01 fn print_length(vec:Vec<i32>)  {
02   println!("Der Länge des Vektors beträgt {}", vec.len());
03 }
04
05 fn main() {
06   let mut vec:Vec<i32> = vec![1,2,3];
07   print_length(vec);
08   vec.push(4);
09 }

Wird der Code in der Datei moved_type.rs gespeichert und die Software anschließend über den Befehl rustc moved.rs in der Shell kompiliert, bricht der Compiler den Vorgang mit einer Fehlermeldung für die Zeile 8 ab:
moved_type.rs:8:3: 8:6 error: use of moved value: `vec`

In dem Beispiel verweist der im Hauptteil des Programms erzeugte Zeiger vec (Zeile 6) auf den Speicherbereich im Heap, der die Repräsentation des Vektors mit den Komponenten 1, 2 und 3 speichert. Zeile 7 übergibt den Zeiger an die Funktion print_length() und macht sie so zum exklusiven Besitzer. In der Konsequenz darf das Programm den Zeiger ab Zeile 7 nicht mehr verwenden, was zu der Fehlermeldung führt.

Soll der Zeiger dennoch weiterverwendet werden, kann er temporär an print_length() verliehen werden (Borrowing). Dazu wird in Zeile 7 eine Referenz (&vec) übergeben und analog die Funktionsdeklaration von print_length() in Zeile 1 modifiziert nach vec: &Vec<i32>. Soll print_length() zudem in der Lage sein, den Zeigerwert zu ändern, muss alternativ das Fragment vec: &mut Vec<i32> genutzt werden.

Rust ermöglicht es den Entwicklern aber nur, eine veränderbare Referenz zu übergeben. Um den Ressourcenverleih in jedem Aspekt der Programmierung richtig zu machen, bietet Rust neben dem Borrowing die Angabe von Lifetimes.

Beim Freigeben von alloziertem Speicher verfolgt die Programmiersprache einen eigenen Ansatz: Das Rust-Kompilat erledigt die Speicherfreigabe selbsttätig und verzichtet dabei auf einen Garbage Collector wie es ihn unter Java gibt. Auch die Funktion free(), wie sie C und C++ unterstützen, muss die Sprache nicht heranziehen, um den Speicherplatz programmgestützt freizugeben.

Ausdrucksstark

Wertet Rust einen Ausdruck aus, ist dessen Rückgabewert das Ergebnis. Doch auch alle Anweisungen haben einen Rückgabewert: ein leeres Tupel. Das Semikolon trennt, wie in vielen anderen Sprachen, Ausdrücke und Funktionen, um sie zu gruppieren.

Die Funktion aus dem nächsten Beispiel ermittelt das Maximum zweier ganzer Zahlen. Diese übernimmt sie in der Parameterliste nach dem Funktionsnamen in Zeile 1. Als Datentyp verlangt sie für die Parameter a und b je eine 32-Bit-Zahl. Der Rückgabewert rechts neben dem ->-Operator ist vom selben Typ.

Rückgabewerte

01 fn max(a:i32, b:i32) -> i32 {
02   if a > b { return a };
03   b
04 }

Zeile 2 verwendet das Schlüsselwort return (ret in Version 0.3) und gibt a als Resultat zurück. Anderenfalls gibt Zeile 3 den Wert von b zurück. Die letzte Zeile des Funktionsrumpfes darf auf return verzichten.

Falls Zeile 3 irrtümlicherweise mit einem Semikolon abgeschlossen würde, wäre die Funktion ungültig, denn das würde den Ausdruck b in eine Anweisung verwandeln. Damit wäre der Typ des Rückgabewerts ein Tupel und nicht wie gefordert eine ganze Zahl.

Musterhaft und klassenlos 

eye home zur Startseite
Baron Münchhausen. 19. Jul 2015

Deswegen hat er auch "war" hinzugefügt :)

grorg 18. Jul 2015

Wenn du damit auf das "Zitat" von Bill Gates ansprichst - das gab es nie und ist frei...

grorg 18. Jul 2015

Wir reden hier über eine Programmiersprache und nicht Picasso ....... zeig doch mal, wie...

esgeh 17. Jul 2015

In Rust wird dir genausowenig wie in C eine "Indirektion" aufgezwungen. Wenn du...

flasherle 17. Jul 2015

nur das bei reeller umsetzung das ganze durch die namensgebung leicht lesbar wird...



Anzeige

Stellenmarkt
  1. OSRAM GmbH, Augsburg
  2. Daimler AG, Ulm
  3. Mobile Trend GmbH, Hamburg
  4. SEW-EURODRIVE GmbH & Co KG, Heidesheim


Anzeige
Top-Angebote
  1. (u. a. Bang & Olufsen BeoPlay H6 2nd Generation für 175€ statt 237€ im Preisvergleich und LG...
  2. für 199,90€ statt 269€ im Vergleich
  3. 133€ (Vergleichspreis je nach Farbe ab ca. 180€)

Folgen Sie uns
       


  1. Dokumentation zum Tor-Netzwerk

    Unaufgeregte Töne inmitten des Geschreis

  2. Patentklage

    Qualcomm will iPhone-Importstopp in Deutschland

  3. Telekom

    Wie viele Bundesfördermittel gehen ins Vectoring?

  4. IETF

    Wie TLS abgehört werden könnte

  5. Recht auf Vergessenwerden

    EuGH entscheidet über weltweite Auslistung von Links

  6. Avast und Piriform

    Ccleaner-Entwickler wird Teil von Avast Software

  7. id Software

    Update 6.66 für Doom enthält Season-Pass-Inhalte

  8. Microsoft

    Kein Windows 10 on ARM für Smartphones

  9. Creoqode 2048 im Test

    Wir programmieren die größte portable Spielkonsole der Welt

  10. Auch Vectoring

    Niedersachsen fördert Internetausbau für 400.000 Haushalte



Haben wir etwas übersehen?

E-Mail an news@golem.de


Anzeige
Handyortung: Wir ahnungslosen Insassen der Funkzelle
Handyortung
Wir ahnungslosen Insassen der Funkzelle
  1. Bundestrojaner Österreich will Staatshackern Wohnungseinbrüche erlauben
  2. Staatstrojaner Finfishers Schnüffelsoftware ist noch nicht einsatzbereit
  3. Messenger-Dienste Bundestag erlaubt großflächigen Einsatz von Staatstrojanern

48-Volt-Systeme: Bosch setzt auf Boom für kompakte Elektroantriebe
48-Volt-Systeme
Bosch setzt auf Boom für kompakte Elektroantriebe
  1. Elektromobilität Shell stellt Ladesäulen an Tankstellen auf
  2. Ifo-Studie Autoindustrie durch Verbrennungsmotorverbot in Gefahr
  3. Mobilität Elektroautos deutscher Start-ups fordern Autobauer heraus

Anwendungen für Quantencomputer: Der Spuk in Ihrem Computer
Anwendungen für Quantencomputer
Der Spuk in Ihrem Computer
  1. Quantencomputer Ein Forscher in den unergründlichen Weiten des Hilbertraums
  2. Quantenprogrammierung "Die physikalische Welt kann kreativer sein als wir selbst"
  3. Quantenoptik Vom Batman-Fan zum Quantenphysiker

  1. Re: mit sü

    der_wahre_hannes | 16:31

  2. Re: Katastrophe

    My1 | 16:30

  3. Re: Wir sind doch alle Marsianer!

    Komischer_Phreak | 16:30

  4. Re: Jackpot

    der_wahre_hannes | 16:29

  5. Re: Gibt nur 4 sinnvolle Zahlungsarten...

    Spaghetticode | 16:29


  1. 16:34

  2. 15:44

  3. 15:08

  4. 14:00

  5. 13:15

  6. 12:57

  7. 12:41

  8. 12:07


  1. Themen
  2. A
  3. B
  4. C
  5. D
  6. E
  7. F
  8. G
  9. H
  10. I
  11. J
  12. K
  13. L
  14. M
  15. N
  16. O
  17. P
  18. Q
  19. R
  20. S
  21. T
  22. U
  23. V
  24. W
  25. X
  26. Y
  27. Z
  28. #
 
    •  / 
    Zum Artikel