Release der Systemprogrammiersprache , entwickelt von Mozilla. Die Sprache konzentriert sich auf sichere Speicherverwaltung, bietet automatisches Speichermanagement und stellt Mittel zur Verfügung, um hohen Parallelismus bei der Aufgabenbearbeitung zu erreichen, ohne einen Garbage Collector verwenden zu müssen und .
Das automatische Speichermanagement in Rust befreit den Entwickler von der Manipulation von Zeigern und schützt vor Problemen, die aus der niederleveligen Speicherbearbeitung resultieren, wie das Zugreifen auf freigegebenen Speicher, Dereferenzierung von Nullzeigern und Buffer-Überläufen. Für die Verteilung von Bibliotheken, den Aufbau und das Management von Abhängigkeiten entwickelt sich der Paketmanager , der es ermöglicht, die benötigten Bibliotheken für das Programm mit einem Klick zu erhalten. Für die Bereitstellung von Bibliotheken wird das Repository .
Haupt :
- Die Möglichkeit, Strukturen (struct) und Aufzählungen (enum) mithilfe des Attributs „]“ wurde hinzugefügt. Zukünftig können neue Felder und Optionen zu den deklarierten Strukturen und Enumerationstypen hinzugefügt werden. Beispielsweise können Modulentwickler, die Strukturen mit öffentlich deklarierten Feldern besitzen, "#[non_exhaustive]" verwenden, um Strukturen zu kennzeichnen, die in Zukunft neue Felder erhalten können. Bisher musste der Entwickler in einer solchen Situation zwischen der privaten Deklaration von Feldern und der Bindung an eine unveränderliche Liste von Feldern wählen. Das neue Attribut beseitigt diese Einschränkung und erlaubt, in Zukunft neue Felder hinzuzufügen, ohne das Risiko eines brechenden externen Codes eingehen zu müssen. In crate-Paketen sind bei Mustervergleichen im "match"-Block die explizite Definition der Maske "_ => {...}" erforderlich, die zukünftige Felder abdecken könnte, andernfalls wird beim Hinzufügen neuer Felder ein Fehler angezeigt.
- die Möglichkeit, das prozedurale Makro mac!() im Kontext eines Typs aufzurufen. Zum Beispiel kann jetzt geschrieben werden: "type Foo = expand_to_type!(bar);", wenn "expand_to_type" ein prozedurales Makro ist.
- In Blocks "extern { … }" die Möglichkeit der Verwendung von prozeduralen und attributiven Makros, einschließlich "bang!()"-Makros, wie zum Beispiel:
macro_rules! make_item { ($name:ident) => { fn $name(); } }
extern {
make_item!(alpha);
make_item!(beta);
}extern «C» {
#[my_identity_macro]
fn foo();
} - In Makros Die Möglichkeit zur Generierung von Elementen «macro_rules!». Die Generierung von «macro_rules!» ist sowohl in funktionähnlichen Makros («mac!()») als auch in Attributmakros («#[mac]») möglich.
- Im Muster-Element $m:meta Unterstützung für beliebige Werte von Aufzählungstoken («[TOKEN_STREAM]», «{TOKEN_STREAM}» und «(TOKEN_STREAM)»), z. B.:
macro_rules! accept_meta { ($m:meta) => {} }
accept_meta!( my::path );
accept_meta!( my::path = «lit» );
accept_meta!( my::path ( a b c ) );
accept_meta!( my::path [ a b c ] );
accept_meta!( my::path { a b c } ); - Im Rust 2015-Modus wurde die Fehlerausgabe für Probleme, die beim Überprüfen der Variablenentlehnung (borrow checker) mithilfe der NLL-Technik (Non-Lexical Lifetimes) auftraten, aktiviert. Zuvor wurden Warnungen in Fehler im Rust 2018-Modus umgewandelt.
Nach der Ausbreitung der Änderungen im Rust 2015-Modus erhielten die Entwickler die Möglichkeit, endgültig vom alten Borrow Checker.Wir erinnern daran, dass das neue System zur Überprüfung auf Basis eines neuen Zeitmanagementmechanismus es ermöglicht hat, einige Probleme zu identifizieren, die im alten Überprüfungscode unbemerkt blieben. Da die Fehlermeldung für derartige Überprüfungen die Kompatibilität mit zuvor funktionierendem Code beeinträchtigen könnte, wurden anfangs Warnungen anstelle von Fehlern ausgegeben.
- Das Attribut „const“, das die Verwendung in jedem Kontext anstelle von Konstanten ermöglicht, wurde für die Funktion is_power_of_two (für vorzeichenlose Ganzzahlen) angewendet.
- Eine neue Gruppe von APIs wurde stabilisiert, darunter die Makros todo!() sowie die Methoden slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value,
Option::as_deref, Option::as_deref_mut, Option::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes, {f32,f64}::to_ne_bytes, {f32,f64}::from_be_bytes, {f32,f64}::from_le_bytes und {f32,f64}::from_ne_bytes. - Im Paketmanager cargo
wurde die Disk-KCaching von Compilerwarnungen eingeführt. Dem Befehl „cargo metadata“ wurde die Option „“ hinzugefügt, um nur Pakete anzuzeigen, die an die angegebene Zielplattform gebunden sind, in der Spalte der Abhängigkeitsauflösungen. Außerdem wurde der Konfigurationsparameter http.ssl-version hinzugefügt, um zulässige TLS-Versionen zu bestimmen.
Die Möglichkeit, den Abschnitt «» ohne Angabe des «version»-Schlüssels zu veröffentlichen, wurde hinzugefügt. - Im Compiler rustc wurde die dritte Unterstützungsstufe für die Zielplattformen thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 und mips64el-unknown-linux-muslabi64 implementiert. Die dritte Stufe bedeutet grundlegende Unterstützung, jedoch ohne automatisierte Tests und ohne Veröffentlichung offizieller Builds.
Quelle: opennet.ru
