Die Veröffentlichung der Programmiersprache Rust 1.68, die ursprünglich von Mozilla entwickelt wurde, aber jetzt von der unabhängigen Non-Profit-Organisation Rust Foundation weitergeführt wird, wurde bekannt gegeben. Die Sprache konzentriert sich auf sicheren Umgang mit Speicher und bietet Mittel für hohen parallelen Aufgabenbetrieb, ohne dabei einen Garbage Collector oder umfassende Laufzeitumgebungen zu nutzen (die Laufzeit beschränkt sich auf die grundlegende Initialisierung und den Support der Standardbibliothek).
Die Speicherverwaltungsmethoden in Rust befreien Entwickler von Fehlern beim Umgang mit Zeigern und schützen vor Problemen, die durch die Programmierung auf niedriger Ebene entstehen, wie z.B. den Zugriff auf freigegebenen Speicher, Dereferenzierung von Nullzeigern, Pufferüberläufe usw. Zur Verteilung von Bibliotheken, zur Gewährleistung des Builds und zum Management von Abhängigkeiten wird der Paketmanager Cargo entwickelt. Für die Bereitstellung von Bibliotheken wird das Repository crates.io unterstützt.
Die sichere Handhabung von Speicher in Rust wird während der Kompilierung durch die Überprüfung von Referenzen, das Verfolgen des Besitztums von Objekten, das Management der Lebensdauer von Objekten (Sichtbarkeitsbereiche) und die Bewertung der Korrektheit des Zugriffs auf den Speicher zur Laufzeit sichergestellt. Rust bietet außerdem Mechanismen zum Schutz vor ganzzahligen Überläufen, erfordert die verpflichtende Initialisierung von Variablenwerten vor der Verwendung, behandelt Fehler in der Standardbibliothek effektiver, implementiert das Konzept der Unveränderlichkeit (immutable) von Referenzen und Variablen standardmäßig und bietet eine starke statische Typisierung zur Minimierung logischer Fehler.
Hauptneuheiten:
- Im Paketmanager Cargo und im Repository crates.io wurde die Unterstützung für das Sparse-Protokoll stabilisiert, das eine neue Methode zur Arbeit mit dem Index definiert, in dem alle verfügbaren Versionen der im Repository existierenden Pakete dargestellt werden. Das neue Protokoll ermöglicht eine signifikante Geschwindigkeitssteigerung bei der Nutzung von crates.io und beseitigt Skalierungsprobleme, die beim weiteren Wachstum der Anzahl der Pakete im Repository auftreten können.
Um Verzögerungen zu vermeiden, die durch das Laden des vollständigen Indexes entstehen, wird in Sparse anstelle des Zugriffs auf den Index über Git ein direkter Download der nur erforderlichen Indexdaten über HTTPS verwendet, die die Abhängigkeiten des jeweiligen Projekts abdecken. Für die Bereitstellung der Indexdaten wird ein neuer Dienst index.crates.io eingesetzt. Der neue Protokolltyp wird standardmäßig in der Rust-Version 1.70 implementiert, aber vor diesem Zeitpunkt kann es aktiviert werden, indem die Umgebungsvariable „CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse“ gesetzt oder der Parameter 'protocol = "sparse"' im Abschnitt '[registries.crates-io]' der Datei .cargo/config.toml hinzugefügt wird.
- Ein neuer Makro „pin!“ wurde hinzugefügt, der es ermöglicht, eine Struktur Pin aus dem Ausdruck „T“ mit lokaler Festlegung seines Zustands zu erstellen (im Gegensatz zu Box::pin wird kein Speicher auf dem Heap reserviert, sondern die Bindung erfolgt auf Stufenebene).
- Der standardmäßig verwendete Fehlerbehandlungsmechanismus für den Speicherverteilungsprozess wurde eingeführt, der bei Verwendung des Standardpakets alloc aktiviert wird. Anwendungen, die ausschließlich alloc (ohne std) nutzen und bei denen es zu einem Fehler bei der Speicherzuweisung kommt, rufen nun den 'panic!'-Handler auf, der bei Bedarf mit '#[panic_handler]' abgefangen werden kann. Programme, die die std-Bibliothek verwenden, geben wie gewohnt Informationen über den Fehler in stderr aus und beenden die Ausführung.
- Eine neue Reihe von APIs wurde stabilisiert und in die stabile Version überführt, einschließlich stabilisierter Methoden und Implementierungen von Traits:
- {core,std}::pin::pin!
- impl From for {f32,f64}
- std::path::MAIN_SEPARATOR_STR
- impl DerefMut für PathBuf
- Das 'const'-Merkmal, das die Verwendung in jedem Kontext anstelle von Konstanten definiert, wurde in der Funktion VecDeque::new verwendet.
- Für die Plattform Android wird nun mindestens NDK r25 (API 19) benötigt, was bedeutet, dass die minimal unterstützte Android-Version auf 4.4 (KitKat) erhöht wurde.
- Die dritte Unterstützungsebene für die Plattform Sony PlayStation Vita (armv7-sony-vita-newlibeabihf) wurde implementiert. Diese Ebene bietet grundlegende Unterstützung, jedoch ohne automatisierte Tests, die Veröffentlichung offizieller Builds und die Überprüfung der Möglichkeit, Code zu kompilieren.
Quelle: opennet.ru
