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

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster