Rust-Version 1.89. Etwa 8 % der src-Pakete in Debian Sid basieren auf Rust

Die neue Version der Programmiersprache Rust 1.89 wurde veröffentlicht. Rust wurde ursprünglich von Mozilla entwickelt, wird jetzt aber von der unabhängigen gemeinnützigen Organisation Rust Foundation weiterentwickelt. Die Sprache konzentriert sich auf sichere Speicherverwaltung und bietet Mittel zur Erreichung eines hohen Grades an paralleler Ausführung von Aufgaben, ohne dabei einen Garbage Collector und einen Runtime-Umgebung zu benötigen (die Laufzeit beschränkt sich auf die grundlegende Initialisierung und die Pflege der Standardbibliothek).

Die Methoden zur Speicherverwaltung in Rust befreien den Entwickler von Fehlern beim Umgang mit Zeigern und schützen vor Problemen, die durch niedrige Speicherverwaltung entstehen, wie z. B. den Zugriff auf Speicherbereiche nach deren Freigabe, Dereferenzierung von Nullzeigern, Pufferüberläufen usw. Zur Verbreitung von Bibliotheken, zur Gewährleistung des Builds und zur Verwaltung von Abhängigkeiten wird der Paketmanager Cargo entwickelt. Für das Hosting 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 eingeführt, das Zeichen „_“ als Argument für generische Parameter mit dem Attribut „const“ zu verwenden, um die Werte dieser Parameter basierend auf dem umgebenden Kontext abzuleiten. pub fn all_false() -> [bool; LEN] { [false; _] }
  • Eine neue Lint-Warnung «mismatched_lifetime_syntaxes» wurde hinzugefügt, um das Problem der unklaren Lebensdauern in Funktionssignaturen bei Verwendung des Mechanismus «lifetime elision» zu lösen (bestimmt automatisch die Lebensdauer von Referenzen, sodass keine manuelle Angabe erforderlich ist). Die Warnung prüft, ob die Eingangs- und Ausgangsparameter einer Funktion zur selben Typgruppe gehören. Gruppen werden auf der Grundlage der Unterstützung einer expliziten Lebensdauerangabe und der Möglichkeit des Compiler, die Lebensdauer automatisch abzuleiten, gebildet (zum Beispiel kann in den Typen «&’a T» und «ContainsLifetime<‘a>» eine Lebensdauer explizit vorhanden sein, aber der Compiler kann diese nicht automatisch bestimmen, während in den Typen «&T», «&’_ T» und «ContainsLifetime<‘_>» sowohl eine explizite Angabe als auch eine automatische Bestimmung zulässig ist).
  • Im Attribut «target_feature» für x86-Systeme wurde die Möglichkeit zur Überprüfung der Unterstützung erweiterter Befehlssätze wie sha512, sm3, sm4, kl und widekl sowie einzelner Funktionen von avx512 implementiert. #[target_feature(enable = «avx512bw»)] pub fn cool_simd_code( /* .. */) -> /* … */ { /* … */ }
  • Die Ausführung von doctest (Tests, die in die Dokumentation integriert sind) ist jetzt nicht nur für die aktuelle Zielplattform möglich, sondern auch für andere Plattformen, die beim Start des Paketmanagers «cargo» angegeben werden («cargo test —doc —target other_target»).
  • Für Funktionen ‘extern «C»‘ wurde bei der Erstellung für die Zielplattform «wasm32-unknown-unknown» der Standard-C-ABI für WebAssembly implementiert.
  • Mit einigen Vorbehalten in Bezug auf die Typkompatibilität ist die Verwendung der Typen i128 und u128 in externen C-Funktionen (extern «C») erlaubt, für die zuvor die Lint-Warnung «improper_ctypes_definitions» angezeigt wurde.
  • Eine neue Charge von APIs wurde in den stabilen Bereich überführt, darunter wurden Methoden und Implementierungen von Traits stabilisiert:
    • Viele im Compiler integrierte Funktionen (Intrinsics) für x86-Prozessoren, einschließlich Funktionen für AVX512, SHA512, SM3 und SM4.
    • NonZero<char>
    • File::lock
    • File::lock_shared
    • File::try_lock
    • File::try_lock_shared
    • File::unlock
    • NonNull::from_ref
    • NonNull::from_mut
    • NonNull::without_provenance
    • NonNull::with_exposed_provenance
    • NonNull::expose_provenance
    • OsString::leak
    • PathBuf::leak
    • Result::flatten
    • std::os::linux::net::TcpStreamExt::quickack
    • std::os::linux::net::TcpStreamExt::set_quickack

    Das Merkmal «const» wird in Funktionen angewendet:

    • <[T; N]>::as_mut_slice
    • <[u8]>::eq_ignore_ascii_case
    • str::eq_ignore_ascii_case
  • Der Übersetzungsprozess der Zielplattform „x86_64-apple-darwin“ hat begonnen, um sie von der ersten auf die zweite Unterstützungsstufe zu bringen (Apple plant, die Unterstützung für die Architektur x86_64 einzustellen). Die erste Unterstützungsstufe umfasst die Erstellung von Binärbauten, umfassende Tests und die Bereitstellung der höchsten Garantie für die Unterstützung der Plattform — jede Änderung im Compiler wird durch die Durchführung des gesamten Testumfangs überprüft. Die zweite Unterstützungsstufe umfasst die Garantie für die Erstellung, jedoch ohne Garantien beim Bestehen des Testumfangs.
  • Die dritte Unterstützungsstufe für die Plattformen „loongarch32-unknown-none“ und „loongarch32-unknown-none-softfloat“ wurde umgesetzt. Die dritte Stufe umfasst die grundlegende Unterstützung, jedoch ohne automatisierte Tests, Veröffentlichung offizieller Builds und Prüfung der Möglichkeit, den Code zu bauen.

Zusätzlich sind an Rust gebundene Ereignisse und Projekte zu erwähnen:

  • Ein Bericht über den Zustand von Rust-Paketen in Debian wurde veröffentlicht. Es wird angemerkt, dass in der Debian Unstable (Sid) Zweig etwa 8 % der src-Pakete im Haupt-Repository mit Abhängigkeiten zu mindestens einem Paket „librust-*“ verbunden sind. In Debian 12 waren es 4,5 %. Zudem wurden über 3000 Pakete identifiziert, die Rust-Code enthalten und in die Pakete librust-..-dev ausgegliedert wurden, während 150 src-Pakete kompilierte ausführbare Dateien oder Rust-Bibliotheken ausliefern.

    Unter den für Debian interessanten Paketen werden sudo-rs, ntpd-rs, uutils, Sequoia, rpgp, hickory (DNS), Rustls, rav1d und fish genannt. Eine optionale Unterstützung für Rust wurde in APT, QEMU (virtiofsd), im Linux-Kernel und in Mesa implementiert und wird auch in LibreOffice erwartet. Für die Umwandlung von crate-Paketen in src-Pakete für Debian wurde das Werkzeug debcargo entwickelt.

  • Das Projekt tmux-rs wurde vorgestellt, das einen Klon des Terminalmultiplexers tmux (Konsolenfenster-Manager) entwickelt, der von C auf Rust umgeschrieben wurde.
  • Ein Entwickler des Tyr-Treibers von Collabora hat einen Artikel über Geräte veröffentlicht, die auf Kernel-Ebene Treiber für GPUs bereitstellen und die Prinzipien der Entwicklung solcher Treiber in Rust erläutert.
  • Eine universelle Anwendung in Rust wurde demonstriert, die sowohl auf CPU- als auch auf verschiedenen GPU-Plattformen ausgeführt werden kann: CUDA für NVIDIA, SPIR-V für GPUs mit Vulkan-Unterstützung, Metal für Apple, DirectX 12 für Windows und WebGPU für Browser.

Quelle: opennet.ru

60GB SSD 8Gb DDR4