Rust 1.88 veröffentlicht. Betriebssystem Munal und das Tool rsched in Rust

Die Veröffentlichung der allgemeinen Programmiersprache Rust 1.88 wurde bekannt gegeben, die ursprünglich von Mozilla gestartet wurde, aber jetzt von der unabhängigen, gemeinnützigen Rust Foundation weiterentwickelt wird. Die Sprache konzentriert sich auf eine sichere Speicherverwaltung und bietet Mittel für hohe Aufgabenparallelität, ohne dabei einen Garbage Collector oder umfangreiche Runtime-Umgebungen zu verwenden (die Runtime beschränkt sich auf grundlegende Initialisierungen und die Unterstützung 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:

  • Die Möglichkeit, mehrere "let"-Ausdrücke innerhalb von bedingten Blöcken "if" und "while" unter Verwendung des Operators "&&" (logisches UND) anzugeben, wurde hinzugefügt. "Let"-Ausdrücke können mit booleschen bedingten Ausdrücken kombiniert werden. Variablen, die in "let"-Ausdrücken deklariert wurden, können in nachfolgenden bedingten Ausdrücken sowie innerhalb der Blöcke "if" und "while" verwendet werden. if let Channel::Stable(v) = release_info() && let Semver { major, minor, .. } = v && major == 1 && minor == 88 {
  • Die Unterstützung für das Schreiben von "nackten" Funktionen, die mit dem Attribut "#[unsafe(naked)]" gekennzeichnet sind und einen einzigen Aufruf von "naked_asm!" enthalten, wurde hinzugefügt. Diese Funktionen haben keinen Epilog und Prolog, die vom Compiler generiert werden, was es dem Entwickler ermöglicht, den Assemblercode, der an die Funktion angehängt wird, vollständig zu kontrollieren. "Nackte" Funktionen enthalten nur die vom Entwickler angegebenen Assembleranweisungen und schließen keine speziellen Argument- und Rückgabeverarbeiter ein, die vom Compiler hinzugefügt werden. "Nackte" Funktionen werden als benutzerfreundlichere Alternative zu Funktionen betrachtet, die im Block "global_asm!" definiert sind. #[unsafe(naked)] pub unsafe extern "sysv64" fn wrapping_add(a: u64, b: u64) -> u64 { core::arch::naked_asm!( "add rax, rdi, rsi", "ret" ); }
  • In der Prädikatsprache, die in den Attributen der bedingten Kompilierung „cfg“ und „cfg_attr“ verwendet wird (die es ermöglichen, Codeabschnitte basierend auf bestimmten Bedingungen ein- oder auszuschalten), wurde die Unterstützung für die booleschen Literale „true“ und „false“ hinzugefügt, die mit Konfigurationen identifiziert werden, die immer eingeschaltet oder immer ausgeschaltet sind. Diese Literale können auch im Makro „cfg!“ und in den „[target]“-Tabellen in Manifesten und Konfigurationen für Cargo verwendet werden. Die Ausdrücke cfg(true) und cfg(false) können anstelle von cfg(all()) und cfg(any()) angewendet werden, um die eigenen Absichten klarer auszudrücken.
  • Der Paketmanager Cargo hat die automatische Ausführung der Müllabfuhr zum Löschen des Caches im Benutzer-Homeverzeichnis eingeführt. Zuvor wurden im Cache gespeicherte Pakete mit heruntergeladenen Abhängigkeiten nicht gelöscht, was zu einem kontinuierlichen Anstieg des Speicherplatzverbrauchs führte. Das aktivierte Müllabfuhrmechanismus entfernt automatisch crate-Dateien, die extern heruntergeladen wurden und auf die seit mehr als 3 Monaten nicht zugegriffen wurde, sowie lokal installierte crate-Dateien, auf die seit mehr als einem Monat nicht zugegriffen wurde. Die Cache-Bereinigung wird nicht ausgeführt, wenn in Cargo die Optionen „—offline“ oder „—frozen“ verwendet werden.
  • Eine neue Reihe von APIs wurde stabilisiert und in die stabile Version überführt, einschließlich stabilisierter Methoden und Implementierungen von Traits:
    • Cell::update
    • impl Default für *const T
    • impl Default für *mut T
    • mod ffi::c_str
    • HashMap::extract_if
    • HashSet::extract_if
    • hint::select_unpredictable
    • proc_macro::Span::line
    • proc_macro::Span::column
    • proc_macro::Span::start
    • proc_macro::Span::end
    • proc_macro::Span::file
    • proc_macro::Span::local_file
    • ::as_chunks
    • ::as_rchunks
    • ::as_chunks_unchecked
    • ::as_chunks_mut
    • ::as_rchunks_mut
    • ::as_chunks_unchecked_mut
  • Das Kennzeichen „const“ wird in Funktionen angewendet:
    • NonNull::replace
    • ::replace
    • std::ptr::swap_nonoverlapping
    • Cell::replace
    • Cell::get
    • Cell::get_mut
    • Cell::from_mut
    • Cell::as_slice_of_cells
  • Die erste Unterstützung für die Zielplattform i686-pc-windows-gnu wurde entfernt.

Zusätzlich können folgende Ereignisse im Zusammenhang mit Rust erwähnt werden:

  • Das Projekt Munal OS entwickelt ein experimentelles Betriebssystem, das in Rust geschrieben ist und auf dem Konzept von Unikernels basiert. In Munal OS wird keine preemptive Multitasking verwendet, keine Seitenzuordnung und der virtuelle Adressraum bleibt unberührt (der Speicher wird von UEFI verwaltet). Der Kernel und die Anwendungen laufen im selben Adressraum unter Verwendung eines Sicherheitsmodells, das auf WASM-Sandbox-Isolation basiert (es wird eine wasmi-Engine zum Ausführen von Anwendungen in Form von WebAssembly-Bytecode eingebaut).

    Das Betriebssystem bietet eine grafische Benutzeroberfläche und unterstützt die Steuerung über Tastatur und Maus. Für die Entwicklung grafischer Anwendungen steht ein hauseigenes Toolkit mit einer Widget-Bibliothek zur Verfügung. Für die Netzwerkkommunikation werden ein TCP-Stack und ein Netzwerktreiber angeboten. Zu den für Munal OS verfügbaren Anwendungen gehören: ein Webbrowser mit grundlegender Unterstützung für HTML und HTTPS, ein Texteditor sowie ein Terminal zur Ausführung von Python-Code. Der Code ist unter der MIT-Lizenz veröffentlicht.

    Rust 1.88 veröffentlicht. Betriebssystem Munal und das Tool rsched in Rust
  • Die Kernversion Asterinas 0.15.2 wurde veröffentlicht, entwickelt in Rust und bietet eine ABI, die mit dem Linux-Kernel kompatibel ist. Der Kernel unterstützt die Architekturen x86-64 und RISC-V und implementiert 206 von 368 Linux-Systemaufrufen. An der Entwicklung des Kernels sind 45 Entwickler beteiligt, hauptsächlich aus verschiedenen chinesischen Universitäten. Der Kernel basiert auf der „framekernel“-Architektur, bei der die Kernelkomponenten im gemeinsamen Adressraum platziert sind, und die Sicherheit durch logische Trennung von sicherem Code und potenziell unsicherem Code erreicht wird. Alle Systemaufrufe, Dateisysteme und Treiber werden auf der Ebene der OS-Dienste implementiert und dürfen keine unsicheren Blöcke enthalten. Der Code wird unter der MPL 2.0-Lizenz verbreitet.
  • Für den Linux-Kernel wurde das Tool rsched entwickelt, das es ermöglicht, Statistiken über die Arbeit des Task-Schedulers zu analysieren. In der Praxis erlaubt das Tool die Bewertung der Entscheidungen des Schedulers in Bezug auf die Ressourcenzuteilung an Prozesse sowie die Verfolgung von Verzögerungen, die beim Scheduling entstehen. Zur Datenerfassung im Kernel wird die BPF-Subsystem verwendet, während das im Userspace laufende Tool in Rust geschrieben ist. Der Autor des Tools ist Chris Mason, der Schöpfer und Hauptarchitekt des Dateisystems Btrfs.
  • Das Unternehmen Collabora hat die Entwicklung einer Variante des Coccinelle-Tools für die Programmiersprache Rust bekannt gegeben. Coccinelle wurde ursprünglich zur Automatisierung der Suche und Umwandlung von C-Code im Linux-Kernel entwickelt. Die Transformationen werden in Form von Regeln definiert, die abstrakten Patches ähneln und nicht an eine bestimmte Position im Code gebunden sind.
  • Die GNOME-Entwickler haben die Bibliothek glycin zur Bildübertragung vorgestellt, die in Rust geschrieben wurde und ein Bilddecoding mit Sandbox-Isolation ermöglicht. Die dekodierten Inhalte können über gdk::Textures bereitgestellt und Metadaten extrahiert werden. Es gibt Bindings für die Verwendung von glycin in GTK4 sowie ein Backend zur Integration von glycin in die GdkPixbuf-Bibliothek, die in GNOME zur Bildübertragung genutzt wird. Glycin wird bereits im Standard-Bildbetrachter Loupe verwendet, der in GNOME integriert ist. Das Backend für GdkPixbuf ermöglicht die Verwendung von glycin in GNOME Shell, in Miniatur-Generatoren und in beliebigen GNOME-Anwendungen, ohne dass Änderungen an diesen Programmen erforderlich sind.

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