Veröffentlichung von Rust 1.89. Etwa 8 % der src-Pakete in Debian Sid hÀngen von Rust ab.

Die Veröffentlichung von Rust 1.89, einer Programmiersprache, die ursprĂŒnglich von Mozilla entwickelt wurde und nun von der unabhĂ€ngigen gemeinnĂŒtzigen Organisation Rust Foundation weitergefĂŒhrt wird, ist erfolgt. Die Sprache konzentriert sich auf sicheren Umgang mit Speicher und bietet Mittel zur Erreichung hohen Parallelismus bei der AusfĂŒhrung von Aufgaben, ohne dabei einen Garbage Collector oder eine Runtime zu benötigen (die Runtime beschrĂ€nkt sich auf die grundlegende Initialisierung und die Bereitstellung 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:

  • Es ist jetzt möglich, das Zeichen „_“ als Argument fĂŒr generische Parameter mit dem Attribut „const“ zu verwenden, um Werte dieser Parameter basierend auf dem umgebenden Kontext abzuleiten. pub fn all_false<const LEN: usize>() -> [bool; LEN] { [false; _] }
  • Eine neue Lint-Warnung "mismatched_lifetime_syntaxes" wurde hinzugefĂŒgt, um das Problem der unklaren Lebenszeitbestimmung in Funktionssignaturen bei Verwendung des Mechanismus der "lifetime elision" (automatische Bestimmung der Lebenszeit von Referenzen, wodurch eine manuelle Angabe entfĂ€llt) zu lösen. Die Warnung prĂŒft, ob Eingangs- und Ausgangsparameter der Funktion zur gleichen Typgruppe gehören. Gruppen werden basierend auf der UnterstĂŒtzung fĂŒr die explizite Angabe von Lebenszeiten und der FĂ€higkeit des Compilers zur automatischen Ableitung von Lebenszeiten gebildet (zum Beispiel können in den Typen "&’a T" und "ContainsLifetime<‘a>" Lebenszeiten explizit vorhanden sein, wĂ€hrend der Compiler sie nicht automatisch bestimmen kann; in den Typen "&T", "&’_ T" und "ContainsLifetime<‘_>" sind sowohl explizite Zuweisungen als auch automatische Bestimmungen zulĂ€ssig).
  • Im Attribut „target_feature“ fĂŒr x86-Systeme wurde die Möglichkeit zur ÜberprĂŒfung der UnterstĂŒtzung erweiterter Befehlssatzerweiterungen wie sha512, sm3, sm4, kl und widekl sowie bestimmter Funktionen von avx512 implementiert. #[target_feature(enable = „avx512bw“)] pub fn cool_simd_code(/* .. */) -> /* 
 */ { /* 
 */ }
  • Der Start von doctest (Tests, die in die Dokumentation integriert sind) ist nicht nur fĂŒr die aktuelle Zielplattform, sondern auch fĂŒr andere Plattformen, die beim Start des Paketmanagers „cargo“ angegeben wurden, gewĂ€hrleistet („cargo test —doc —target other_target“).
  • FĂŒr Funktionen ‚extern „C“‘ wurde beim Kompilieren fĂŒr die Zielplattform „wasm32-unknown-unknown“ der Standard-C-ABI fĂŒr WebAssembly implementiert.
  • Mit einigen Vorbehalten bezĂŒglich der TypkompatibilitĂ€t ist die Verwendung der Typen i128 und u128 in externen C-Funktionen (extern „C“) zulĂ€ssig, fĂŒr die zuvor eine lint-Warnung „improper_ctypes_definitions“ angezeigt wurde.
  • Eine neue Reihe von APIs wurde stabilisiert und in die stabile Version ĂŒberfĂŒhrt, einschließlich stabilisierter Methoden und Implementierungen von Traits:
    • Viele im Compiler integrierte Funktionen (Intrinsics) fĂŒr x86-Prozessoren, einschließlich Funktionen fĂŒr AVX512, SHA512, SM3 und SM4.
    • NonZero
    • 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 Kennzeichen „const“ wird in Funktionen angewendet:

    • ::as_mut_slice
    • ::eq_ignore_ascii_case
    • str::eq_ignore_ascii_case
  • Der Prozess zur Übersetzung der Zielplattform „x86_64-apple-darwin“ hat begonnen, von der ersten auf die zweite UnterstĂŒtzungsstufe (Apple plant, die UnterstĂŒtzung der Architektur x86_64 einzustellen). Die erste UnterstĂŒtzungsstufe umfasst die Erstellung von BinĂ€rpaketen, grĂŒndliche Tests und die Bereitstellung der höchsten UnterstĂŒtzungsgarantie fĂŒr die Plattform — jede Änderung im Compiler wird durch das DurchfĂŒhren des vollstĂ€ndigen Testsets ĂŒberprĂŒft. Die zweite UnterstĂŒtzungsstufe bedeutet eine Garantie fĂŒr die Erstellung, jedoch keine Garantien beim Durchlaufen des Testsets.
  • Die dritte UnterstĂŒtzungsstufe fĂŒr die Plattformen „loongarch32-unknown-none“ und „loongarch32-unknown-none-softfloat“ wurde implementiert. Die dritte Stufe umfasst eine grundlegende UnterstĂŒtzung, jedoch ohne automatisierte Tests, Veröffentlichung offizieller Builds und ÜberprĂŒfung der Erstellung des Codes.

ZusÀtzlich können verwandte Ereignisse und Projekte im Zusammenhang mit Rust hervorgehoben werden:

  • Der Bericht ĂŒber den Zustand der Pakete in Rust fĂŒr Debian wurde veröffentlicht. Es wird darauf hingewiesen, dass in der Debian Unstable (Sid) etwa 8 % der src-Pakete im Hauptrepository mit AbhĂ€ngigkeiten von mindestens einem Paket „librust-*“ verbunden sind. In Debian 12 lag dieser Anteil bei 4,5 %. Zudem wird festgestellt, dass ĂŒber 3.000 Pakete Rust-Code enthalten, der in die Pakete librust-..-dev ausgegliedert ist, und 150 src-Pakete liefern kompilierte ausfĂŒhrbare Dateien oder Rust-Bibliotheken.

    Zu den fĂŒr Debian interessanten Paketen zĂ€hlen sudo-rs, ntpd-rs, uutils, Sequoia, rpgp, hickory (DNS), Rustls, rav1d und fish. Die optionale Rust-UnterstĂŒtzung wurde in APT, QEMU (virtiofsd), dem Linux-Kernel und Mesa implementiert, und wird auch in LibreOffice erwartet. Ein Werkzeug zum Umwandeln von crate-Paketen in Debian src-Pakete, debcargo, wurde entwickelt.

  • Das Projekt tmux-rs wurde vorgestellt, ein Klon des Terminalmultiplexers tmux (Konsolenfenstermanager), der von C auf Rust umgeschrieben wurde.
  • Ein Entwickler des Tyr-Treibers der Firma Collabora veröffentlichte einen Artikel ĂŒber GerĂ€te, die auf Kernel-Ebene Treiber fĂŒr GPUs und die Prinzipien der Entwicklung solcher Treiber in Rust nutzen.
  • Eine universelle Anwendung in Rust wurde demonstriert, die sowohl auf CPU als auch auf verschiedenen GPU-Plattformen lĂ€uft: CUDA fĂŒr NVIDIA, SPIR-V fĂŒr Vulkan-fĂ€hige GPUs, Metal fĂŒr Apple, DirectX 12 fĂŒr Windows, WebGPU fĂŒr Browser.

Quelle: opennet.ru

ZuverlĂ€ssiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen đŸ”„ ZuverlĂ€ssiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster