Die Version 1.55 der Programmiersprache Rust wurde veröffentlicht. Ursprünglich von Mozilla entwickelt, wird sie mittlerweile von der unabhängigen gemeinnützigen Organisation Rust Foundation weiterentwickelt. Die Sprache legt einen Schwerpunkt auf sichere Speicherverwaltung, bietet automatisches Speicher-Management und ermöglicht eine hohe Parallelität bei der Ausführung von Aufgaben, ohne auf einen Garbage Collector oder eine umfangreiche Laufzeitumgebung angewiesen zu sein; die Laufzeit beschränkt sich auf die grundlegende Initialisierung und die Unterstützung der Standardbibliothek.
Das automatische Speichermanagement in Rust befreit Entwickler von Fehlern beim Umgang mit Zeigern und schützt vor Problemen, die aus der niederen Speicherverwaltung entstehen, wie etwa dem Zugreifen auf Speicherbereiche nach deren Freigabe, dem Dereferenzieren von Nullzeigern, Pufferüberläufen usw. Zur Verbreitung von Bibliotheken, zur Gewährleistung des Builds und zur Verwaltung der Abhängigkeiten wird der Paketmanager Cargo entwickelt. Für die Bereitstellung von Bibliotheken wird das Repository crates.io unterstützt.
Hauptneuheiten:
- Im Paketmanager Cargo wurde die Möglichkeit implementiert, Duplikate von Fehlern und Warnungen, die während des Builds auftreten, zu konsolidieren. Bei der Ausführung von Befehlen wie «cargo test» und «cargo check —all-targets», die zu mehrfachen Builds des Pakets mit unterschiedlichen Parametern führen, wird dem Benutzer jetzt eine Zusammenfassung über das Auftreten eines wiederkehrenden Problems angezeigt, anstelle mehrerer identischer Warnungen bei der erneuten Kompilierung derselben Datei. $ cargo +1.55.0 check —all-targets Überprüfung von foo v0.1.0 Warnung: Funktion wird nie verwendet: ‘foo’ —> src/lib.rs:9:4 | 9 | fn foo() {} | ^^^ | = Hinweis: ‘#[warn(dead_code)]’ ist standardmäßig aktiv Warnung: ‘foo’ (lib) generierte 1 Warnung Warnung: ‘foo’ (lib test) generierte 1 Warnung (1 Duplikat) Abgeschlossen dev [nicht optimiert + Debug-Info] Ziel(e) in 0.84s
- Der Code zur Analyse von Gleitkommazahlen in der Standardbibliothek wurde auf einen schnelleren und genaueren Algorithmus von Eizel-Lemire umgestellt, dessen Anwendung einige zuvor beobachtete Probleme mit der Rundung und der Analyse von Zahlen mit einer sehr großen Anzahl von Ziffern gelöst hat.
- Die Möglichkeit zur Angabe von offenen Bereichen in Vorlagen wurde stabilisiert („X..“ wird als Bereich interpretiert, der mit dem Wert X beginnt und am maximalen Wert des Ganzzahltyps endet): match x as u32 { 0 => println!(„null!“), 1.. => println!(„positive Zahl!“), }
- Die Fehlerkategorien, die durch die Liste std::io::ErrorKind abgedeckt werden, wurden erweitert (klassifiziert Fehler in Kategorien wie NotFound und WouldBlock). Früher fielen Fehler, die nicht in die bestehenden Kategorien passten, in die Kategorie ErrorKind::Other, die auch für Fehler im externen Code verwendet wurde. Jetzt wurde für Fehler, die nicht in die bestehenden Kategorien passen, eine separate interne Kategorie ErrorKind::Uncategorized geschaffen, und die Kategorie ErrorKind::Other ist auf Fehler beschränkt, die nicht in der Standardbibliothek auftreten (Funktionen der Standardbibliothek, die io::Error zurückgeben, verwenden nicht mehr die Kategorie ErrorKind::Other).
- Eine neue Reihe von APIs wurde stabilisiert und in die stabile Version überführt, einschließlich stabilisierter Methoden und Implementierungen von Traits:
- Bound::cloned
- Drain::as_str
- IntoInnerError::into_error
- IntoInnerError::into_parts
- MaybeUninit::assume_init_mut
- MaybeUninit::assume_init_ref
- MaybeUninit::write
- array::map
- ops::ControlFlow
- x86::_bittest
- x86::_bittestandcomplement
- x86::_bittestandreset
- x86::_bittestandset
- x86_64::_bittest64
- x86_64::_bittestandcomplement64
- x86_64::_bittestandreset64
- x86_64::_bittestandset64
- Das Attribut „const“, das die Verwendung in jedem Kontext statt von Konstanten definiert, wird in der Methode str::from_utf8_unchecked verwendet.
- Die dritte Unterstützungsstufe für die Plattform powerpc64le-unknown-freebsd wurde implementiert. Diese Stufe bietet grundlegende Unterstützung, jedoch ohne automatisierte Tests, Veröffentlichung offizieller Builds und Überprüfung der Code-Kompilierung.
Quelle: opennet.ru
