Hallo Welt!

Nun, da du Rust installiert hast, lass uns dein erstes Rust-Programm schreiben. Es ist traditionell so, dass man mit dem ersten Programm in einer neuen Sprache den Text "Hallo Welt!" auf dem Bildschirm ausgeben läßt. Die tolle Sache an so einem einfachen Programm ist, dass du überprüfen kannst, dass dein Compiler nicht einfach nur installiert ist, sondern auch ordnungsgemäß funktioniert. Und Informationen auf dem Bildschirm auszugeben ist eine ziemlich häufige Sache.

Im ersten Schritt müssen wir eine Datei erstellen, in die wir unseren Code packen. Ich mag es ein projekte-Verzeichnis in meinem Heimverzeichnis zu erstellen und alle meine Projekte dort aufzubewahren. Rust ist es egal wo dein Code liegt.

Dies führt sogar zu einer anderen Angelegenheit, welche wir behandeln sollten: Diese Anleitung wird annehmen, dass du grundlegendend mit der Kommandozeile vertraut bist. Rust selbst stellt keine besonderen Anforderungen an deine Editierwerkzeuge oder wo dein Code liegt. Falls du eine IDE der Kommandozeile vorziehst, dann möchtest du vielleicht SolidOak oder Plugins für deine bevorzugte IDE ausprobieren. Es existieren eine Reihe von Erweiterungen von unterschiedlicher Qualität, welche von der Community entwickelt werden. Das Rust-Team liefert auch Plugins für verschiedene Editoren. Deine IDE einzurichten sprengt den Rahmen dieses Tutorials, also schau in die Dokumentation für dein spezielles Setup.

Da dies nun aus dem Raum ist, lass uns damit anfangen ein Verzeichnis in unserem Projekte Verzeichnis anzulegen.

$ mkdir ~/projekte
$ cd ~/projekte
$ mkdir hallo_welt
$ cd hallo_welt

Wenn Windows und nicht die Powershell benuzt, dann wird ~ wohl nicht funktionieren. Für mehr Details, schaue in die Dokumentation für deine Shell.

Lass uns als nächstes eine neue Quelltextdatei anlegen. Wir werden unsere Datei main.rs nennen. Rust Dateien haben immer die Endung .rs. Wenn du mehr als ein Wort in deinem Dateinamen verwendest, dann benutze einen Unterstrich: hallo_welt.rs anstatt hallowelt.rs.

Nun, da wir unsere Datei offen haben, tippen wir folgenden Quelltext ein:

fn main() {
    println!("Hallo Welt!");
}

Speichere die Datei und tippe dann in die Kommandozeile:

$ rustc main.rs
$ ./main # oder main.exe unter Windows
Hallo Welt!

Erfolg! Lass uns im Detail durchgehen und sehen, was gerade passiert ist.

fn main() {

}

Diese Zeilen definieren eine Funktion in Rust. Die main-Funktion ist besonders: Sie ist der Anfang eines jeden Rust-Programmes. Die erste Zeile sagt "Ich deklariere eine Funktion namens main, welche keine Argumente entgegen nimmt und nichts zurückgibt". Falls es Argumente gäbe, dann würden sie zwischen den Klammern (( und )) stehen und weil wir nichts von dieser Funktion zurückgeben, können wir den Rückgabetyp koomplett weglassen. Darauf gehen wir später ein.

Du wirst auch feststellen, dass die Funktion von geschweiften Klammern ({ und }) umgeben ist. Rust benötigt diese um jeden Funktionskörper herum. Es gilt als guten Stil die geöffnete Klammer in die selbe Zeile wie die Funktionsdeklaration, mit einem Leerzeichen dazwischen, zu setzen.

Als nächstes kommt diese Zeile:

# #![allow(unused_variables)]
#fn main() {
    println!("Hallo Welt");

#}

Diese Zeile macht die ganze Arbeit in unserem kleinen Programm. Es gibt eine Zahl von Details die hier wichtig sind. Das erste ist, dass die Zeile mit vier Leerzeichen anstatt mit Tabs eingerückt ist. Bitte stelle den Editor deiner Wahl so ein, dass mit der Tab-Taste vier Leerzeichen eingefügt werden. Wir bieten ein paar Beispieleinstellungen für verschiedene Editoren an.

Der Zweite Punkt ist der println!()-Teil. Dieser ruft ein Rust-Makro (so wird Metaprogrammierung in Rust gemacht) auf. Wenn es eine Funktion wäre, dann würde es so aussehen: println(). Für unsere Zwecke brauchen wir uns nicht um diesen Unterschied kümmern. Merk dir einfach, dass du manchmal ein ! sehen wirst und es bedeutet, dass du ein Makro anstatt eine normalen Funktion aufrufst. Rust implementiert aus einem guten Grund println! als Makro anstatt als normale Funktion. Aber das ist ein fortgeschrittenes Thema. Eine letzte Sache noch: Rusts-Makros sind bedeutend anders als C-Makros, falls du die mal benutzt hast. Hab keine Angst Makros zu benutzen. Wir werden die Details später noch behandeln. Aber für den Moment musst du uns vertrauen.

Weiter gehts. "Hallo Welt" ist ein ‘String’. Strings sind ein überraschend kompliziertes Thema in einer Systemprogrammiersprache. Und dies ist ein ‘statisch allokierter’ String. Falls du mehr über Allokierung lesen möchtest, dann schau dir der Stack und der Heap an. Aber du musst es nicht unbedingt, wenn du nicht möchtest. Wir übergeben den String als Argument an println!, was dann den String auf dem Bildschirm ausgibt. Leicht genug!

Weiterhin endet die Zeile mit einem Semikolon (;). Rust ist eine ‘ausdrucksorientierte’ Sprache. Das bedeuted, dass die meisten Dinge Ausdrücke anstatt Anweisungen sind. Das ; wird benutzt um anzuzeigen, dass der Ausdruck zuende ist und der nächste beginnen kann. Die meisten Zeilen in Rust-Code enden mit einem ;.

Zum Schluss kompilieren wir unser Programm und lassen es laufen. Wir können mit unserem Compiler rustc kompilieren, indem wir den Namen unserer Quelltextdatei angeben:

$ rustc main.rs

Dies ist ähnlich wie bei gcc oder clang, falls du einen C oder C++ Hintegrund hast. Rust wird eine binäre ausführbare Datei ausgeben. Du kannst sie mittels ls sehen:

$ ls
main  main.rs

Oder unter Windows:

$ dir
main.exe  main.rs

Es existieren nun zwei Dateien: Unser Quellcode mit der .rs Endung und eine ausführbare Datei (main.exe unter Window, main überall sonst).

$ ./main  # or main.exe on Windows

Dies gibt nun unseren Hallo Welt!-Text in unserer Kommandozeile aus.

Falls du von dynamischen Sprachen wie Ruby, Python oder JavaScript kommst, dann bist du vielleicht nicht daran gewöhnt, dass diese zwei Schritte getrennt sind. Rust ist eine ‘ahead-of-time compiled language’, was bedeutet, dass man ein Programm kompilieren und dann jemand anderem geben kann ohne, dass diese Person Rust zur Ausführung benötigt. Wenn man jemandem eine .rb, .py oder .js gibt, dann benötigt dieser Jemand eine installierte Ruby-/Python-/JavaScript-Implementierung. Aber man braucht nur einen Befehl um zu kompilieren und auszuführen. Im Sprachendesign ist alles ein Kompromiss und Rust hat seine Entscheidung getroffen.

Gratuliere! Du hast nun offiziell ein Rust-Programm geschrieben. Das macht dich nun zu einem Rust-Programmier! Willkommen.

Als nächstes würde ich dich gerne mit einem anderen Werkzeug bekanntmachen, nämlich mit Cargo. Dieses wird benutzt, um realitätsnahe Programme zu schreiben. Nur rustc zu benutzen ist nett für einfache Sachen. Aber während dein Projekt wächst wirst du etwas haben wollen, was dir hilft alle Möglichkeiten die dir rustc bietet, zu managen und es dir leicht macht Code mit anderen Leuten und Projekten zu teilen.