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

Erwerben Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster