Veröffentlichung von Rust 1.88. Das Betriebssystem Munal und das Tool rsched in Rust

Die Veröffentlichung der Programmiersprache Rust 1.88, die ursprünglich von Mozilla entwickelt wurde, jetzt aber unter der Schirmherrschaft der unabhängigen gemeinnützigen Organisation Rust Foundation weiterentwickelt wird, ist erfolgt. Die Sprache konzentriert sich auf sichere Speicherverwaltung und bietet Mittel zur Erreichung hoher Parallelität bei der Aufgabenbearbeitung, ohne einen Garbage Collector oder Laufzeitumgebungen (runtime besteht nur aus grundlegenden Initialisierungen und der Unterstützung der Standardbibliothek) zu verwenden.

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:

  • Die Möglichkeit, mehrere "let"-Ausdrücke innerhalb von bedingten Blöcken "if" und "while" unter Verwendung des logischen Operators "&&" zu kombinieren, wurde hinzugefügt. "Let"-Ausdrücke können mit booleschen Bedingungen kombiniert werden. Variablen, die in "let"-Ausdrücken deklariert werden, können in nachfolgenden Bedingungen sowie in "if"- und "while"-Blöcken verwendet werden. if let Channel::Stable(v) = release_info() && let Semver { major, minor, .. } = v && major == 1 && minor == 88 {
  • Die Unterstützung für die Erstellung von „nackten“ Funktionen, die mit dem Attribut "#[unsafe(naked)]" gekennzeichnet sind und einen Aufruf von "naked_asm!" enthalten, wurde hinzugefügt. So erzeugte Funktionen haben keinen Epilog und kein Prolog, die vom Compiler generiert wurden, wodurch der Entwickler den gesamten Assemblercode, der an die Funktion angehängt wird, vollständig kontrollieren kann. Eine „nackte“ Funktion enthält nur die vom Entwickler angegebenen Assemblerbefehle und schließt keine spezifischen Argument- und Rückgabeverarbeitungen ein, die der Compiler hinzufügt. „Nackte“ Funktionen gelten als bequemere Alternative zu Funktionen, 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" ); }
  • Die Sprache der Prädikate, die in den Attributen für bedingte Kompilation "cfg" und "cfg_attr" verwendet werden (die es ermöglichen, Teile des Codes basierend auf bestimmten Bedingungen ein- oder auszuschalten), hat nun die Unterstützung für boolesche Literale "true" und "false" erhalten, die mit Konfigurationen assoziiert sind, die immer ein- 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 als Ersatz für cfg(all()) und cfg(any()) verwendet werden, um die Absichten klarer auszudrücken.
  • Im Paketmanager Cargo ist der automatische Start des Garbage Collectors zur Bereinigung des Caches im Benutzer-Homeverzeichnis aktiviert. Früher wurden im Cache gespeicherte Pakete mit heruntergeladenen Abhängigkeiten nicht bereinigt, was zu einem kontinuierlichen Anstieg des Speicherplatzverbrauchs führte. Der aktivierte Garbage-Collection-Mechanismus entfernt automatisch heruntergeladene crate-Dateien, 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 gestartet, wenn die Optionen „—offline“ oder „—frozen“ in Cargo verwendet werden.
  • Eine neue Charge von APIs wurde in den stabilen Bereich überführt, darunter wurden Methoden und Implementierungen von Traits stabilisiert:
    • Cell::update
    • impl Default for *const T
    • impl Default for *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 Merkmal «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 Ebene der Unterstützung für die Zielplattform i686-pc-windows-gnu wurde entfernt.

Zusätzlich können bemerkenswerte Ereignisse in Bezug auf Rust erwähnt werden:

  • Das Projekt Munal OS entwickelt ein experimentelles Betriebssystem, das in Rust geschrieben und auf dem Konzept des Unikernels basiert. In Munal OS wird keine präemptive Multitasking verwendet, das Speichermanagement und der virtuelle Adressraum (es wird ein UEFI-Speicherlayout verwendet). Der Kernel und die Anwendungen laufen im selben Adressraum unter Verwendung eines Sicherheitsmodells, das auf Sandbox-Isolierung basieren (einschließlich des wasmi-Engines zum Ausführen von Anwendungen in WebAssembly-Binärform).

    Das Betriebssystem ist mit einer grafischen Benutzeroberfläche ausgestattet und unterstützt die Steuerung über Tastatur und Maus. Für die Entwicklung grafischer Anwendungen wird ein eigenes Toolkit mit einer Widget-Bibliothek verwendet. Für die Netzwerkkommunikation stehen ein TCP-Stack und ein Netzwerktreiber zur Verfügung. Zu den für Munal OS verfügbaren Anwendungen gehören: ein Webbrowser mit grundlegender Unterstützung für HTML und HTTPS, ein Texteditor und ein Terminal zur Ausführung von Python-Code. Der Code ist unter der MIT-Lizenz offen.

    Veröffentlichung von Rust 1.88. Das Betriebssystem Munal und das Tool rsched in Rust
  • Die Version 0.15.2 des Asterinas-Kernels wurde veröffentlicht, der in Rust geschrieben ist und eine ABI bietet, 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. Am Entwicklungsprozess des Kernels sind 45 Entwickler beteiligt, überwiegend aus verschiedenen chinesischen Universitäten. Der Kernel ist unter Verwendung der „framekernel“-Architektur aufgebaut, bei der die Kernelkomponenten im gemeinsamen Adressraum platziert werden, wobei Sicherheit durch logische Trennung von sicherem Code und Code, bei dem Sicherheitsprobleme auftreten können, erreicht wird. Alle Systemaufrufe, Dateisysteme und Treiber werden auf der Ebene der OS Services implementiert und können 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 die Analyse von Statistiken zur Arbeitsweise des Task-Schedulers ermöglicht. In der Praxis erlaubt das Tool die Bewertung der Entscheidungen des Schedulers in Bezug auf die Bereitstellung von Ressourcen für Prozesse sowie das Verfolgen von Verzögerungen, die beim Scheduling auftreten. Zur Datensammlung im Kernel wird die BPF-Subsystem verwendet, und das im Benutzerraum laufende Werkzeug ist in Rust geschrieben. Der Autor des Tools ist Chris Mason, der Schöpfer und Hauptarchitekt des Btrfs-Dateisystems.
  • Das Unternehmen Collabora hat an einer Version des Coccinelle-Werkzeugs für die Sprache Rust gearbeitet. Coccinelle wurde ursprünglich zur Automatisierung der Suche und Umwandlung von C-Code im Linux-Kernel entwickelt. Die Umwandlungen werden in Form von Regeln angegeben, die abstrakten Patches ähneln und nicht an einer bestimmten Position im Code gebunden sind.
  • Die Entwickler von GNOME haben die Bibliothek glycin vorgestellt, die auf Rust basiert und das Dekodieren von Bildern mit Sandbox-Isolation ermöglicht. Die Lieferung des dekodierten Inhalts erfolgt über gdk::Textures, und es können Metadaten extrahiert werden. Es werden Wrapper zur Verwendung von glycin in GTK4 sowie ein Backend zur Einbindung von glycin in die GdkPixbuf-Bibliothek bereitgestellt, die in GNOME zum Laden von Bildern verwendet wird. Glycin wird bereits im standardmäßig in GNOME angebotenen Bildbetrachter Loupe verwendet. Gleichzeitig ermöglicht das Backend für GdkPixbuf die Verwendung von glycin in GNOME Shell, Miniatur-Generatoren und beliebigen GNOME-Anwendungen, ohne dass Änderungen an diesen Programmen erforderlich sind.

Quelle: opennet.ru

60GB SSD 8Gb DDR4