<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://kryptowiki.eu/index.php?action=history&amp;feed=atom&amp;title=Rust_%28Programmiersprache%29</id>
	<title>Rust (Programmiersprache) - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://kryptowiki.eu/index.php?action=history&amp;feed=atom&amp;title=Rust_%28Programmiersprache%29"/>
	<link rel="alternate" type="text/html" href="https://kryptowiki.eu/index.php?title=Rust_(Programmiersprache)&amp;action=history"/>
	<updated>2026-05-22T04:56:18Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Kryptowiki - Die freie Enzyklopädie der Kryptowährungen</subtitle>
	<generator>MediaWiki 1.39.15</generator>
	<entry>
		<id>https://kryptowiki.eu/index.php?title=Rust_(Programmiersprache)&amp;diff=2485&amp;oldid=prev</id>
		<title>C1ph4: Die Seite wurde neu angelegt: „{{Infobox Programmiersprache  | Name                          = Rust  | Logo                          = [[Datei:Rust programming language black logo.svg|120px]…“</title>
		<link rel="alternate" type="text/html" href="https://kryptowiki.eu/index.php?title=Rust_(Programmiersprache)&amp;diff=2485&amp;oldid=prev"/>
		<updated>2018-05-22T17:14:39Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „{{Infobox Programmiersprache  | Name                          = Rust  | Logo                          = [[Datei:Rust programming language black logo.svg|120px]…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Infobox Programmiersprache&lt;br /&gt;
 | Name                          = Rust&lt;br /&gt;
 | Logo                          = [[Datei:Rust programming language black logo.svg|120px]]&lt;br /&gt;
 | Beschreibung                  = &lt;br /&gt;
 | Paradigma                     = [[Programmierparadigma|Multiparadigmen]] ([[Generische Programmierung|generisch]], [[Nebenläufigkeit|nebenläufig]], [[Funktionale Programmierung|funktional]], [[Imperative Programmierung|imperativ]], [[Strukturierte Programmierung|strukturiert]])&lt;br /&gt;
 | Erscheinungsjahr              = 2010; erste stabile Version 2015&lt;br /&gt;
 | Designer                      = &lt;br /&gt;
 | Entwickler                    = Früher Graydon Hoare, heute Rust Project Developers&lt;br /&gt;
 | AktuelleVersion               = 1.26.0&lt;br /&gt;
 | AktuelleVersionFreigabeDatum  = {{Datum|10|05|2018}}&amp;lt;ref&amp;gt;[https://blog.rust-lang.org/2018/05/10/Rust-1.26.html], The Rust Core Team, 10. Mai 2018&amp;lt;/ref&amp;gt;&lt;br /&gt;
 | AktuelleVorabVersion          = &lt;br /&gt;
 | AktuelleVorabVersionFreigabeDatum = &lt;br /&gt;
 | Typisierung                   = [[Starke Typisierung|stark]], [[Statische Typisierung|statisch]], [[Lineares Typsystem|linear]], [[Typinferenz]]&lt;br /&gt;
 | Implementierung               = &lt;br /&gt;
 | Dialekte                      = &lt;br /&gt;
 | Standardisierungen            = &lt;br /&gt;
 | Beeinflusst_von               = &lt;br /&gt;
 | Beeinflusste                  = &lt;br /&gt;
 | Betriebssystem                = [[Linux]], [[macOS]], [[Microsoft Windows|Windows]], [[FreeBSD]], [[Android (Betriebssystem)|Android]], [[Apple iOS|iOS]]&amp;lt;ref&amp;gt;{{cite web|url=https://github.com/rust-lang/rust/wiki/Doc-building-for-ios |title=Doc building for ios |website=GitHub |accessdate=2015-01-04}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
 | Lizenz                        = [[Apache License]] 2.0 und [[MIT License]]&amp;lt;ref name=&amp;quot;'license'&amp;quot;&amp;gt;{{cite web | url = https://github.com/mozilla/rust/blob/master/COPYRIGHT | title = COPYRIGHT | accessdate = 2012-12-17 | publisher=Rust compiler source repository}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
 | Website                       = [https://www.rust-lang.org/ rust-lang.org]&lt;br /&gt;
 | dialects                      = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Rust''' ist eine [[Programmierparadigma|Multiparadigmen]]-[[Systemprogrammiersprache]], entwickelt von [[Mozilla]] Research.&amp;lt;ref name=&amp;quot;lamda&amp;quot;&amp;gt;{{cite web|url = https://www.mozilla.org/en-US/research/projects/|title = Mozilla Research Projects|author = |date = |publisher = Mozilla Research|accessdate = 2015-05-19}}&amp;lt;/ref&amp;gt; Sie wurde entwickelt, um eine sichere, [[Nebenläufigkeit|nebenläufige]] und praxisnahe Sprache zu sein.&amp;lt;ref name=&amp;quot;rust-lang&amp;quot;&amp;gt;{{cite web|url=https://www.rust-lang.org/|title=The Rust Programming Language|accessdate=2012-10-21}}&amp;lt;/ref&amp;gt; Sicherheit bedeutet hier, dass solche [[Programmierfehler]] weitgehend ausgeschlossen werden, die zu [[Zugriffsverletzung|Speicherzugriffsfehlern]] oder [[Pufferüberlauf|Pufferüberläufen]] und damit häufig zu [[Sicherheitslücke (Software)|Sicherheitslücken]] führen. Im Gegensatz zu anderen Programmiersprachen mit automatischer [[Speicherverwaltung]] verwendet Rust hierfür keine [[Garbage Collection]], sondern setzt auf ein besonderes [[Typsystem]], eine bei funktionalen Sprachen übliche Eigenschaft.&lt;br /&gt;
&lt;br /&gt;
Rust vereint Ansätze aus verschiedenen [[Programmierparadigma|Programmierparadigmen]], unter anderem aus der [[Funktionale Programmierung|funktionalen]], der [[Objektorientierte Programmierung|objektorientierten]] und der [[Nebenläufige Programmierung|nebenläufigen]] Programmierung, und erlaubt so ein hohes [[Abstraktion (Informatik)|Abstraktionsniveau]]. Beispielsweise gibt es in Rust algebraische Datentypen, [[Pattern Matching]], [[Trait (Programmierung)|Traits]] (ähnlich den Typklassen in [[Haskell (Programmiersprache)|Haskell]]), [[Closure (Funktion)|Closures]], sowie Unterstützung für [[Ressourcenbelegung ist Initialisierung|RAII]]. Die Sprache wurde so entworfen, dass die Kosten der Abstraktionen zur [[Laufzeit (Informatik)|Laufzeit]] so gering wie möglich bleiben können (''zero-cost abstractions''), um eine mit [[C++]] vergleichbare [[Effizienz (Informatik)|Effizienz]] zu erreichen.&amp;lt;ref&amp;gt;{{Internetquelle |url=https://doc.rust-lang.org/complement-lang-faq.html#how-fast-is-rust? |titel=The Rust Language FAQ: How fast is Rust? |autor=The Rust Project Developers |hrsg= |werk= |datum= |sprache=en |zugriff=2015-05-19 |zitat=That said, it is an explicit goal of Rust to be as fast as C++ for most things.}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Sprache entstand aus einem persönlichen Projekt des Mozilla-Mitarbeiters Graydon Hoare. Mozilla begann das Sponsoring des Projekts im Jahr 2009.&amp;lt;ref name=&amp;quot;proj-faq&amp;quot;&amp;gt;{{cite web|url=https://github.com/mozilla/rust/wiki/Doc-project-FAQ|title=Project FAQ|date=2010-09-14|accessdate=2012-01-11}}&amp;lt;/ref&amp;gt; Es wurde 2010 zum ersten Mal angekündigt.&amp;lt;ref name=&amp;quot;future-tense&amp;quot;&amp;gt;{{cite web|url=https://www.slideshare.net/BrendanEich/future-tense-7782010|title=Future Tense|date=2011-04-29|accessdate=2012-02-06|quote=At Mozilla Summit 2010, we launched Rust, a new programming language motivated by safety and concurrency for parallel hardware, the “manycore” future which is upon us.}}&amp;lt;/ref&amp;gt; Im selben Jahr begann der Wechsel von einem (noch in [[OCaml]] geschriebenen) ersten [[Compiler]] zu einem neuen Compiler, der selbst in Rust geschrieben ist.&amp;lt;ref name=&amp;quot;rust-in-rust&amp;quot;&amp;gt;{{Internetquelle |url=http://blog.mozilla.com/graydon/2010/10/02/rust-progress/ |titel=Rust Progress |sprache=en |autor=Graydon Hoare |werk=Graydon’s work on Mozilla |datum=2010-10-02 |archiv-url=https://web.archive.org/web/20120319230524/http://blog.mozilla.com/graydon/2010/10/02/rust-progress/ |archiv-datum=2012-03-19 |zugriff=2016-04-03}}&amp;lt;/ref&amp;gt; Dieser ''rustc'' genannte Compiler verwendet [[LLVM]] als [[Front-End und Back-End|Back-End]] und kann sich seit 2011 erfolgreich selbst übersetzen.&amp;lt;ref name=&amp;quot;rust-compiles-rust&amp;quot;&amp;gt;{{cite web|url=https://mail.mozilla.org/pipermail/rust-dev/2011-April/000330.html|title=[rust-dev&amp;amp;#93; stage1/rustc builds|last=Hoare|first=Graydon|date=2011-04-20|accessdate=2011-04-20|quote=After that last change fixing the logging scope context bug, looks like stage1/rustc builds. Just shy of midnight :)}}&amp;lt;/ref&amp;gt; Eine erste stabile Version von Compiler und [[Standardbibliothek]], Rust 1.0, wurde am 15.&amp;amp;nbsp;Mai 2015 veröffentlicht.&amp;lt;ref name=&amp;quot;rust-1.0&amp;quot;&amp;gt;[https://blog.rust-lang.org/2015/05/15/Rust-1.0.html Announcing Rust 1.0]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sprachdesign ==&lt;br /&gt;
=== Syntax, Sprachkonstrukte ===&lt;br /&gt;
Syntaktisch ist die Sprache an [[C (Programmiersprache)|C]] angelehnt. Mehrere aufeinanderfolgende Anweisungen werden durch ein [[Semikolon]] getrennt, Blöcke stehen in geschweiften Klammern. In vielen Details weicht die [[Syntax]] allerdings davon ab, so werden beispielsweise keine Klammern um die Bedingungen von &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;- und &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;-Statements benötigt, stattdessen aber geschweifte Klammern um den dahinterstehenden Block erzwungen, auch wenn dort nur eine Anweisung steht. Das Schlüsselwort &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; leitet in Rust immer eine [[Foreach-Schleife]] ein, die das Iterieren über beliebige (auch benutzerdefinierte) Container und Objekte ermöglicht. Anstelle des &amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt;-Statements gibt es die wesentlich mächtigeren &amp;lt;code&amp;gt;match&amp;lt;/code&amp;gt;-Ausdrücke, die nicht nur mit Zahlen und Zeichenketten umgehen können, sondern [[Pattern Matching]] auf beliebig verschachtelten Strukturen durchführen können.&lt;br /&gt;
&lt;br /&gt;
Variablen werden normalerweise klein (in Snake case) geschrieben, Datentypen mit Ausnahme der primitiven mit großem Anfangsbuchstaben (in Camel case). Typparameter von generischen Typen und Funktionen stehen in spitzen Klammern. Zwei Doppelpunkte drücken aus, dass der Bezeichner auf der rechten Seite aus dem Namensraum des Bezeichners auf der linke Seite entstammen soll. Die Bindung eines Bezeichners &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; an einen Wert wird&lt;br /&gt;
: &amp;lt;code&amp;gt;let x: Typ = Wert;&amp;lt;/code&amp;gt;&lt;br /&gt;
geschrieben, wobei die Angabe des Typs auch entfallen darf, wenn der Typ [[Typinferenz|inferiert]] werden kann. Eine Variablen-Deklaration für die Variable &amp;lt;code&amp;gt;v&amp;lt;/code&amp;gt; hat die Form:&lt;br /&gt;
: &amp;lt;code&amp;gt;let mut v: Typ = Initialwert;&amp;lt;/code&amp;gt;&lt;br /&gt;
oder allgemeiner:&lt;br /&gt;
: &amp;lt;code&amp;gt;let mut v: Typ;&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;v = Wert;&amp;lt;/code&amp;gt;&lt;br /&gt;
Der Compiler überprüft mittels [[Datenflussanalyse]], dass alle Bindungen und Variablen vor dem Auslesen initialisiert wurden. Verwendung von uninitialisiertem Speicher ist nur über einen speziellen Befehl möglich, welcher zwingend mit &amp;lt;code&amp;gt;unsafe&amp;lt;/code&amp;gt; markiert werden muss.&lt;br /&gt;
&lt;br /&gt;
=== Typsystem ===&lt;br /&gt;
Benutzerdefinierte Datentypen können entweder als &amp;lt;code&amp;gt;struct&amp;lt;/code&amp;gt; ([[Struktur (Datentyp)|Struktur]] wie in C) oder als &amp;lt;code&amp;gt;enum&amp;lt;/code&amp;gt; ([[Verbund (Datentyp)#Unions|tagged-Union]]) definiert werden. Für beide Arten von Datentypen kann man mittels des &amp;lt;code&amp;gt;impl&amp;lt;/code&amp;gt;-Schlüsselswortes [[Methode (Programmierung)|Methoden]] definieren. Die sonst für [[objektorientierte Programmierung]] übliche [[Vererbung (Programmierung)|Vererbung]] gibt es in Rust allerdings nicht, [[Polymorphie (Programmierung)|Polymorphie]] wird stattdessen durch Traits und [[generische Programmierung]] ermöglicht. Ein Trait definiert eine Menge von Funktionen und Methoden, die dann jeweils zusammen von Datentypen implementiert werden und bei [[Generischer Typ|Typparametern]] als Einschränkung für die erlaubten Typen dienen können. Dies wird auch für Operatoren verwendet, sodass beispielsweise der Operator &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; mit jedem Datentyp verwendet werden kann, der den Trait &amp;lt;code&amp;gt;Add&amp;lt;/code&amp;gt; implementiert.&amp;lt;ref&amp;gt;[https://static.rust-lang.org/doc/stable/std/ops/trait.Add.html Dokumentation des „Add“-Traits]&amp;lt;/ref&amp;gt; Alle Funktions-, Methoden- und Operatoraufrufe werden dabei statisch gebunden, wodurch dem Compiler einige [[Programmoptimierung|Optimierungen]] ermöglicht werden, allerdings kann über sogenannte ''Trait-Objects'' auch mittels [[Dynamische Bindung|dynamischer Bindung]] auf Trait-Methoden zugegriffen werden. Es ist erlaubt, sowohl existierende Traits aus fremdem Code für benutzerdefinierte Typen, als auch neue, benutzerdefinierte Traits für existierende Typen zu implementieren.&lt;br /&gt;
&lt;br /&gt;
=== Zeiger, Speicherverwaltung ===&lt;br /&gt;
Rust kennt neben den sogenannten Raw-[[Zeiger (Informatik)|Pointern]], die Zeigern in C entsprechen und nur in explizit als &amp;lt;code&amp;gt;unsafe&amp;lt;/code&amp;gt; markiertem Code dereferenziert werden dürfen, auch noch [[Referenz (Programmierung)|Referenzen]]. Diese zeigen immer auf gültigen Speicher und dürfen niemals den Wert [[Zeiger (Informatik)#Nullzeiger|null]] annehmen. Es werden zwei verschiedene Arten von Referenzen unterschieden: gemeinsame Referenzen (''shared references''), eingeleitet durch &amp;lt;code&amp;gt;&amp;amp;amp;&amp;lt;/code&amp;gt;, und veränderbare Referenzen (''mutable references''), eingeleitet durch &amp;lt;code&amp;gt;&amp;amp;amp;mut&amp;lt;/code&amp;gt;. Der Rust-Compiler garantiert [[Statische Code-Analyse|statisch]], dass keine Referenz das von ihr referenzierte Objekt [[Variable (Programmierung)#Lebensdauer von Variablen|„überlebt“]], dass das referenzierte Objekt nicht verändert wird, während eine Referenz (egal ob gemeinsam oder veränderbar) existiert, und dass eine veränderbare Referenz – wenn eine solche existiert – stets die einzige Referenz auf ein Objekt ist, sodass Veränderungen am Objekt vorgenommen werden können, ohne dabei Referenzen zum selben Objekt an anderen Stellen im Code oder sogar in anderen [[Thread (Informatik)|Threads]] ungültig zu machen.&lt;br /&gt;
&lt;br /&gt;
Das Erstellen von Referenzen wird auch als ''Borrowing'' (Ausleihen) bezeichnet, und bildet zusammen mit dem Konzept der ''Ownership'' (Besitz) die Grundlage für die sichere Speicherverwaltung ohne Garbage Collection. ''Ownership'' bedeutet hier, dass jedes Objekt im Speicher im Besitz derjenigen Variable ist, der es bei der Erstellung zugewiesen wird. Am Ende der [[Variable (Programmierung)#Lebensdauer von Variablen|Lebensdauer]] dieser Variable wird der Speicher automatisch freigegeben. Für die meisten komplexeren Datentypen verwendet Rust die sogenannte ''Move''-[[Semantik]], sodass bei Zuweisung eines Objektes zu einer anderen Variablen das Objekt „verschoben“ wird, und ein Zugriff auf die alte Variable daraufhin nicht mehr möglich ist. Auch beim Übergeben von Objekten als [[Wertparameter]] an Funktionen (''call by value'') werden solche Objekte in die Funktion „hineingeschoben“ und sind von außen nicht mehr zugreifbar, wenn sie nicht wieder von der Funktion zurückgegeben werden. [[Datentyp#Elementare Datentypen|Primitive Datentypen]] verwenden keine ''Move''-Semantik, sondern die sonst übliche ''Copy''-Semantik (Zuweisungen erstellen eine Kopie), und bei benutzerdefinierten Datentypen kann mittels des ''Copy''-Traits selbst entschieden werden, ob ''Move''- oder ''Copy''-Semantik verwendet werden soll.&lt;br /&gt;
&lt;br /&gt;
Zur dynamischen Speicherverwaltung stehen die [[Intelligenter_Zeiger|Smart-Pointer-Typen]] &amp;lt;code&amp;gt;Box&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Rc&amp;lt;/code&amp;gt; und der Hilfstyp &amp;lt;code&amp;gt;RefCell&amp;lt;/code&amp;gt; zur Verfügung, welche einerseits dem System Ownership-Borrowing-Lifetime-Move unterworfen sind, dieses System andererseits auf die Laufzeitdynamik übertragen. Der Typ &amp;lt;code&amp;gt;Box&amp;amp;lt;T&amp;amp;gt;&amp;lt;/code&amp;gt; beschreibt einen besitzenden Zeiger auf einen Wert vom Typ &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt; im dynamisch allozierten Speicher. Der Typ &amp;lt;code&amp;gt;Rc&amp;amp;lt;T&amp;amp;gt;&amp;lt;/code&amp;gt; beschreibt über [[Referenzzählung]] einen gemeinschaftlichen Besitz auf einen unveränderlichen Wert. Ein unveränderlicher Wert kann jedoch veränderliche inneren Daten vom Typ &amp;lt;code&amp;gt;RefCell&amp;amp;lt;T&amp;amp;gt;&amp;lt;/code&amp;gt; besitzen, wobei jeweils ein Referenzzähler für einen Zugriff analog zu &amp;lt;code&amp;gt;&amp;amp;amp;&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;&amp;amp;amp;mut&amp;lt;/code&amp;gt; das sichere dynamische Borrowing durch Prüfung zur Laufzeit ermöglicht.&lt;br /&gt;
&lt;br /&gt;
Mit &amp;lt;code&amp;gt;Rc&amp;lt;/code&amp;gt; allein ist keine Dynamik zyklischer Datenstrukturen möglich. Hierzu kann wieder &amp;lt;code&amp;gt;RefCell&amp;lt;/code&amp;gt; herangezogen werden, wobei die Zyklen manuell aufgebrochen werden müssen, damit es nicht zu einem [[Speicherleck]] kommt. Als alternatives Konzept ist der Zeigertyp &amp;lt;code&amp;gt;Weak&amp;amp;lt;T&amp;amp;gt;&amp;lt;/code&amp;gt; vorhanden, bei dem die Zeiger analog zu &amp;lt;code&amp;gt;Rc&amp;lt;/code&amp;gt; sind, jedoch keinen Besitz am Wert haben. Zur Umsetzung von &amp;lt;code&amp;gt;Weak&amp;lt;/code&amp;gt; ist in &amp;lt;code&amp;gt;Rc&amp;lt;/code&amp;gt; ein zweiter Referenzzähler implementiert. Ein Zeiger vom Typ &amp;lt;code&amp;gt;Weak&amp;lt;/code&amp;gt; verhindert zwar nicht den Destruktor-Aufruf beim Verschwinden aller Zeiger vom Typ &amp;lt;code&amp;gt;Rc&amp;lt;/code&amp;gt;, die Deallokation des brach liegenden Knotens geschieht dann allerdings erst beim Verschwinden des letzten Zeigers vom Typ &amp;lt;code&amp;gt;Weak&amp;lt;/code&amp;gt;. Die Destruktor-Aufrufe sorgen dabei für ein automatisches Aufbrechen der Zyklen.&lt;br /&gt;
&lt;br /&gt;
Für die nebenläufige Programmierung ist ein Austausch von &amp;lt;code&amp;gt;Rc&amp;lt;/code&amp;gt; gegen &amp;lt;code&amp;gt;Arc&amp;lt;/code&amp;gt;, und &amp;lt;code&amp;gt;RefCell&amp;lt;/code&amp;gt; gegen die analogen Konzepte &amp;lt;code&amp;gt;Mutex&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;RwLock&amp;lt;/code&amp;gt; notwendig.&lt;br /&gt;
&lt;br /&gt;
[[Zeiger_(Informatik)#Nullzeiger|Nullzeiger]] kommen in Rust nicht vor. Abwesenheit eines Werts wird stattdessen durch den Typ &amp;lt;code&amp;gt;Option&amp;amp;lt;T&amp;amp;gt;&amp;lt;/code&amp;gt; modelliert, welcher es als &amp;lt;code&amp;gt;enum&amp;lt;/code&amp;gt; ermöglicht, zwischen &amp;lt;code&amp;gt;Some(T)&amp;lt;/code&amp;gt; (Vorhandensein) und &amp;lt;code&amp;gt;None&amp;lt;/code&amp;gt; (Abwesenheit) zu unterscheiden. Die Verwendung von Optionen ist nicht auf Zeiger beschränkt. Möchte man z.&amp;amp;nbsp;B. einen großen Teil einer &amp;lt;code&amp;gt;struct&amp;lt;/code&amp;gt; zunächst uninitialisiert lassen, dann kann man diesen als innere &amp;lt;code&amp;gt;struct&amp;lt;/code&amp;gt; hinter einer Option verbergen und mit &amp;lt;code&amp;gt;None&amp;lt;/code&amp;gt; initialisieren.&lt;br /&gt;
&lt;br /&gt;
=== Fehlerbehandlung ===&lt;br /&gt;
In Rust gibt es die in vielen Sprachen vorhandene Ausnahmebehandlung mit automatischem Stack unwinding nicht. Stattdessen werden Fehler als gewöhnliche Rückgabewerte von Funktionen modelliert. Zur strengen Typisierung dient dabei der Typ &amp;lt;code&amp;gt;Result&amp;amp;lt;T,E&amp;amp;gt;&amp;lt;/code&amp;gt;, welcher als &amp;lt;code&amp;gt;enum&amp;lt;/code&amp;gt; formuliert ist, um zwischen &amp;lt;code&amp;gt;Ok(T)&amp;lt;/code&amp;gt; (normale Werte) und &amp;lt;code&amp;gt;Err(E)&amp;lt;/code&amp;gt; (Fehlerwerte) unterscheiden zu können.&lt;br /&gt;
&lt;br /&gt;
Ein Laufzeitnachteil entsteht bei der Rückgabe von &amp;lt;code&amp;gt;enum&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;struct&amp;lt;/code&amp;gt; in vielen Fällen nicht, da der Compiler in der Lage ist, für größere Objekte automatisch Zeiger zu erzeugen und Nullzeiger-Optimierungen durchzuführen.&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;Hello, world&amp;quot;-Funktion ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rust&amp;quot;&amp;gt;&lt;br /&gt;
fn main() {&lt;br /&gt;
    println!(&amp;quot;Hello, world!&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das obige Beispiel gibt den Text &amp;lt;code&amp;gt;Hello, world!&amp;lt;/code&amp;gt; am Ausgabemedium aus. &amp;lt;code&amp;gt;println!()&amp;lt;/code&amp;gt; ist hierbei keine gewöhnliche [[Funktion (Programmierung)|Funktion]], sondern ein [[Makro]]. Die Funktionsdeklaration erfolgt in Rust mit dem [[Schlüsselwort (Programmierung)|Schlüsselwort]] &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Verwendung ==&lt;br /&gt;
Der Rust-Compiler wird standardmäßig mit [[Cargo (Software)|Cargo]], einer [[Paketverwaltung]] für Rust-Software, ausgeliefert, die verwendete [[Programmbibliothek|Bibliotheken]] automatisch herunterlädt und Abhängigkeiten auflöst. Eine Vielzahl wiederverwendbarer [[Open Source|Open-Source]]-Komponenten stehen im offiziellen Paket-[[Repository]] ''crates.io''&amp;lt;ref&amp;gt;{{Internetquelle |url=https://crates.io/ |titel=The Rust community’s crate host |sprache=en |zugriff=2017-04-03}}&amp;lt;/ref&amp;gt; zur Verfügung.&lt;br /&gt;
&amp;lt;!-- TODO: Ein Absatz über C FFI --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rust findet darüber hinaus unter anderem in folgenden Projekten Verwendung:&lt;br /&gt;
* [[Mozilla Firefox]]&amp;lt;ref&amp;gt;{{Internetquelle |url=https://hacks.mozilla.org/2016/07/shipping-rust-in-firefox/ |titel=Shipping Rust in Firefox |sprache=en |autor=Dave Herman |werk=Mozilla Hacks |datum=2016-07-12 |zugriff=2017-04-02}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{Internetquelle |url=https://wiki.mozilla.org/Quantum |titel=Quantum |sprache=en |werk=Mozilla Wiki |zugriff=2017-04-03}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [[Servo (Software)|Servo]] – eine neue [[Layout-Engine]] für [[Webbrowser]] von [[Mozilla]].&amp;lt;ref&amp;gt;{{Internetquelle |url=https://www.heise.de/newsticker/meldung/Mozilla-veroeffentlicht-erste-Preview-der-neuen-Browser-Engine-Servo-3253464.html |werk=[[Heise Newsticker]] |zugriff=2016-07-04 |datum=2016-07-04 |titel=Mozilla veröffentlicht erste Preview der neuen Browser-Engine Servo |autor=Rainald Menge-Sonnentag}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Redox OS – ein [[Unixoides System|unixähnliches]], in Rust geschriebenes Betriebssystem mit [[Mikrokernel|Microkernel]]. Es ist [[Freie Software|frei]], [[Open Source|Open-Source]] und steht unter der [[MIT-Lizenz]].&amp;lt;ref&amp;gt;{{cite news|last1=Yegulalp|first1=Serdar|title=Rust’s Redox OS could show Linux a few new tricks|url=http://www.infoworld.com/article/3046100/open-source-tools/rusts-redox-os-could-show-linux-a-few-new-tricks.html|accessdate=2016-03-21|publisher=infoworld}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{Literatur |Titel=Redox OS: Wer nicht rustet, rostet - Golem.de |Online=https://www.golem.de/news/redox-os-wer-nicht-rustet-rostet-1612-124867.html |Abruf=2018-02-12}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Magic Pocket – Software, die auf den Diskotech-[[Storage]]-Servern von [[Dropbox]] läuft und mit Datenmengen im [[Petabyte]]-Bereich umgeht.&amp;lt;ref&amp;gt;{{Internetquelle |url=https://www.wired.com/2016/03/epic-story-dropboxs-exodus-amazon-cloud-empire/ |titel=The Epic Story of Dropbox’s Exodus From the Amazon Cloud Empire |sprache=en |autor=Cade Metz |datum=2016-03-14 |hrsg=[[Wired]] |zugriff=2017-04-03}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [[OpenDNS]] – verwendet Rust in zwei Softwarekomponenten.&amp;lt;ref&amp;gt;{{cite web|last1=Frank|first1=Denis|title=Using HyperLogLog to Detect Malware Faster Than Ever|url=https://labs.opendns.com/2013/12/05/hyperloglog-and-malware-detection/|website=OpenDNS Security Labs|accessdate=2016-03-19}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite web|last1=Denis|first1=Frank|title=ZeroMQ: Helping us Block Malicious Domains in Real Time |url=https://labs.opendns.com/2013/10/04/zeromq-helping-us-block-malicious-domains/|website=OpenDNS Security Labs|accessdate=2016-03-19}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* ripgrep – eine in Rust geschriebene, plattformübergreifende und auf Geschwindigkeit optimierte Alternative zu [[grep]].&amp;lt;ref&amp;gt;{{Internetquelle |url=http://blog.burntsushi.net/ripgrep/ |titel=ripgrep is faster than {grep, ag, git grep, ucg, pt, sift} |sprache=en |autor=Andrew Gallant |datum=2016-09-23 |werk=Andrew Gallant’s Blog |zugriff=2017-04-03}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Externe Links ==&lt;br /&gt;
* {{Internetquelle|url=https://rustbyexample.com/ |titel=Introduction - Rust By Example |autor= |werk=rustbyexample.com | sprache=en |datum= |zugriff=2018-02-09}}&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmiersprache]]&lt;br /&gt;
[[Kategorie:Mozilla]]&lt;/div&gt;</summary>
		<author><name>C1ph4</name></author>
	</entry>
</feed>