Veröffentlichung von Rust 1.95. Hinzufügen von Rust zum Display-Server Mir. Netzwerkverkehrsanalyzer ayaFlow auf Rust.

Die Veröffentlichung der Programmiersprache Rust 1.95 wurde bekannt gegeben, die ursprünglich von Mozilla entwickelt wurde, derzeit jedoch von der unabhängigen Non-Profit-Organisation Rust Foundation weiterentwickelt wird. Die Sprache konzentriert sich auf die sichere Arbeit mit Speicher und bietet Mittel zur Erreichung hoher Parallelität bei der Ausführung von Aufgaben, ganz ohne einen Garbage Collector und eine Runtime (die Runtime beschränkt sich auf die grundlegende Initialisierung und die Unterstützung der Standardbibliothek).

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:

  • Das Makro «cfg_select!» wurde hinzugefügt, das anstelle des Pakets «cfg-if» zur Verarbeitung mehrerer Kompilierungsbedingungen im Stil von «match»-Blöcken verwendet werden kann, ohne eine Kette von bedingten Ausdrücken mit der Konstruktion «#[cfg]» zu definieren. cfg_select! { unix => { fn foo() { /* unix */ } } target_pointer_width = „32“ => { fn foo() { /* kein unix, 32-Bit */ } } _ => { fn foo() { /* nicht unix und nicht 32-Bit */ } } }
  • Die Möglichkeit, «if let»-Ausdrücke innerhalb von «match»-Blöcken anzugeben, wurde stabilisiert, um bedingte Musterübereinstimmungen zu erstellen. Zuvor wurde die Unterstützung für die Angabe mehrerer «let»-Ausdrücke unter Verwendung des Operators «&&» für «if»- und «while»-Blöcke stabilisiert. match value { Some(x) if let Ok(y) = compute(x) => { println!(„{}, {}“, x, y); } _ => {} }
  • Die Unterstützung für Inline-Assembler für die Architekturen PowerPC und PowerPC64 wurde stabilisiert.
  • Eine neue Charge von APIs wurde in den stabilen Bereich überführt, darunter wurden Methoden und Implementierungen von Traits stabilisiert:
    • MaybeUninit: From<[MaybeUninit; N]>
    • MaybeUninit: AsRef<[MaybeUninit; N]>
    • MaybeUninit: AsRef<[MaybeUninit]>
    • MaybeUninit: AsMut<[MaybeUninit; N]>
    • MaybeUninit: AsMut<[MaybeUninit]>
    • [MaybeUninit; N]: From<MaybeUninit
    • Cell: AsRef<[Cell; N]>
    • Cell: AsRef<[Cell]>
    • Cell: AsRef<[Cell]>
    • bool: TryFrom
    • AtomicPtr::update
    • AtomicPtr::try_update
    • AtomicBool::update
    • AtomicBool::try_update
    • AtomicIn::update
    • AtomicIn::try_update
    • AtomicUn::update
    • AtomicUn::try_update
    • cfg_select!
    • mod core::range
    • core::range::RangeInclusive
    • core::range::RangeInclusiveIter
    • core::hint::cold_path
    • ::as_ref_unchecked
    • ::as_ref_unchecked
    • ::as_mut_unchecked
    • Vec::push_mut
    • Vec::insert_mut
    • VecDeque::push_front_mut
    • VecDeque::push_back_mut
    • VecDeque::insert_mut
    • LinkedList::push_front_mut
    • LinkedList::push_back_mut
    • Layout::dangling_ptr
    • Layout::repeat
    • Layout::repeat_packed
    • Layout::extend_packed
  • Das Merkmal «const» wird in Funktionen angewendet:
    • fmt::from_fn
    • ControlFlow::is_break
    • ControlFlow::is_continue
  • In den stabilen Versionen des Toolkits wurde die Unterstützung für die Übermittlung von Spezifikationen eigener Zielplattformen an den Compiler entfernt.
  • Die unterstützten Plattformen powerpc64-unknown-linux-musl, aarch64-apple-tvos, aarch64-apple-tvos-sim, aarch64-apple-watchos, aarch64-apple-watchos-sim, aarch64-apple-visionos und aarch64-apple-visionos-sim wurden auf die zweite Support-Ebene hochgestuft, was eine Build-Garantie impliziert, jedoch keine Garantien bei der Durchführung des Test-Sets bietet.

Zusätzlich können die kürzlich angekündigten Projekte und Veranstaltungen in Verbindung mit Rust hervorgehoben werden:

  • Die Firma Canonical hat den Display-Server Mir 2.26 veröffentlicht, der eine Bibliothekssammlung zur Erstellung von Composite- Server basierend auf dem Wayland-Protokoll bereitstellt und grundlegende Funktionen von Fenstermanagern und Display-Servern umfasst. Mir ist in Projekten wie dem Composite-Manager Miracle, der Shell für Internet-Kioske Ubuntu Frame und der Desktop-Umgebung Miriway integriert.

    Die neue Version zeichnet sich durch die Möglichkeit aus, Komponenten in der Programmiersprache Rust zu entwickeln. Eine alternative Eingabeverwaltung unter Verwendung von Rust, evdev-rs, wurde implementiert, und die Arbeit an einem in Rust geschriebenen Frontend, wayland-rs, für Wayland wurde begonnen. Zu den nicht mit Rust verbundenen Änderungen in Mir gehört die Unterstützung der Wayland-Protokolle ext_image_copy_capture_v1 und input-triggers.

  • Die erste Version des Traffic-Analyzers ayaFlow wurde veröffentlicht, der in Rust geschrieben ist und das Linux-Kernel-Subsystem eBPF verwendet, um Netzwerkpakete (IPv4/TCP/UDP) und Ethernet-Frames mit minimaler Beeinträchtigung der Leistung abzufangen. Es wird eine tiefe Analyse von Anwendungsprotokollen (L7) unterstützt, z.B. die Extraktion von TLS SNI und DNS-Abfragen bei der Analyse von verschlüsseltem Verkehr. Das System ermöglicht das Führen einer Tabelle mit dem aktuellen Zustand von Verbindungen im DashMap-Format, das Speichern von Historien in SQLite und die Bereitstellung von Statistiken über eine REST-API für Prometheus.
  • Die Möglichkeit zur Erstellung von Multithread-Anwendungen in Rust, die die Funktionen std::thread nutzen und auf dem GPU-Seite ausgeführt werden, wurde implementiert.

Quelle: opennet.ru

60GB SSD 8Gb DDR4