Die Veröffentlichung der Programmiersprache Rust 1.99 wurde bekannt gegeben, die ursprĂŒnglich von Mozilla entwickelt wurde, nun aber von der unabhĂ€ngigen Non-Profit-Organisation Rust Foundation weitergefĂŒhrt wird. Die Sprache konzentriert sich auf sicheres Arbeiten mit Speicher und bietet Werkzeuge zur Erreichung hohen parallelen AufgabenausfĂŒhrung, ohne dabei einen Garbage Collector oder Runtime (Runtime beschrĂ€nkt sich auf die grundlegende Initialisierung und Wartung der Standardbibliothek) zu verwenden.
Die Methoden zur Arbeit mit Speicher in Rust zielen darauf ab, Fehler beim Umgang mit Zeigern zu vermeiden und Probleme zu verhindern, die durch die Low-Level-Arbeit mit Speicher entstehen, wie den Zugriff auf freigegebenen Speicher, Dereferenzierung nuller Zeiger, PufferĂŒberlĂ€ufe usw. Zur Verbreitung von Bibliotheken, zur Sicherstellung der Kompilierung und zum Management von AbhĂ€ngigkeiten wird der Paketmanager Cargo weiterentwickelt. FĂŒr die Bereitstellung von Bibliotheken wird das Repository crates.io unterstĂŒtzt.
Sichere Speicherverwaltung wird in Rust wĂ€hrend der Kompilierung durch ĂberprĂŒfung von Referenzen, Nachverfolgung des Eigentums an Objekten, BerĂŒcksichtigung der Lebensdauer von Objekten (Sichtbarkeitsbereiche) und Bewertung der Korrektheit des Zugriffs auf den Speicher wĂ€hrend der AusfĂŒhrung des Codes gewĂ€hrleistet. Rust bietet ebenfalls Mittel zum Schutz vor ĂberlĂ€ufen bei Ganzzahlen, fordert die zwingende Initialisierung von Variablenwerten vor deren Verwendung und behandelt Fehler in der Standardbibliothek besser. AuĂerdem wird das Konzept der UnverĂ€nderlichkeit (immutable) von Referenzen und Variablen standardmĂ€Ăig angewendet, und es bietet eine starke statische Typisierung zur Minimierung logischer Fehler.
Hauptneuheiten:
- Es wurde die Möglichkeit geschaffen, in Rust Funktionen mit variabler Anzahl an Argumenten (variadic) zu erstellen, die fĂŒr den Aufruf aus C-Projekten exportiert werden können (C ABI). Als letztes Element der Parameterliste in solchen Funktionen kann die Konstruktion ââŠâ angegeben werden, die in Rust mit einem speziellen Typ VaList verarbeitet wird, der Ă€hnlich wie va_list in C arbeitet. unsafe extern «C» fn sum(mut args: âŠ) -> i32 { let a = unsafe { args.next_arg::<i32>() }; let b = unsafe { args.next_arg::<i32>() }; a + b } fn foo() -> i32 { unsafe { sum(0i32, 2i32) } }
- Die Funktionen Layout::for_value_raw, mem::size_of_val_raw und mem::align_of_val_raw wurden stabilisiert, um sicher die GröĂe und Ausrichtung anhand von rohen Zeigern (raw pointers) zu bestimmen, einschlieĂlich der Verwendung von Typen mit dynamischer GröĂe wie Slices, ohne dass es erforderlich ist, Referenzen auf die Daten zu erstellen.
- Die Dokumentation wurde um die Empfehlung ergĂ€nzt, die Freigabe von Speicher zu vermeiden, auf den eine statische Referenz mit unbegrenzter Lebensdauer (&âstatic) durch den Aufruf von Box::leak (round-trip unleaking) erhalten wurde, da eine solche Aktion potenziell Probleme aufgrund von InkompatibilitĂ€ten mit zukĂŒnftigen Compileroptimierungen und eingebundenen Speicherallokationsmechanismen verursachen kann. Anstelle der Erstellung einer statischen Referenz fĂŒr die vorĂŒbergehende Ăbergabe des Eigentums wird empfohlen, rohe Zeiger zu verwenden, beispielsweise durch den Aufruf von Box::into_non_null.
- Eine neue Charge von APIs wurde in den stabilen Bereich ĂŒberfĂŒhrt, darunter wurden Methoden und Implementierungen von Traits stabilisiert:
- IntoIterator fĂŒr Box<[T; N]>
- IntoIterator fĂŒr &Box<[T; N]>
- IntoIterator fĂŒr &mut Box<[T; N]>
- VecDeque::retain_back
- core::ffi::VaList
- Box::into_non_null
- Box::from_non_null
- Vec::into_parts
- Vec::from_parts
- core::mem::size_of_val_raw
- core::mem::align_of_val_raw
- core::alloc::Layout::for_value_raw
- String::from_utf8_lossy_owned
- string::FromUtf8Error::into_utf8_lossy
- FusedIterator fĂŒr StepBy<I>
- std::fs::set_times
- std::fs::set_times_nofollow
- Im Paketmanager Cargo wurde ein neues integriertes Profil âdebugâ implementiert, das dem Profil âdevâ Ă€hnelt (zukĂŒnftig soll die Möglichkeit zum Debuggen und Entwickeln getrennt werden). Bei der CI-Build wird standardmĂ€Ăig die inkrementelle Kompilierung deaktiviert.
- Die Zielplattform riscv64-unknown-linux-musl hat die zweite UnterstĂŒtzungsebene erreicht, die eine Build-Garantie, jedoch keine Garantien fĂŒr das Bestehen des Testsets beinhaltet.
ZusĂ€tzlich können die kĂŒrzlich angekĂŒndigten Projekte und Veranstaltungen in Verbindung mit Rust hervorgehoben werden:
- Microsoft hat Rust zu einer Sprache der ersten Stufe erhoben und wird vollstĂ€ndige UnterstĂŒtzung fĂŒr alle Entwicklungsphasen innerhalb des Unternehmens bieten. Zuvor gab es die erste UnterstĂŒtzungsebene im Unternehmen fĂŒr die Sprachen C++, C# und TypeScript. Es wird berichtet, dass Rust bereits in mehr als 100 Microsoft-Repositories verwendet wird. Unter anderem werden Rust-Komponenten bereits in Produkten wie Microsoft 365 und Copilot eingesetzt, und fĂŒr den MSVC-Compiler wurde ein separater Backend rustc_codegen_utc fĂŒr Rust, basierend auf dem rustc-Compiler, vorbereitet.
Das Hauptziel der Anwendung von Rust bei Microsoft wird die Erhöhung der Sicherheit des Codes genannt, der aus sicherheitstechnischer Sicht kritisch ist. Laut dem technischen Direktor von Microsoft Azure werden etwa 70 % aller SicherheitsanfÀlligkeiten in Windows durch Probleme im Zusammenhang mit Speicher verursacht, die durch die Verwendung von Rust vermieden werden können.
- Google hat die alte Implementierung des Interprozesskommunikationsmechanismus Binder, die in C geschrieben wurde, aus dem Linux-Kernel entfernt, zugunsten des neuen Binder IPC-Treibers, der in Rust neu geschrieben wurde. Es wird festgestellt, dass sich ĂŒber 15 Jahre der alten Treiber signifikante technische Schulden und eine Vielzahl von Komplikationen angesammelt haben, die das Auffinden von Fehlern, die Wartung und die HinzufĂŒgung neuer Funktionen erschwerten. Der Binder IPC-Treiber in Rust wird als primĂ€r anerkannt und nicht mehr als experimentelle Entwicklung angesehen.
- Die Version 2.7.0 von Arti, einer Implementierung des Tor-Toolkits, das in Rust geschrieben wurde, wurde veröffentlicht. Wenn der Arti-Code ein Niveau erreicht, das den C-Variant vollstĂ€ndig ersetzen kann, beabsichtigen die Tor-Entwickler, Arti den Status der Hauptimplementierung von Tor zu verleihen und die UnterstĂŒtzung der Implementierung in C schrittweise einzustellen. In der neuen Version wurde die FunktionalitĂ€t fĂŒr Relais weiterentwickelt. Server Verzeichnis (Directory Authority), das mit dem Parsen von Dokumenten, der UnterstĂŒtzung der Spiegelung von Verzeichnisservern und der Verarbeitung von DNS-Verkehr verbunden ist. Eine RPC-Implementierung wurde hinzugefĂŒgt, um die Konfiguration zu Ă€ndern und zu ĂŒberprĂŒfen. Mehrere SicherheitsanfĂ€lligkeiten wurden behoben â Administratoren von Onion-Diensten wird dringend empfohlen, ihre Systeme umgehend zu aktualisieren.
Quelle: opennet.ru
