Rust (programming language)

Rost
A capitalised letter R set into a sprocket
Das offizielle Rust -Logo
Paradigmen Multi-Paradigma: gleichzeitig, funktional, generisch, Imperativ, strukturiert
Entworfen von Graydon Hoare
Erstmals erschienen 7. Juli 2010; vor 12 Jahren
Stabile Version
1.62.1[1] Edit this on Wikidata / 19. Juli 2022; Vor 16 Tagen
Disziplin tippen Befriedigung, gefolgert, nominal, statisch, stark
Implementierungssprache Rost
Plattform Plattformübergreifend[2][Anmerkung 1]
OS Plattformübergreifend[2][Anmerkung 2]
Lizenz MIT und Apache 2.0 (Dual-Lizenz) [3]
Dateiname -Erweiterungen .rs, .rlib
Webseite www.Rust-Lang.org
Beeinflusst von
Beeinflusst

Rost ist ein Multi-Paradigma, Allzweckprogrammiersprache. Rost betont Leistung, Geben Sie Sicherheit ein, und Parallelität.[9][10][11] Rost erzwingt Speichersicherheit- Das ist das alles Verweise Zeigen Sie auf einen gültigen Speicher - ohne dass die Verwendung von a erforderlich ist Müllsammler oder Referenzzählung in anderen Speichersprachen vorhanden.[11][12] Gleichzeitig die Speichersicherheit durchsetzen und gleichzeitig verhindern Datenrennen, Rost Ausleihen Sie Checker aus verfolgt die Objektlebensdauer und variabler Umfang von allen Verweise in einem Programm während Zusammenstellung.[13] Rost ist beliebt für Systemprogrammierung[11] bietet aber auch hochrangige Funktionen einschließlich Funktionelle Programmierung Konstrukte.[14]

Der Softwareentwickler Graydon Hoare hat Rost gestaltet, während er bei der Arbeit bei der Arbeit bei Mozilla Forschung im Jahr 2006.[15] Mozilla hat das Projekt 2009 offiziell gesponsert, und die Designer verfeinerten die Sprache beim Schreiben der Servo Experimental- Browsermotor[16] und der Rost Compiler. Zu den Haupteinflüssen von Rust zählen Sml, Ocaml, C ++, Zyklon, Haskell, und Erlang.[4] Seit der ersten stabilen Veröffentlichung im Januar 2014 wurde Rust von Unternehmen, einschließlich Amazonas, Zwietracht, Dropbox, Facebook (Meta), Google (Alphabet), und Microsoft.

Rost wurde für sein Wachstum als neuere Sprache bekannt[10][17] und war das Thema akademischer Programmiersprachen Forschung.[18][19][20][11]

Geschichte

Frühe Ursprünge (2006–2012)

Mozilla Foundation Hauptquartier in Mountain View, Kalifornien

Rost entstand aus einem persönlichen Projekt, das 2006 von 2006 begonnen wurde Mozilla Mitarbeiter Graydon Hoare. Mozilla begann das Projekt 2009 und kündigte das Projekt 2010 offiziell an.[15][21] Im selben Jahr hatte sich die Arbeit von der Initialen verschoben Compiler geschrieben in Ocaml zu einem Selbsthost-Compiler bezogen auf Llvm Geschrieben in Rost. Der neue Rost -Compiler benannt Rostc, erfolgreich sich selbst zusammengestellt im Jahr 2011. die erste nummerierte Pre-Alpha-Version Von dem Compiler wurde Rust 0,1 im Januar 2012 veröffentlicht.[22]

Evolution (2013–2019)

Rost Typ System, wesentlich zwischen den Versionen 0,2, 0,3 und 0,4 Rost verändert. Version 0.2 eingeführt Klassen zum ersten Mal,[23] und Version 0.3 hinzugefügt Zerstörer und Polymorphismus durch die Verwendung von Schnittstellen.[24] In Rost 0,4, Züge wurden als Mittel zur Verfügung gestellt Nachlass; Schnittstellen wurden mit Merkmalen einheitlich und als separates Merkmal entfernt. Die Klassen wurden ebenfalls entfernt und durch eine Kombination von Implementierungen ersetzt und ersetzt strukturierte Typen.[25] Zusammen mit konventionellem statische Typisierung, vor Version 0.4, Rost unterstützte auch Artenstatanalyse durch Verträge. Es wurde in Release 0.4 entfernt, obwohl dieselbe Funktionalität durch Nutzung von Rost erreicht werden kann Typ System.[26]

Im Januar 2014 der Chefredakteur von Dr. Dobbs Journal, Andrew Binstock, kommentierte Rusts Chancen, Konkurrent zu werden C ++ Zusätzlich zu den Sprachen D, gehen, und Nim (dann Nimrod). Laut Binstock wurde die Adoption, obwohl Rust "weithin als bemerkenswert elegante Sprache angesehen wurde", da sich die Adoption zwischen den Versionen wiederholt änderte.[27] Der Erste stabile Version, Rost 1.0, wurde am 15. Mai 2015 bekannt gegeben.[28][29]

Mozilla Entlassungen und Rust Foundation (2020 - present)

Im August 2020 entließ Mozilla im Rahmen einer Umstrukturierung von Unternehmen, die durch die langfristigen Auswirkungen der langfristigen Auswirkungen der langfristigen Auswirkungen der langfristigen Auswirkungen haben, 250 seiner 1.000 Mitarbeiter weltweit aus Covid-19 Pandemie.[30][31] Das Team dahinter ServoEin in Rost geschriebener Browsermotor wurde vollständig aufgelöst. Die Veranstaltung machte Bedenken hinsichtlich der Zukunft von Rost, da einige Mitglieder des Teams aktive Mitwirkende von Rost waren.[32] In der folgenden Woche erkannte das Rust Core -Team die schwerwiegenden Auswirkungen der Entlassungen an und kündigte an, dass Pläne für eine Rust Foundation im Gange waren. Das erste Ziel der Stiftung wäre es, alle zu übernehmen Warenzeichen und Domain Namenund übernehmen finanzielle Verantwortung für ihre Kosten.[33]

Am 8. Februar 2021 die Bildung der Rust Foundation wurde von seinen fünf Gründungsunternehmen angekündigt (AWS, Huawei, Google, Microsoft, und Mozilla).[34][35] In einem Blog Post veröffentlicht am 6. April 2021 kündigte Google die Unterstützung für Rust inn Android Open Source -Projekt als Alternative zu C/C ++.[36][37]

Am 22. November 2021, das Moderationsteam, verantwortlich für die Durchsetzung der Gemeinschaftsstandards und der Verhaltenskodexkündigte ihren Rücktritt an, "aus Protest gegen das Kernteam, das sich für jeden außer sich selbst nicht rechenschaftspflichtiger platziert". Obwohl in den Ankündigungen keine weiteren Kommentare zu den Gründen für den Rücktritt abgegeben wurden, kommentierte eines der ehemaligen Mitglieder des Moderationsteams RedditMit der Aussage, dass "[C] -Imunikation mit dem Kern gescheitert ist, gibt es kein Team über dem Kern, also ... es liegt an den Mitgliedern des Rust-Projekts, sich selbst zu organisieren und zu entscheiden, was sie im Amtszeit tun sollen."[38]

Syntax und Semantik

Hallo Weltprogramm

Unten ist a "Hallo Welt!" Programm im Rost. Das println! Makro druckt die Nachricht an Standardausgabe.[39]

fn hauptsächlich() {   println!("Hallo Welt!"); } 

Schlüsselwörter und Steuerfluss

In Rost werden Codeblöcke von begrenzt geschweifte Klammern, und Steuerfluss wird mit Schlüsselwörtern wie z. wenn, anders, während, und zum.[40][41] Musteranpassung wird mit dem bereitgestellt match Stichwort.[42] In den folgenden Beispielen sind Erklärungen in angegeben Kommentaredie mit beginnen mit //.[43][41]

fn hauptsächlich() {   Lassen Mut Werte = VEC![1, 2, 3, 4];   zum Wert in &Werte {   println!("value = {}", Wert);   }   wenn Werte.Len() > 5 {   println!("Die Liste ist länger als fünf Elemente");   }   // Musteranpassung   passen Werte.Len() {   0 => println!("Leer"),   1 => println!("Ein Wert"),   2.. =10 => println!("Zwischen zwei und zehn Werten"),   11 => println!("Elf Werte"),   _ => println!("Viele Werte"),   };   // während der Schleife mit Prädikat und Musteranpassung mit LET   während Lassen Etwas(Wert) = Werte.Pop() {   println!("value = {value}"); // Verwenden von lockigen Zahnspangen, um eine lokale Variable zu formatieren   } } 

Ausdrucksblöcke

Trotz der syntaktischen Ähnlichkeit mit C und C ++,,[44][45] Das Design von Rust war stärker durch Funktionelle Programmierung Sprachen.[46] Zum Beispiel ist fast jeder Teil eines Funktionskörpers ein Ausdruck, sogar Steuerflussoperatoren.[41] Die Gewöhnlichen wenn Ausdruck tritt auch an die Stelle von Cs ternärer Bedingung. Eine Funktion muss nicht mit a enden Rückkehr Ausdruck: Wenn das Semikolon weggelassen wird, wird der Wert des letzten Ausdrucks in der Funktion als der verwendet Rückgabewert,[47] Wie im Folgenden gesehen rekursiv Implementierung der Fakultät Funktion:

fn Fakultät(i: U64) -> U64 {   wenn i == 0 {   1   } anders {   i * Fakultät(i - 1)   } } 

Folgende iterativ Implementierung verwendet die .. = Bediener zum Erstellen einer integrativen Reichweite:

fn Fakultät(i: U64) -> U64 {   (2.. =i).Produkt() } 

Typen

Rost ist stark tippt und statisch typisiert, wo alle Arten von Variablen während der Kompilierung bekannt sein müssen, und die Zuordnung eines Wertes eines anderen Typs einer Variablen führt zu einer Variablen Kompilierungsfehler. Der Standardgeistentyp ist i32und die Standardeinstellung schwimmender Punkt Typ ist f64. Die Art von a wörtlich wird entweder als Suffix angegeben oder gefolgert Aus dem Kontext.[48][41]

Zusammenfassung von Rust's eingebaute Typen
Typ Beschreibung Beispiele
bool Boolescher Wert
  • true
  • false
u8 Ohne Vorzeichen 8-Bit-Ganzzahl (a Byte))
  • 1 (Abgeleiteter Typ)
  • 255u8 (Explizite Typ)
  • b'W' (ASCII codiertes Byte)
  • i8
  • i16
  • i32
  • i64
  • i128
Zahlen unterschrieben, bis zu 128 Bit
  • 7i128 (Explizite Typ)
  • -42 (Abgeleiteter Typ)
  • u16
  • u32
  • u64
  • u128
Nicht signierte Ganzzahlen, bis zu 128 Bit
  • 14u128 (Explizite Typ)
  • 0 (Abgeleiteter Typ)
  • usize
  • isize
Zeiger-grünzte Ganzzahlen (Größe hängt davon ab Plattform))
  • 14usize (Explizite Typ)
  • -2isize (Explizite Typ)
  • 0 (Abgeleiteter Typ)
  • f32
  • f64
Gleitkommazahlen
  • -3f32 (Explizite Typ)
  • 2.0 (Abgeleiteter Typ)
char
&str Saiten (statisch oder unveränderlich))
  • "Hello"
  • "3"
  • ""
[T; N] Statische Arrays (Größe bei der Kompilierungszeit)
  • [2, 4, 6]
  • [0; 100]
  • b"Hello"
[T] Statische Arrays (Größe, die zur Kompilierungszeit nicht bekannt ist)
  • [1, 2, 3, 4, 5][..i]
  • "Hello, world!".as_bytes()
  • let v = vec![1, 2, 3]; v.as_slice()
  • (T1, T2)
  • (T1, T2, T3)
  • ...
Tupel
  • () (Ein leeres Tupel, das Gerätetyp im Rost)
  • (5,) (Wenn das war (5)Es wäre als Ganzzahl analysiert worden)
  • ("Age", 10)
  • (1, true, "Name")
  • &T
  • &mut T
Verweise (unveränderlich und veränderlich)
  • let x_ref = &x;
  • let x_ref = &mut x;
  • *const T
  • *mut T
  • let x_ptr = &x as *const T;
  • let x_ptr = &mut x as *mut T;
! Geben Sie niemals ein (unerreichbarer Wert) let x = { return 123 };

Im Gegensatz zu anderen Sprachen verwendet Rost nicht Nullzeiger Um einen Datenmangel anzuzeigen, kann dies dazu führen, dass dies dazu führen kann Zufällige Dereferenzierung. Um seine Sicherheitsgarantien aufrechtzuerhalten, können Null -Zeiger daher nicht Derferenziert werden, es sei denn unsicher Block.[50] Rost verwendet stattdessen eine Möglichkeit Typ, was zwei Varianten hat, Einige (t) (was anzeigt, dass ein Wert vorhanden ist) und Keiner (Analog zum Nullzeiger).[51] Möglichkeit Implementiert eine "Nullzeigeroptimierung", die einen Overhead für Typen vermeidet, der keinen Nullwert haben kann (Referenzen oder die Ungleich Null Typen zum Beispiel). Möglichkeit Werte müssen verwendet werden syntethischer Zucker so wie die Wenn Konstruktion, um auf den inneren Wert zuzugreifen (in diesem Fall eine Zeichenfolge):[52]

fn hauptsächlich() {   Lassen Name: Möglichkeit<Saite> = Keiner;   // Wenn der Name nicht wäre, würde er hier drucken.   wenn Lassen Etwas(Name) = Name {   println!("{}", Name);   } } 
Zusammenfassung der Arten von Rust in der Standardbibliothek
Typ Beschreibung Beispiele
Box Ein Wert in der Haufen Box::new(5)
String Saiten (dynamisch)
  • String::new()
  • String::from("Hello")
  • "".to_string()
Vec Dynamische Arrays
  • Vec::new()
  • vec![1, 2, 3, 4, 5]
Möglichkeit Optionstyp
  • None
  • Some(3)
  • Some("hello")
  • Option<&T>
  • Option<&mut T>
  • None
  • let x_ref = Some(&x);
  • let x_ref = Some(&mut x);
Ergebnis Fehlerbehandlung
  • Result::Ok(3)
  • Result::Err("something went wrong")

Generika

Zu den fortschrittlicheren Funktionen in Rost gehören die Verwendung von generische Funktionen erreichen Typ Polymorphismus.[53] Das Folgende ist ein Rostprogramm zur Berechnung der Summe von zwei Dingen, für die Addition unter Verwendung einer generischen Funktion implementiert wird:

verwenden std::Ops::Hinzufügen; // sum ist eine generische Funktion mit einem Typ -Parameter t, t fn Summe<T>(Num1: T, Num2: T) -> T wo     T: Hinzufügen<Ausgabe = T>,  // t muss das Hinzufügen von Merkmal implementieren, in dem Addition ein weiteres t zurückgibt {   Num1 + Num2  // Num1 + Num2 ist syntaktischer Zucker für Num1.add (Num2), das durch das ADD -Merkmal bereitgestellt wird } fn hauptsächlich() {   Lassen Ergebnis1 = Summe(10, 20);   println!("Summe ist: {}", Ergebnis1); // sum ist: 30   Lassen Ergebnis2 = Summe(10.23, 20.45);   println!("Summe ist: {}", Ergebnis2); // sum ist: 30.68 } 

Generika in Rost verwenden Merkmalen für ihre generischen Parameter, die genau definieren, was von einem Typ erforderlich ist, um mit einer bestimmten generischen Funktion verwendet zu werden. Auf diese Weise kann Generika in Rost zur Kompilierungszeit vom Typ überprüft werden, ohne die genauen Typen kennen zu müssen.[53]

Besitz und Lebenszeiten

Rust verwendet ein Eigentümersystem, bei dem jeder Wert einen einzigartigen Eigentümer hat. Die Werte werden zwischen verschiedenen Eigentümern durch Zuordnung oder als Funktionsparameter übertragen. Funktionen, die das Eigentum eines Parameters übernehmen, sollen den fraglichen Wert konsumieren. Der Rostbesitz ist ähnlich wie Semantik bewegen in C ++; Im Gegensatz zu C ++ verfolgt Rost jedoch bewegte Werte und alle Typen sind standardmäßig beweglich. Dies bedeutet, dass Rosttypen keinen "leeren" oder "ungültigen" Zustand (und entsprechenden Laufzeitprüfungen) implementieren müssen, um zu bedeuten :[54]

fn print_string(s: Saite) {   println!("{}", s); } fn hauptsächlich() {   Lassen s = Saite::aus("Hallo Welt");   print_string(s);  // s durch print_string konsumiert   // s wurde bewegt und kann also nicht mehr verwendet werden   // ein anderer print_string (s); würde zu einem Kompilierfehler führen } 

Lebensdauer sind ein normalerweise impliziter Teil von allen Referenztypen im Rost. Jede bestimmte Lebensdauer umfasst eine Reihe von Stellen in dem Code, für den eine Variable gültig ist. Der Ausleihe -Checker im Rost -Compiler verwendet Lebensdauer, um sicherzustellen, dass die durch eine Referenz verzeichneten Werte gültig bleiben. Es stellt auch sicher, dass eine veränderliche Referenz nur existiert, wenn keine unveränderlichen Referenzen gleichzeitig vorhanden sind.[53]

Rust definiert die Beziehung zwischen den Lebensdauern der verwendeten Objekte und erzeugt durch Funktionen als Teil ihrer Signatur verwendet Lebensdauerparameter. In Sprachen wie C oder C ++ werden die Informationen darüber, welche Objekte andere überleben müssen, informell in Dokumentation oder Kommentaren angegeben, falls überhaupt, und können vom Compiler nicht überprüft werden.[53]

Wenn eine Stapelvariable oder eine vorübergehende Umfang ausgeht, ist dies der Fall fallen gelassen durch Laufen Zerstörer, die implizit definiert werden können oder eine Programmierer-definierte "Drop" -Funktion. Letzteres kann für Entwurfsmuster verwendet werden Ressourcenerwerb ist die Initialisierung (Raii), in dem Ressourcen wie Dateideskriptoren oder Netzwerkhöhlen an die Lebensdauer eines Objekts gebunden sind: Wenn das Objekt fallen gelassen wird, wird die Ressource geschlossen.[55][56]

Das folgende Beispiel analysiert einige Konfigurationsoptionen aus einer Zeichenfolge und erstellt eine Struktur, die die Optionen enthält. Die Struktur enthält nur Verweise auf die Daten, so dass die von der Struktur genannten Daten auch gültig bleiben müssen. Die Funktionssignatur für "parse_config" gibt diese Beziehung explizit an. In diesem Beispiel sind die explizite Lebensdauer in neueren Rostversionen aufgrund der lebenslangen Elision unnötig, was ein Algorithmus ist, der Funktionen automatisch Lebensdauer zuweist, wenn sie trivial sind.[53]

verwenden std::Sammlungen::Hashmap; #[Abgeben (Debug)] // Diese Struktur hat einen Lebensdauerparameter, SRC. Der Name wird nur in der Definition der Struktur verwendet. Struktur Konfiguration<'src> {   Hostname: &'src str,   Nutzername: &'src str, } // Diese Funktion hat auch einen lebenslangen Parameter 'CFG. 'CFG ist an den Parameter "config" angeschlossen, der // stellt fest, dass die Daten in "Konfiguration" mindestens so lange wie die Lebensdauer des CFG leben. // Die zurückgegebene Struktur verwendet auch CFG für seine Lebensdauer, sodass sie höchstens so lange leben kann wie "CFG". fn Parse_config<'CFG>(Konfiguration: &'CFG str) -> Konfiguration<'CFG> {   Lassen key_values: Hashmap<_, _> = Konfiguration   .Linien()   .Filter(|Linie| !Linie.beginnt mit('#'))   .filter_map(|Linie| Linie.split_once('='))   .Karte(|(Schlüssel, Wert)| (Schlüssel.trimmen(),, Wert.trimmen()))   .sammeln();   Konfiguration {   Hostname: key_values["Hostname"],   Nutzername: key_values["Nutzername"],   } } fn hauptsächlich() {   Lassen Konfiguration = Parse_config(   R#"Hostname = Foobar Benutzername = Barfoo "#,   );   println!("Parsensed Config: {:#?}", Konfiguration); } 

Merkmale

Eine Präsentation über Rost von Emily Dunham von Mozilla's Rust -Team (Linux.conf.au Konferenz, Hobart, 2017)

Rost zielt darauf ab, die gleichzeitige Unterstützung zu unterstützen Systemprogrammierung, was ein Feature -Set mit Schwerpunkt auf Sicherheit, Kontrolle von inspiriert hat Speicherlayout, und Parallelität.[57]

Speichersicherheit

Rost soll sein Speicher sicher. Es erlaubt nicht Nullzeiger, Zeiger baumeln, oder Datenrennen.[58][59][60] Datenwerte können nur durch einen festen Satz von Formularen initialisiert werden, von denen alle ihre Eingaben bereits initialisiert werden müssen.[61] Zeiger zu replizieren, die entweder gültig sind oder NULL, wie in der verknüpften Liste oder Binärbaum DatenstrukturenDie Rust Core Library bietet eine Optionstyp, was verwendet werden kann, um zu testen, ob ein Zeiger hat Etwas Wert oder Keiner.[59] Rost hat die Syntax hinzugefügt, um es zu verwalten Lebensdauer, die zur Kompilierzeit von der überprüft werden Ausleihen Sie Checker aus. Unsicherer Code kann einige dieser Beschränkungen mit dem untergraben unsicher Stichwort.[50] Unsicherer Code kann auch für die Funktionalität auf niedriger Ebene verwendet werden Flüchtigen Speicherzugriff, Architekturspezifische Intrinsik, Geben Sie Punning einund Inline -Baugruppe, obwohl das letzte Merkmal als Rost 1,50 instabil ist.[62]

Speicherverwaltung

Rost verwendet nicht automatisiert Müllsammlung. Speicher und andere Ressourcen werden durch die verwaltet Ressourcenerwerb ist die Initialisierung Konvention,[63] mit optional Referenzzählung. Rust bietet ein deterministisches Management von Ressourcen mit sehr niedrig Überkopf.[64] Werte sind auf dem Stapel zugewiesen standardmäßig und alle Dynamische Zuteilungen muss explizit sein.[65]

Die integrierten Referenztypen verwenden die & Symbol beinhaltet keine Laufzeitreferenzzählung. Die Sicherheit und Gültigkeit der zugrunde liegenden Zeiger wird zum Kompilierungszeit überprüft und verhindert Zeiger baumeln und andere Formen von undefiniertes Verhalten. Das Typs Typs Typ trennt die gemeinsame Nutzung, unveränderlich Referenzen der Form &T aus einzigartigen, veränderlichen Referenzen der Form &Köter. Eine veränderliche Referenz kann zu einer unveränderlichen Referenz gezwungen werden, jedoch nicht umgekehrt.[54][66]

Typen und Polymorphismus

Rost Typ System Unterstützt einen Mechanismus genannt Züge, inspiriert von Geben Sie Klassen ein in dem Haskell Sprache. Merkmale kommentieren Typen und werden verwendet, um zu definieren gemeinsames Verhalten zwischen verschiedenen Typen. Zum Beispiel implementieren Schwimmer und Ganzzahlen beide die Hinzufügen Merkmal, weil beide hinzugefügt werden können; und jeder Typ, der als Zeichenfolge ausgedruckt werden kann, implementiert die Anzeige oder Debuggen Züge. Diese Einrichtung ist als bekannt als als Ad -hoc -Polymorphismus.[53]

Rost verwendet Geben Sie Inferenz ein Für Variablen, die mit dem deklariert sind Stichwort Lassen. Solche Variablen erfordern keinen Wert, der ursprünglich zugewiesen werden kann, um ihren Typ zu bestimmen. Ein Kompilierungszeitfehler ergibt sich, wenn ein Codezweig die Variable ohne Zuweisung verlässt.[67] Mehrmals zugewiesene Variablen müssen mit dem Schlüsselwort gekennzeichnet sein Mut (kurz für Mutable).[41]

Eine Funktion kann gegeben werden generisch Parameter, wodurch dieselbe Funktion auf verschiedene Typen angewendet werden kann. Generische Funktionen können den generischen Typ einschränken, um ein bestimmtes Merkmal oder eine bestimmte Merkmale zu implementieren. Beispielsweise erfordert eine Funktion "One" -Funktion möglicherweise den Typ zum Implementieren von "Add". Das bedeutet, dass a Generische Funktion Kann typisch überprüft werden, sobald es definiert ist. Die Implementierung von Rust Generics ähnelt der typischen Implementierung von C ++ - Vorlagen: Eine separate Kopie des Codes wird für jede Instanziierung generiert. Das nennt man Monomorphisierung und kontrastiert mit dem Typlase Schema, das typischerweise in Java und Haskell verwendet wird. Die Typ -Löschung von Rust ist auch mit dem Schlüsselwort verfügbar Dyn (kurz für Dynamik). Der Vorteil der Monomorphisierung ist für jeden spezifischen Anwendungsfall optimiert. Der Nachteil ist eine erhöhte Kompilierungszeit und -größe der resultierenden Binärdateien.[53]

In Rost werden benutzerdefinierte Typen mit dem erstellt Struktur oder Auflauf Schlüsselwörter. Das Struktur Schlüsselwort bezeichnet a Aufnahmetyp.[68] Auflaufs sind Arten von Algebraische Datentypen häufig in funktionalen Programmiersprachen gefunden. Diese Typen können enthalten Felder anderer Typen.[51] Das impl Schlüsselwort kann Methoden für die Typen definieren (Daten und Funktionen werden separat definiert) oder a implementieren a Merkmal für die Typen.[68] Merkmale werden verwendet, um generische Parameter einzuschränken, und weil Merkmale eine Struktur mit mehr Methoden liefern können als der Benutzer. Zum Beispiel das Merkmal Iterator erfordert, dass die nächste Methode für den Typ definiert werden. Einmal der nächste Die Methode wird definiert, das Merkmal bietet gemeinsame funktionale Helfermethoden über den Iterator wie Karte oder Filter.[53]

Typ -Aliase, einschließlich generischer Argumente, können auch mit dem definiert werden Typ Stichwort.[50]

Das Typ System Innerhalb von Rost basiert auf Implementierungen, Merkmalen und strukturierten Typen. Implementierungen erfüllen eine ähnliche Rolle wie Klassen in anderen Sprachen und sind mit dem Schlüsselwort definiert impl. Merkmale bieten Vererbung und Polymorphismus; Sie erlauben Methoden definiert werden und gemischt zu Implementierungen. Strukturierte Typen werden verwendet, um Felder zu definieren. Implementierungen und Merkmale können selbst nicht selbst definieren, und nur Merkmale können Vererbung liefern. Dies verhindert unter anderem die Diamantproblem von Mehrfacherbewie in C ++. Mit anderen Worten, Rost unterstützt die Vererbung der Schnittstelle, ersetzt jedoch die Implementierungserbranz durch Komposition; sehen Zusammensetzung über die Vererbung.[68][53]

Merkmalsobjekte

Rostmerkmale werden mit Verwendung implementiert statischer Versand, was bedeutet, dass der Typ aller Werte zur Kompilierungszeit bekannt ist; Rust verwendet jedoch auch eine Funktion, die als bekannt ist Merkmalsobjekte erreichen Dynamischer Versand (auch bekannt als Ententypisierung).[69] Dynamisch versandte Merkmalsobjekte werden mit der Syntax deklariert Kasten wo Tr ist ein Merkmal. Beispielsweise ist es möglich, eine Liste von Objekten zu erstellen, die jeder wie folgt ausgedruckt werden kann: Sei V: VEC> = vec! [Box :: New (3), Box :: New (5.0), Box :: New ("Hi")].[69] Merkmalsobjekte sind dynamisch dimensioniert; Vor 2015 jedoch die Dyn Schlüsselwort war optional.[70] Ein Merkmalsobjekt ist im Wesentlichen a Fettzeiger Dazu gehören ein Zeiger sowie zusätzliche Informationen darüber, welcher Typ der Zeiger ist.[71]

Makros

Es ist möglich, die Rostsprache mithilfe der Rost -Sprache zu erweitern Makros.

Deklarative Makros

Deklarative Makros (auch als Beispiel Makros genannt) sind Makros, die verwendet werden Musteranpassung seine Expansion bestimmen.[50]

Verfahrensmakros

Verfahrensmakros verwenden Rostfunktionen, die vor anderen Komponenten kompiliert werden, um den Eingang des Compilers auszuführen und zu ändern Zeichen Strom. Sie sind im Allgemeinen flexibler als deklarative Makros, sind jedoch aufgrund ihrer Komplexität schwieriger zu bewahren.[72][50]

Verfahrensmakros sind in drei Geschmacksrichtungen erhältlich:

  • Funktionsähnliche Makros Brauch!(...)
  • Makros ableiten #[Abgeben (CustomDerive)]
  • Attribut Makros #[Custom_attribute]

Das println! Makro ist ein Beispiel für ein funktionsähnliches Makro und serde_derive[73] ist eine häufig verwendete Bibliothek zum Generieren von Code zum Lesen und Schreiben von Daten in vielen Formaten wie z. JSON. Attribut -Makros werden üblicherweise für Sprachbindungen wie die verwendet Extendr Bibliothek für Rostbindungen an R.[74]

Der folgende Code zeigt die Verwendung des Serialisieren, Deserialisieren und Debuggen Leiten Sie prozedurale Makros zum Implementieren von JSON -Lesen und -schreiben sowie die Fähigkeit, eine Struktur für das Debuggen zu formatieren.

verwenden serde_json::{Serialisieren, Deserialisieren}; #[Abgeben (Serialize, Deserialize, Debugg)] Struktur Punkt {   x: i32,   y: i32, } fn hauptsächlich() {   Lassen Punkt = Punkt { x: 1, y: 2 };   Lassen serialisiert = serde_json::to_string(&Punkt).auspacken();   println!("Serialized = {}", serialisiert);   Lassen deserialisiert: Punkt = serde_json::von_str(&serialisiert).auspacken();   println!("Deserialized = {:?}", deserialisiert); } 

Schnittstelle mit C und C ++

Rost hat a Fremdenfunktionsschnittstelle (FFI), mit dem beide in Sprachen wie geschriebene Code wie z. B. verwendet werden können C von Rost und Rostcode aus diesen Sprachen anrufen. Rust hat auch eine Bibliothek, CXX, zum Anrufen von oder von C ++.[75] Rost und C unterscheiden #[repr (c)] Attribut, das gleiche Layout wie die äquivalente C -Struktur erzwingen.[76]

Komponenten

Zusammenstellung eines Rostprogramms mit Fracht

neben dem Compiler und StandardbibliothekDas Rust -Ökosystem enthält zusätzliche Komponenten für die Softwareentwicklung. Die Installation der Komponenten wird normalerweise von verwaltet Rostup, ein Rost Toolchain Installateur entwickelt vom Rust Project.[77]

Ladung

Screenshot of crate.io im Juni 2022

Fracht ist Rust's System aufbauen und Paket-Manager. Cargo -Downloads, kompiliert, verteilt und lädt Pakete hoch, genannt Kisten, im offiziellen Register gepflegt. Fracht fungiert auch als Frontend für Clippy- und andere Rostkomponenten.[10]

Standardmäßig bezieht Fracht ihre Abhängigkeiten von der vom Benutzer kontributierten Registrierung crates.io, aber Git Repositorys und Kisten im lokalen Dateisystem und in anderen externen Quellen können ebenfalls als Abhängigkeiten angegeben werden.[78]

Rustfmt

Rustfmt ist a Codeformatierer für Rost. Es dauert Rust -Quellcode als Eingabe und ändert die Whitespace und Vertiefung zu erzeugen Code, die gemäß einer gemeinsamen Formatierung formatiert werden Stil wenn nicht anders angegeben. Rustfmt kann als eigenständiges Programm oder bei einem Rust -Projekt über Fracht angerufen werden.[79]

Clippy

Beispielausgabe von Clippy auf einem Hello World Rust -Programm

Clippy ist Rust's eingebaut Linie Werkzeug zur Verbesserung der Richtigkeit, Leistung und Lesbarkeit von Rostcode. Es wurde 2014 erstellt[80] und nach dem benannt gleichnamige Microsoft Office -Funktion.[81] Ab 2021 hat Clippy mehr als 450 Regeln,[82] Dies kann online durchsucht und nach Kategorie gefiltert werden.[83][79]

Versioningsystem

Nach Rost 1.0 werden neue Funktionen entwickelt in nächtlich Versionen, die täglich veröffentlicht werden. In jedem Release -Zyklus von sechs Wochen werden Änderungen in nächtlichen Versionen für Beta veröffentlicht, während Änderungen aus der vorherigen Beta -Version in einer neuen stabilen Version veröffentlicht werden.[84]

Alle drei Jahre wird eine neue "Ausgabe" produziert. Ausgaben werden freigegeben, um einen einfachen Bezugspunkt für Änderungen aufgrund der häufigen Natur von Rust zu bieten Zugveröffentlichungsplan, Zeitplan für den Zug, und um ein Fenster bereitzustellen, um begrenzt zu werden Veränderungen brechen. Editionen sind weitgehend kompatibel und die Migration in eine neue Ausgabe ist mit automatisierter Werkzeuge trivialisiert.[85]

IDE -Unterstützung

Die beliebtesten Sprachserver Denn Rost ist Rost-Analyzer.[79] Der Originalsprachserver, Rls wurde offiziell zugunsten von veraltet Rost-Analyzer Im Juli 2022.[86] Diese Projekte bieten Ides und Textredakteure Mit weiteren Informationen zu einem Rust -Projekt mit grundlegenden Funktionen einschließlich der Funktionen Autoperationund Anzeige von Kompilierungsfehler während der Bearbeitung.[79]

Leistung

Rost zielt "so effizient und tragbar wie idiomatisch C ++, ohne die Sicherheit zu opfern ".[87] Rost bietet zwei Modi: sicher und unsicher. Im unsicheren Modus ist der Entwickler für die Richtigkeit des Codes verantwortlich. Dies ermöglicht es, leistungsstarke Anwendungen zu erstellen, für die möglicherweise Merkmale auf niedrigem Niveau erforderlich sind.[88] Außerdem funktioniert Rost nicht Müllsammlung, was es ermöglicht, effizienter und leistungsfähiger zu sein als andere Speichersprachen.[89]

Viele von Rusts Merkmalen sind so genannt Zero-Kosten-AbstraktionenDies bedeutet, dass sie zur Kompilierungszeit optimiert werden und keine Laufzeitstrafe entstehen.[90] Da Rost verwendet LlvmDie Leistungsverbesserungen in LLVM übertragen ebenfalls auf Rost.[91] Im Gegensatz zu C und C ++ ermöglicht Rost die Wiedereinorganisierung von Strukturen und die Bestellung für Enum-Elemente.[92] Dies kann getan werden, um die Größe der Strukturen im Gedächtnis zu verringern, für eine bessere Speicherausrichtung und um sich zu verbessern Zwischenspeicher Zugangseffizienz.[93]

Annahme

Laut dem Paketüberfluss Die Entwicklerumfrage Im Jahr 2022 haben 9% der Befragten kürzlich eine umfassende Entwicklung in Rost durchführen.[94] Die Umfrage wurde von 2016 bis 2022 (inklusive) jedes Jahr als "am meisten beliebte Programmiersprache" bezeichnet.[95][Anmerkung 4] Im Jahr 2022, Rost mitgebunden mit Python Für "meistgesuchte Technologie", mit 18% der Entwickler, die derzeit nicht in Rost arbeiten, um Interesse daran zu haben.[94][96]

Rust wurde für Komponenten in einer Reihe großer Softwareunternehmen, einschließlich Amazonas,[97][98] Zwietracht,[99] Dropbox,[100] Facebook (Meta),[101] Google (Alphabet),[102][36] und Microsoft.[103][104]

Webbrowser und Dienste

Frühe Homepage von Mozillas Servo -Browser -Motor

Betriebssysteme

exa, eine Command-Line-Alternative zu ls, in Rost geschrieben
  • Redox ist ein "ausgewachsenes Unix-ähnliches Betriebssystem" einschließlich a Mikrokernel Geschrieben in Rost.[114]
  • Theseus, ein experimentelles Betriebssystem, das als "intralierendes Design" bezeichnet wird: Nutzung der Programmiersprachenmechanismen von Rust für die Implementierung des Betriebssystems.[115]
  • Das Google Fuchsia Funktionsbasiertes Betriebssystem enthält Komponenten in Rost.[116] einschließlich eines TCP/IP Bibliothek. [117]
  • Stratis ist ein Dateisystem Manager in Rost für Fedora[118] und Rhel.[119]
  • exa ist eine Unix/Linux -Befehlszeilenalternative zu Unix/Linux ls Geschrieben in Rost.
  • Seit 2021 gibt es eine Patch -Serie zum Hinzufügen von Rostunterstützung zum Linux -Kernel.[120]

Andere bemerkenswerte Projekte und Plattformen

Rüschen, ein Web -Emulator für Adobe Flash SWF Dateien

Gemeinschaft

A bright orange crab icon
Einige Rost -Benutzer bezeichnen sich als Rustaceane (ein Wortspiel auf Krustentier) und eine orangefarbene Krabbe, Ferris, als inoffizielles Maskottchen annehmen.[126]

Konferenzen

Die offizielle Website von Rust listet Online-Foren, Messaging-Plattformen und persönliche Meetups für die Rust-Community auf.[127] Zu den Konferenzen, die der Rostentwicklung gewidmet sind, gehören:

Rust Foundation

Rust Foundation
Rust Foundation logo.png
Formation 8. Februar 2021; Vor 17 Monaten
Gründer
Typ Gemeinnützige Organisation
Ort
Shane Miller
Rebecca Rumbul
Webseite Stiftung.Rust-Lang.org

Das Rust Foundation ist ein gemeinnützig Mitgliedschaftsorganisation eingebaut in Vereinigte Staatenmit den primären Zwecken, das technische Projekt zu unterstützen juristische Person und helfen, die zu verwalten Warenzeichen und Infrastrukturvermögen.[134][45]

Es wurde am 8. Februar 2021 mit fünf Gründungsunternehmen (Amazon Web Services, Huawei, Google, Microsoft und Mozilla) gegründet.[135] Das Board der Stiftung wird von Shane Miller geleitet.[136] Ab Ende 2021 ist sein Exekutivdirektor und CEO Rebecca Rumbul.[137] Zuvor war Ashley Williams Interim Executive Director.[138]

Governance -Teams

Das Rust -Projekt besteht aus Teams die für verschiedene Teilbereiche der Entwicklung verantwortlich sind. Zum Beispiel ist das Kernteam für die "Verwaltung der allgemeinen Richtung von Rost, Subtam-Führung und Querschnittsproblemen" verantwortlich Laut der offiziellen Website "Entwerfen und Hilfe bei der Implementierung neuer Sprachfunktionen".[139][140]

Siehe auch

Anmerkungen

  1. ^ Einschließlich Build -Tools, Host -Tools und Standardbibliotheksunterstützung für x86-64, ARM, MIPS, Risc-v, WebAssembly, i686, Aarch64, Powerpc, und S390X.[2]
  2. ^ Einschließlich Fenster, Linux, Mac OS, Freebsd, Netbsd, und Illumos. Host -Build -Tools auf Android, iOS, Haiku, Redox, und Fuchsie werden nicht offiziell verschifft; Diese Betriebssysteme werden als Ziele unterstützt.[2]
  3. ^ Eine vollständige Liste finden Sie unter[4]
  4. ^ Das heißt, bei Befragten, die im vergangenen Jahr "umfangreiche Entwicklungsarbeiten [mit Rost] im vergangenen Jahr" (9,3%) durchgeführt haben, hatte Rust den größten Prozentsatz, der auch Interesse bekundete, "in [Rust] im nächsten Jahr zu arbeiten" (87 %).[94]

Verweise

  1. ^ "Ankündigung von Rost 1.62.1".
  2. ^ a b c d "Plattformunterstützung". Das Rustc -Buch. Abgerufen 2022-06-27.
  3. ^ a b c "Anhang: Einflüsse". Die Rostreferenz. Archiviert vom Original am 2019-01-26. Abgerufen 2018-11-11.
  4. ^ "Einzigartigkeitstypen". Idris 1.3.3 Dokumentation. Abgerufen 2022-07-14. Sie sind inspiriert von ... Eigentümertypen und geliehenen Zeiger in der Rust -Programmiersprache.
  5. ^ Jaloyan, Georges-Achel (2017-10-19). "Safe Zeiger in Spark 2014". Arxiv:1710.07047 [cs.pl]. Bibcode:2017ArXIV171007047J doi:10.48550/arxiv.1710.07047
  6. ^ Lattner, Chris. "Chris Lattners Homepage". Nondot.org. Archiviert vom Original am 2018-12-25. Abgerufen 2019-05-14.
  7. ^ "Microsoft eröffnet die von Rost inspirierte Projektverona-Programmiersprache auf GitHub". ZDNET. Archiviert vom Original am 2020-01-17. Abgerufen 2020-01-17.
  8. ^ Quentin, Ochem. "Rost und Spark: Softwarezuverlässigkeit für alle". Elektronisches Design. Abgerufen 2022-06-22.
  9. ^ a b c Perkel, Jeffrey M. (2020-12-01). "Warum Wissenschaftler Rost zuwenden". Natur. 588 (7836): 185–186. Bibcode:2020Natur.588..185p. doi:10.1038/d41586-020-03382-2. PMID 33262490. S2CID 227251258. Archiviert vom Original am 2022-05-06. Abgerufen 2022-05-15.
  10. ^ a b c d Balasubramanian, Abhiram; Baranowski, Marek S.; Burtsev, Anton; Panda, Aurojit; Rakamarić, Zvonimir; Ryzhyk, Leonid (2017-05-07). "Systemprogrammierung in Rost: Beyond Safety". Verfahren des 16. Workshops zu heißen Themen in Betriebssystemen. Hotos '17. New York, NY, USA: Vereinigung für Computermaschinen: 156–161. doi:10.1145/3102980.3103006. ISBN 978-1-4503-5068-6. S2CID 24100599. Archiviert vom Original am 2022-06-11. Abgerufen 2022-06-01.
  11. ^ Yegulalp, Serdar (2021-10-06). "Was ist die Rostsprache? Sicher, schnell und einfach Softwareentwicklung". InfoWorld. Abgerufen 2022-06-25.
  12. ^ Shamrell-Harrington, Nell. "Der Rost -Ausleihenkuchen - ein tiefer Tauchgang". Infoq. Abgerufen 2022-06-25.
  13. ^ Blanco-Cuaresma, Sergi; Bolmont, Emeline (2017-05-30). "Was kann die Programmiersprache Rost für Astrophysik tun?". Verfahren der Internationalen Astronomischen Union. 12 (S325): 341–344. Arxiv:1702.02951. Bibcode:2017IAUS..325..341b. doi:10.1017/s1743921316013168. ISSN 1743-9213. S2CID 7857871.
  14. ^ a b Asay, Matt (2021-04-12). "Rust, nicht Firefox, ist Mozillas größter Branchenbeitrag". TechRepublic. Abgerufen 2022-07-07.
  15. ^ Bright, Peter (2013-04-03). "Samsung hat sich mit Mozilla zusammengetan, um den Browsermotor für Multicore -Maschinen zu bauen". ARS Technica. Archiviert vom Original am 2016-12-16. Abgerufen 2013-04-04.
  16. ^ "Rost | Tiobe - die Softwarequalitätsfirma". www.tiobe.com. Archiviert vom Original am 2022-03-03. Abgerufen 2022-05-15.
  17. ^ "Informatiker beweisen Sicherheitsansprüche des Programmiersprachenrosts". Eurkalert!. Archiviert vom Original am 2022-02-24. Abgerufen 2022-05-15.
  18. ^ Jung, Ralf; Jourdan, Jacques-Henri; Krebbers, Robbert; Dreyer, Derek (2017-12-27). "Rustbelt: Sicherung der Grundlagen der Rost -Programmiersprache". Verfahren der ACM auf Programmiersprachen. 2 (Popl): 66: 1–66: 34. doi:10.1145/3158154. S2CID 215791659. Archiviert vom Original am 2022-06-11. Abgerufen 2022-05-15.
  19. ^ Jung, Ralf (2020). Die Rost -Programmiersprache verstehen und weiterentwickeln (Doktorarbeit). Saarland University. doi:10.22028/d291-31946. Archiviert vom Original am 2022-03-08. Abgerufen 2022-05-15.
  20. ^ Hoare, Graydon (2010-07-07). Projektservo (PDF). Mozilla Annual Summit 2010. Whistler, Kanada. Archiviert (PDF) vom Original am 2017-07-11. Abgerufen 2017-02-22.
  21. ^ Brian, Anderson (2012-01-20). "[Rost-dev] Der Rost Compiler 0.1 wird entfesselt". Archiviert vom Original am 2014-09-05. Abgerufen 2022-05-18.
  22. ^ Hoare, Graydon (2012-03-29). "[Rost-dev] Rost 0,2 freigelassen". Mail.mozilla.org. Abgerufen 2022-06-12.
  23. ^ Hoare, Graydon (2012-07-12). "[Rost-dev] Rost 0,3 freigelassen". Mail.mozilla.org. Abgerufen 2022-06-12.
  24. ^ Hoare, Graydon. "[Rost-dev] Rost 0,4 freigelassen". Mail.mozilla.org. Archiviert vom Original am 2021-10-31. Abgerufen 2021-10-31.
  25. ^ Duarte, José; Ravara, António (2021-09-27), "Setrofitieren von Schreiben in Rost", 25. brasilianisches Symposium für Programmiersprachen, New York, NY, USA: Verband für Computermaschinen, S. 83–91, doi:10.1145/3475061.3475082, ISBN 978-1-4503-9062-0, S2CID 238359093, abgerufen 2022-07-12
  26. ^ Binstock, Andrew. "Der Aufstieg und Fall der Sprachen im Jahr 2013". Dr. Dobbs. Archiviert vom Original am 2016-08-07. Abgerufen 2015-12-11.
  27. ^ "Versionsgeschichte". GitHub. Archiviert vom Original am 2015-05-15. Abgerufen 2017-01-01.
  28. ^ Das Rust Core-Team (2015-05-15). "Rost 1.0 ankündigen". Rust Blog. Archiviert vom Original am 2015-05-15. Abgerufen 2015-12-11.
  29. ^ Cimpanu, Catalin (2020-08-11). "Mozilla legt 250 Mitarbeiter aus, während es sich auf kommerzielle Produkte neu ausfindet". ZDNET. Archiviert vom Original am 2022-03-18. Abgerufen 2020-12-02.
  30. ^ Cooper, Daniel (2020-08-11). "Mozilla legt aufgrund der Pandemie 250 Mitarbeiter ab". Engadget. Archiviert vom Original am 2020-12-13. Abgerufen 2020-12-02.
  31. ^ Tung, Liam. "Programmiersprache Rost: Mozilla Job -Schnitte haben uns schlecht getroffen, aber hier ist, wie wir überleben werden.". ZDNET. Archiviert vom Original am 2022-04-21. Abgerufen 2022-04-21.
  32. ^ "Die Grundlage für Rusts Zukunft legen". Rust Blog. 2020-08-18. Archiviert vom Original am 2020-12-02. Abgerufen 2020-12-02.
  33. ^ "Hallo Welt!". Rust Foundation. 2020-02-08. Archiviert vom Original am 2022-04-19. Abgerufen 2022-06-04.
  34. ^ "Mozilla begrüßt die Rust Foundation". Mozilla Blog.2021-02-09. Archiviert vom Original am 2021-02-08. Abgerufen 2021-02-09.
  35. ^ a b "Rost in der Android -Plattform". Google Online -Sicherheitsblog. Archiviert vom Original am 2022-04-03. Abgerufen 2022-04-21.
  36. ^ Amadeo, Ron (2021-04-07). "Google schreibt jetzt einen Android-Code auf niedrigem Niveau in Rust". ARS Technica. Archiviert vom Original am 2021-04-08. Abgerufen 2021-04-08.
  37. ^ Anderson, Tim (2021-11-23). "Das gesamte Rost -Moderation -Team tritt zurück". Das Register. Abgerufen 2022-08-04.
  38. ^ Klabnik, Steve; Nichols, Carol (2019-08-12). "Kapitel 1: Erste Schritte". Die Rust -Programmiersprache (Cover Rust 2018). Keine Stärkepresse. ISBN 978-1-7185-0044-0.
  39. ^ "Kontrollfluss". Die Rost -Programmiersprache. Abgerufen 2022-07-14.
  40. ^ a b c d e f Klabnik, Steve; Nichols, Carol (2019-08-12). "Kapitel 3: Gemeinsame Programmierkonzepte". Die Rust -Programmiersprache (Cover Rust 2018). Keine Stärkepresse. ISBN 978-1-7185-0044-0.
  41. ^ "Das Übereinstimmungsstromkonstrukt". Die Rost -Programmiersprache. Abgerufen 2022-07-14.
  42. ^ "Kommentare". Die Rost -Programmiersprache. Abgerufen 2022-07-14.
  43. ^ Provenen, Liam (2019-11-27). "Rebecca Rumbul ernannte den neuen CEO der Rust Foundation". www.theregister.com. Abgerufen 2022-07-14. Beide sind lockige Klammersprachen mit C-ähnlicher Syntax, die sie für C-Programmierer unerschütterlich macht.
  44. ^ a b Brandon Vigliarolo (2021-02-10). "Die Rust -Programmiersprache hat jetzt eine eigene unabhängige Grundlage". TechRepublic. Abgerufen 2022-07-14.
  45. ^ Klabnik, Steve; Nichols, Carol (2019-08-12). "Kapitel 13: Funktionale Sprachmerkmale: Iteratoren und Verschlüsse". Die Rust -Programmiersprache (Cover Rust 2018). Keine Stärkepresse. ISBN 978-1-7185-0044-0.
  46. ^ Tyson, Matthew (2022-03-03). "Rost -Programmierung für Java -Entwickler". InfoWorld. Abgerufen 2022-07-14.
  47. ^ "Datentypen". Die Rost -Programmiersprache. Abgerufen 2022-07-14.
  48. ^ "Texttypen". Die Rostreferenz. Abgerufen 2022-06-12.
  49. ^ a b c d e Klabnik, Steve; Nichols, Carol (2019-08-12). "Kapitel 19: Advanced Features". Die Rust -Programmiersprache (Cover Rust 2018). Keine Stärkepresse. ISBN 978-1-7185-0044-0.
  50. ^ a b Klabnik, Steve; Nichols, Carol (2019-08-12). "Kapitel 6: Enums und Muster Matching". Die Rust -Programmiersprache (Cover Rust 2018). Keine Stärkepresse. ISBN 978-1-7185-0044-0.
  51. ^ McNamara, Tim (2021-08-10). Rost in Aktion. Ein O'Reilly Media Company Safari (1. Aufl.). ISBN 9781617294556. OCLC 1268279410.
  52. ^ a b c d e f g h i Klabnik, Steve; Nichols, Carol (2019-08-12). "Kapitel 10: Generische Typen, Merkmale und Lebenszeiten". Die Rust -Programmiersprache (Cover Rust 2018). Keine Stärkepresse. ISBN 978-1-7185-0044-0.
  53. ^ a b Klabnik, Steve; Nichols, Carol (2019-08-12). "Kapitel 4: Eigentum verstehen". Die Rust -Programmiersprache (Cover Rust 2018). Keine Stärkepresse. ISBN 978-1-7185-0044-0.
  54. ^ "Drop in std :: ops - rost". doc.rustlang.org. Abgerufen 2022-07-16.
  55. ^ Gomez, Guillaume; Boucher, Antoni (2018). "Raii". Rostprogrammierung durch Beispiel (First Ed.). Birmingham, Großbritannien. p. 358. ISBN 9781788390637.
  56. ^ Avram, Abel (2012-08-03). "Interview über Rust, eine von Mozilla entwickelte Systemprogrammiersprache". Infoq. Archiviert vom Original am 2013-07-24. Abgerufen 2013-08-17.
  57. ^ Rosenblatt, Seth (2013-04-03). "Samsung schließt sich Mozillas Suche nach Rost an". CNET. Archiviert vom Original am 2013-04-04. Abgerufen 2013-04-05.
  58. ^ a b Brown, Neil (2013-04-17). "Ein Geschmack von Rost". Archiviert vom Original am 2013-04-26. Abgerufen 2013-04-25.
  59. ^ "Rennen - das Rustonomie". doc.rustlang.org. Archiviert vom Original am 2017-07-10. Abgerufen 2017-07-03.
  60. ^ "Die FAQ der Rostsprache". static.rustlang.org. 2015. archiviert von das Original Am 2015-04-20. Abgerufen 2017-04-24.
  61. ^ McNamara, Tim (2021). Rost in Aktion (1. Aufl.). S. 139, 376–379, 395. ISBN 9781617294556.
  62. ^ "Raii - Rost für Beispiel". doc.rustlang.org. Archiviert vom Original am 2019-04-21. Abgerufen 2020-11-22.
  63. ^ "Abstraktion ohne Overhead: Merkmale im Rost". Rust Blog. Archiviert vom Original am 2021-09-23. Abgerufen 2021-10-19.
  64. ^ "Box, Stack und Haufen". Rost für Beispiel. Abgerufen 2022-06-13.
  65. ^ Klabnik, Steve; Nichols, Carol (2019-08-12). "Kapitel 15: Smart Zeiger". Die Rust -Programmiersprache (Cover Rust 2018). Keine Stärkepresse. ISBN 978-1-7185-0044-0.
  66. ^ Walton, Patrick (2010-10-01). "Rostfunktionen ich: Typ Inference". Archiviert Aus dem Original am 07.07.2011. Abgerufen 2011-01-21.
  67. ^ a b c Klabnik, Steve; Nichols, Carol (2019-08-12). "Kapitel 5: Verwenden von Strukturen zu strukturbezogenen Daten". Die Rust -Programmiersprache (Cover Rust 2018). Keine Stärkepresse. ISBN 978-1-7185-0044-0.
  68. ^ a b "Verwenden von Merkmalobjekten, die Werte verschiedener Typen ermöglichen - der Rost -Programmiersprache". doc.rustlang.org. Abgerufen 2022-07-11.
  69. ^ "Trait -Objekttypen - die Rostreferenz". doc.rustlang.org. Abgerufen 2022-07-11.
  70. ^ Vanhattum, Alexa; Schwartz-Narbonne, Daniel; Chong, Nathan; Sampson, Adrian (2022). "Überprüfen dynamischer Merkmalsobjekte in Rost". 2022 IEEE/ACM 44. Internationale Konferenz für Software Engineering: Software Engineering in Practice (ICSE-Seip). Abschnitt 2 (S. 322–324). doi:10.1109/icse-sep55303.2022.9794041. ISBN 978-1-6654-9590-5. S2CID 247148388.
  71. ^ "Verfahrensmakros". Die Rost -Programmiersprache Referenz. Archiviert vom Original am 2020-11-07. Abgerufen 2021-03-23.
  72. ^ "Serde leiten" ab ". Serde leiten Dokumentation ab. Archiviert vom Original am 2021-04-17. Abgerufen 2021-03-23.
  73. ^ "extendr_api - rost". Dokumentation der Extendr -API. Archiviert vom Original am 2021-05-25. Abgerufen 2021-03-23.
  74. ^ "Sichere Interoperabilität zwischen Rost und C ++ mit CXX". Infoq. 2020-12-06. Archiviert vom Original am 2021-01-22. Abgerufen 2021-01-03.
  75. ^ "Typ Layout - die Rostreferenz". doc.rustlang.org. Abgerufen 2022-07-15.
  76. ^ 樽井, 秀人 (2022-07-13). "「 Rost 」言語 インストーラー「 「「 「「 」が「 visual studio 2022 」自動 導入 に 対応 / / / / / / / / / / 手順 手順 で お 手軽 セットアップ セットアップ セットアップ どの プラットフォーム で で も も 手軽 セットアップ セットアップ セットアップ セットアップ セットアップ プラットフォーム で も も 通 通 / 手軽 セットアップ セットアップ セットアップ セットアップ プラットフォーム で も も 通 通 / で 手軽 セットアップ セットアップ セットアップ プラットフォーム で も も 通 通 通 / で セットアップ セットアップ セットアップ どの で も 通 通 通 通 の の 手順 セットアップ セットアップ セットアップ セットアップ どの も も 通 の 手順 手順 手順 で お 手軽 セットアップ セットアップ セットアップ 手軽 手軽 手軽 手軽 手軽. 窓 の 杜 (auf Japanisch). Abgerufen 2022-07-14.
  77. ^ Simone, Sergio DE (2019-04-18). "Rust 1.34 führt alternative Register für nicht öffentliche Kisten ein". Infoq. Abgerufen 2022-07-14.
  78. ^ a b c d Klabnik, Steve; Nichols, Carol (2019-08-12). "Anhang D - Tools für nützliche Entwicklung". Die Rust -Programmiersprache (Cover Rust 2018). Keine Stärkepresse. ISBN 978-1-7185-0044-0.
  79. ^ "Erstellen Sie Readme.md · Rust-Lang/Rust-Clippy@507DC2B". GitHub. Archiviert vom Original am 2021-11-22. Abgerufen 2021-11-22.
  80. ^ "Tag 1 - Frachtunterbefehle | 24 Tage Rost". ZsiciARZ.github.io. Archiviert vom Original am 2022-04-07. Abgerufen 2021-11-22.
  81. ^ "Rost-Lang/Rost-Clippy". GitHub. Archiviert vom Original am 2021-05-23. Abgerufen 2021-05-21.
  82. ^ "Alle Clippy -Lints". Archiviert vom Original am 2021-05-22. Abgerufen 2021-05-22.
  83. ^ Klabnik, Steve; Nichols, Carol (2019-08-12). "Anhang G - Wie Rost gemacht wird und" nächtlicher Rost "". Die Rust -Programmiersprache (Cover Rust 2018). Keine Stärkepresse. ISBN 978-1-7185-0044-0.
  84. ^ Klabnik, Steve; Nichols, Carol (2019-08-12). "Anhang E - Ausgaben". Die Rust -Programmiersprache (Cover Rust 2018). Keine Stärkepresse. ISBN 978-1-7185-0044-0.
  85. ^ Anderson, Tim (2022-07-05). "Rust Team veröffentlicht 1.62 und legt das Enddatum für veraltete Sprachserver fest". Devlass. Abgerufen 2022-07-14.
  86. ^ Walton, Patrick (2010-12-05). "C ++ Designziele im Kontext von Rost". Archiviert vom Original am 2010-12-09. Abgerufen 2011-01-21.
  87. ^ "Rostprojekte - Warum große IT -Unternehmen Rost verwenden?".{{}}: CS1 Wartung: URL-Status (Link)
  88. ^ Anderson, Tim. "Kann Rost den Planeten retten? Warum und warum nicht". Das Register. Abgerufen 2022-07-11.
  89. ^ McNamara, Tim (2021). Rost in Aktion (1. Aufl.). p. 19,98. ISBN 9781617294556.
  90. ^ "Wie schnell ist Rost?". Die Rost -Programmiersprache FAQ. Archiviert vom Original am 2020-10-28. Abgerufen 2019-04-11.
  91. ^ Farshin, Alireza; Barbette, Tom; Roozbeh, Amir; Maguire Jr., Gerald Q.; Kostić, Dejan (2021). Paketmühle: Auf dem Weg zu pro Kern 100-Gbit / s-Netzwerk. ACM -Konferenzen. S. 1–17. doi:10.1145/3445814.3446724. ISBN 9781450383172. S2CID 231949599. Abgerufen 2022-07-12. ... Während einige Compiler (z. B. Rost-) Struktur -Neuordnung [82] unterstützen, ist es C & C ++ Compilern verboten, Datenstrukturen (z. B. Struktur oder Klasse) neu zu ordnen [74] ...
  92. ^ "Layout eingeben". Die Rostreferenz. Abgerufen 2022-07-14.
  93. ^ a b c "Stack Overflow Developer Survey 2022". Paketüberfluss. Abgerufen 2022-06-22.
  94. ^ Claburn, Thomas (2022-06-23). "Linus Torvalds sagt, Rost kommt zum Linux -Kernel". Das Register. Abgerufen 2022-07-15.
  95. ^ Wachtel, Jessica (2022-06-27). "Stack Overflow: Rost bleibt am liebsten, aber Clojure zahlt das Beste aus". Der neue Stapel. Abgerufen 2022-07-14.
  96. ^ "Warum AWS Rost liebt und wie wir helfen möchten". Amazon Web Services. 2020-11-24. Archiviert vom Original am 2020-12-03. Abgerufen 2022-04-21.
  97. ^ "Wie unser AWS -Rust -Team zu den zukünftigen Erfolgen von Rust beitragen wird". Amazon Web Services. 2021-03-03. Archiviert vom Original am 2022-01-02. Abgerufen 2022-01-02.
  98. ^ a b Howarth, Jesse (2020-02-04). "Warum Zwietracht von Go to Rost wechselt". Archiviert vom Original am 2020-06-30. Abgerufen 2020-04-14.
  99. ^ Das Dropbox Capture -Team. "Warum wir eine benutzerdefinierte Rostbibliothek zur Aufnahme erstellt haben". Dropbox.tech. Archiviert vom Original am 2022-04-06. Abgerufen 2022-04-21.
  100. ^ "Eine kurze Geschichte von Rost bei Facebook". Engineering bei Meta. 2021-04-29. Archiviert vom Original am 2022-01-19. Abgerufen 2022-04-21.
  101. ^ Amadeo, Ron (2021-04-07). "Google schreibt jetzt einen Android-Code auf niedrigem Niveau in Rust". ARS Technica. Archiviert vom Original am 2021-04-08. Abgerufen 2022-04-21.
  102. ^ "Warum Rost für sichere Systeme programmieren". Microsoft Security Response Center. Archiviert vom Original am 2019-07-22. Abgerufen 2022-04-21.
  103. ^ Tung, Liam. "Microsoft: Warum wir Programmiersprache Rost über GO für WebAssembly in der Kubernetes -App verwendet haben". ZDNET. Archiviert vom Original am 2022-04-21. Abgerufen 2022-04-21.
  104. ^ Yegulalp, Serdar (2015-04-03). "Mozillas rostbasiertes Servo-Browser-Motor ist Zentimeter nach vorne". InfoWorld. Archiviert vom Original am 2016-03-16. Abgerufen 2016-03-15.
  105. ^ Lardinois, Frederic (2015-04-03). "Mozilla und Samsung Team, um Servo zu entwickeln, Mozillas Browser-Motor für Multicore-Prozessoren der nächsten Generation". Techcrunch. Archiviert vom Original am 2016-09-10. Abgerufen 2017-06-25.
  106. ^ Nichols, Shaun (2017-09-26). "Mozilla peitscht rostiges neues Firefox Quantum (und das ist gut)". www.theregister.com. Abgerufen 2022-07-14.
  107. ^ Shankland, Stephen (2016-07-12). "Firefox wird überarbeitet, um Sie wieder zu interessieren.". CNET. Abgerufen 2022-07-14.
  108. ^ Hu, Vivian (2020-06-12). "Deno ist bereit für die Produktion". Infoq. Abgerufen 2022-07-14.
  109. ^ "Firecracker - Leichte Virtualisierung für serverloses Computer". Amazon Web Services. 2018-11-26. Archiviert vom Original am 2021-12-08. Abgerufen 2022-01-02.
  110. ^ "Ankündigung der allgemeinen Verfügbarkeit von Bottlerocket, einer Open -Source -Linux -Verteilung, die für die Ausführung von Containern erstellt wurde.". Amazon Web Services. 2020-08-31. Archiviert vom Original am 2022-01-02. Abgerufen 2022-01-02.
  111. ^ "Wie wir Firewall Regeln gemacht haben". Der Cloudflare -Blog. 2019-03-04. Abgerufen 2022-06-11.
  112. ^ "Genießen Sie ein Stück Quic und Rost!". Der Cloudflare -Blog. 2019-01-22. Abgerufen 2022-06-11.
  113. ^ Yegulalp, Serdar. "Rusts Redox OS könnte Linux ein paar neue Tricks zeigen". InfoWorld. Archiviert vom Original am 2016-03-21. Abgerufen 2016-03-21.
  114. ^ Anderson, Tim (2021-01-14). "Ein weiteres Rost-y OS: Theseus verbindet Redox, um sicherere, widerstandsfähigere Systeme zu verfolgen". www.theregister.com. Abgerufen 2022-07-14.
  115. ^ "Google Fushcias Quellcode". Google Git. Archiviert vom Original am 2021-07-09. Abgerufen 2021-07-02.
  116. ^ "SRC/Connectivity/Network/NetStack3/Core/SRC - Fuchsia". Google Git. Archiviert vom Original am 2022-06-11. Abgerufen 2022-04-21.
  117. ^ SEI, Mark (2018-10-10). "Fedora 29 Neue Funktionen: Startis jetzt offiziell in Fedora". Marksei, wöchentliche Sysadmin Pillen. Archiviert vom Original am 2019-04-13. Abgerufen 2019-05-13.
  118. ^ Provenen, Liam (2022-07-12). "Oracle Linux 9 veröffentlicht mit einigen interessanten Ergänzungen". Das Register. Abgerufen 2022-07-14.
  119. ^ Anderson, Tim (2021-12-07). "Rusty Linux -Kernel nimmt mit neuem Patch näher". Das Register. Abgerufen 2022-07-14.
  120. ^ Vishnevskiy, Stanislav (2017-07-06). "Wie diskordt das Elixier auf 5.000.000 gleichzeitige Benutzer skaliert". Discord Blog. Archiviert vom Original am 2020-04-26. Abgerufen 2021-08-14.
  121. ^ Nichols, Shaun (2018-06-27). "Microsofts nächstes Trick? Schicken Sie Dinge aus der Cloud, um IoT Edge zu azure". ". Das Register. Archiviert vom Original am 2019-09-27. Abgerufen 2019-09-27.
  122. ^ "Ethereum Blockchain Killer wird unauffällignamen Polkadot". Bloomberg. 2020-10-17. Abgerufen 2021-07-14.{{}}: CS1 Wartung: URL-Status (Link)
  123. ^ "Rüsche". Rüsche. Archiviert vom Original am 2021-01-26. Abgerufen 2021-04-14.
  124. ^ terminusdb/terminusdb store, Terminusdb, 2020-12-14, archiviert vom Original am 2020-12-15, abgerufen 2020-12-14
  125. ^ "Einstieg". rost-Lang.org. Archiviert vom Original am 2020-11-01. Abgerufen 2020-10-11.
  126. ^ "Gemeinschaft". www.rustlang.org. Archiviert vom Original am 2022-01-03. Abgerufen 2022-01-03.
  127. ^ "RustConf 2020 - Donnerstag, 20. August". Rustconf.com. Archiviert vom Original am 2019-08-25. Abgerufen 2019-08-25.
  128. ^ Rostgürtelrost. Rostgürtelrost. Dayton, Ohio. 2019-10-18. Archiviert vom Original am 2019-05-14. Abgerufen 2019-05-14.
  129. ^ Rostfest. Barcelona, ​​Spanien: Asquera Event UG. 2019. Archiviert vom Original am 2019-04-24. Abgerufen 2019-05-14.
  130. ^ "Rustcon Asia 2019 - über". Rustcon Asia. Archiviert vom Original am 2021-05-09. Abgerufen 2022-04-21.
  131. ^ "Rust Latam". Rost Latam. Archiviert vom Original am 2021-04-16. Abgerufen 2022-04-21.
  132. ^ "Global oxidieren". Oxidieren Sie die Berliner Konferenz. Archiviert vom Original am 2021-02-06. Abgerufen 2021-02-01.
  133. ^ Tung, Liam (2021-02-08). "Die Rost -Programmiersprache hat gerade einen großen Schritt nach vorne gemacht". ZDNET. Abgerufen 2022-07-14.
  134. ^ Krill, Paul. "Rust Language bewegt sich auf die unabhängige Fundament". InfoWorld. Archiviert vom Original am 2021-04-10. Abgerufen 2021-04-10.
  135. ^ Vaughan-Nichols, Steven J. (2021-04-09). "AWS 'Shane Miller, um die neu geschaffene Rust Foundation zu leiten". ZDNET. Archiviert vom Original am 2021-04-10. Abgerufen 2021-04-10.
  136. ^ Vaughan-Nichols, Steven J. (2021-11-17). "Rust Foundation ernennt Rebecca Rumbul zum Geschäftsführer". ZDNET. Archiviert vom Original am 2021-11-18. Abgerufen 2021-11-18.
  137. ^ "Die Rust -Programmiersprache hat jetzt eine eigene unabhängige Grundlage". TechRepublic. 2021-02-10. Archiviert vom Original am 2021-11-18. Abgerufen 2021-11-18.
  138. ^ "Führung". Die Rost -Programmiersprache. Archiviert vom Original am 2022-05-10. Abgerufen 2022-05-07.
  139. ^ Anderson, Tim (2021-11-23). "Das gesamte Rost -Moderation -Team tritt zurück". Das Register. Abgerufen 2022-07-14.

Weitere Lektüre

Externe Links