Uitgave Rust 1.88. Besturingssysteem Munal en utiliteit rsched op Rust

De release van de programmeertaal Rust 1.88 is gepubliceerd. Deze algemeen toepasbare taal is oorspronkelijk ontwikkeld door het Mozilla-project, maar wordt nu verder ontwikkeld onder de auspiciën van de onafhankelijke non-profitorganisatie Rust Foundation. De taal richt zich op veilige omgang met geheugen en biedt middelen om een hoge mate van parallelisme te bereiken zonder gebruik te maken van een garbage collector en runtime (de runtime bestaat uit een basisinitialisatie en de ondersteuning van de standaardbibliotheek).

Geheugenmethoden in Rust helpen ontwikkelaars om fouten bij het manipuleren van pointers te voorkomen en beschermen tegen problemen die voortkomen uit laag-niveau geheugenwerk, zoals toegang tot geheugen na vrijgave, derefereren van null pointers, buffer overflows, enz. Voor het verspreiden van bibliotheken, het garanderen van builds en het beheren van projectafhankelijkheden is er een pakketbeheerder genaamd Cargo ontwikkeld. Voor het plaatsen van bibliotheken wordt de repository crates.io ondersteund.

Veilige geheugenwerking in Rust wordt tijdens de compilatie gegarandeerd door middel van referentiecontrole, het bijhouden van eigenaarschap van objecten, het in acht nemen van de levensduur van objecten (scope) en het evalueren van toegangsrechten tot geheugen tijdens de uitvoering van code. Rust biedt ook middelen om integer-overflows te voorkomen, vereist dat waarden van variabelen voor gebruik worden geïnitialiseerd, behandelt fouten beter in de standaardbibliotheek, past het concept van onveranderlijke (immutable) referenties en variabelen als standaard toe en biedt sterke statische type-onderzoek voor het minimaliseren van logische fouten.

Belangrijkste vernieuwingen:

  • Er is een mogelijkheid toegevoegd om meerdere 'let'-uitdrukkingen binnen de conditionele blokken 'if' en 'while' op te geven, waarbij de operator '&&' (logische EN) wordt gebruikt om ze te combineren. 'Let'-uitdrukkingen kunnen worden gecombineerd met booleaanse conditionele uitdrukkingen. Variabelen die in let-uitdrukkingen zijn gedeclareerd, kunnen worden gebruikt in daaropvolgende conditionele uitdrukkingen, evenals binnen de blokken 'if' en 'while'. if let Channel::Stable(v) = release_info() && let Semver { major, minor, .. } = v && major == 1 && minor == 88 {
  • Ondersteuning voor het schrijven van 'naakte' functies, gemarkeerd met het attribuut '#[unsafe(naked)]' en die één aanroep van 'naked_asm!' bevatten, is toegevoegd. Deze functies hebben geen epiloog en proloog die door de compiler zijn gegenereerd, waardoor de ontwikkelaar volledige controle heeft over de bij de functie behorende assemblagecode ('naakte' functies bevatten alleen de door de ontwikkelaar aangegeven assemblage-instructies en omvatten geen speciale handlers voor argumenten en geretourneerde waarden die door de compiler zijn toegevoegd). 'Naakte' functies worden beschouwd als een handigere alternatieve oplossing voor functies die zijn gedefinieerd in het blok 'global_asm!'. #[unsafe(naked)] pub unsafe extern 'sysv64' fn wrapping_add(a: u64, b: u64) -> u64 { core::arch::naked_asm!( 'add rax, rdi, rsi', 'ret' ); }
  • In de predicatentaal, die wordt gebruikt in de attributen voor voorwaardelijke compilatie 'cfg' en 'cfg_attr' (die het mogelijk maken om delen van de code in of uit te schakelen op basis van de opgegeven voorwaarden), is ondersteuning voor booleaanse literalwaarden 'true' en 'false' toegevoegd, die zijn geïdentificeerd met configuraties die altijd aan of altijd uit zijn. Deze literalen kunnen ook worden gebruikt in de macro 'cfg!' en in de tabellen '[target]' in manifests en configuraties voor Cargo. De expressies cfg(true) en cfg(false) kunnen worden gebruikt in plaats van cfg(all()) en cfg(any()) om deze intenties duidelijker te maken.
  • In de pakketbeheerder Cargo is er een automatische start van de garbage collector ingeschakeld om de cache in de home directory van de gebruiker op te schonen. Eerder opgeslagen pakketten in de cache met gedownloade afhankelijkheden werden niet opgeruimd, wat leidde tot een constante toename van het gebruik van schijfruimte. Het ingeschakelde garbage collection mechanisme zal automatisch afgesloten crate-bestanden verwijderen die meer dan 3 maanden niet zijn aangesproken, en lokaal geïnstalleerde crate-bestanden die meer dan een maand niet zijn aangesproken. De cache-opruiming wordt niet uitgevoerd bij gebruik van de opties "--offline" of "--frozen" in cargo.
  • Een nieuwe lading API's is gestabiliseerd, inclusief gestabiliseerde methoden en implementaties van traits:
    • 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
  • De eigenschap "const" is toegepast in de functies:
    • NonNull::replace
    • ::replace
    • std::ptr::swap_nonoverlapping
    • Cell::replace
    • Cell::get
    • Cell::get_mut
    • Cell::from_mut
    • Cell::as_slice_of_cells
  • De eerste laag van de ondersteuning voor het doelplatform i686-pc-windows-gnu is verwijderd.

Verder kunnen de met Rust verbonden gebeurtenissen worden opgemerkt:

  • Het Munal OS-project ontwikkelt een experimenteel besturingssysteem, geschreven in Rust en gebaseerd op het unikernel-concept. In Munal OS wordt geen preemptive multitasking, geheugenpagina-mapping en virtuele geheugenruimtes toegepast (er wordt gebruik gemaakt van geheugenindeling volgens UEFI). De kernel en applicaties draaien in één adresruimte met behulp van een beveiligingsmodel op basis van sandbox-isolatie WASM (inclusief de wasmi-engine voor het uitvoeren van applicaties in de vorm van WebAssembly-bytecode).

    Het besturingssysteem is uitgerust met een grafische interface en ondersteunt bediening via toetsenbord en muis. Voor het ontwikkelen van grafische applicaties wordt een eigen toolkit met widgetbibliotheek gebruikt. Voor netwerkinteractie worden een TCP-stack en een stuurprogramma voor netwerkapparatuur aangeboden. Onder de beschikbare applicaties voor Munal OS bevinden zich: een webbrowser met basisondersteuning voor HTML en HTTPS, een teksteditor en een terminal voor het uitvoeren van code in Python. De code is open onder de MIT-licentie.

    Uitgave Rust 1.88. Besturingssysteem Munal en utiliteit rsched op Rust
  • De kernel Asterinas 0.15.2 is uitgebracht, geschreven in Rust en biedt een ABI die compatibel is met de Linux-kernel. De kernel ondersteunt de architecturen x86-64 en RISC-V en implementeert 206 van de 368 systeemoproepen van Linux. Aan de ontwikkeling van de kernel nemen 45 ontwikkelaars deel, voornamelijk van verschillende Chinese universiteiten. De kernel is gebouwd met de 'framekernel'-architectuur, waarbij de componenten van de kernel in dezelfde adresruimte worden geplaatst, en de veiligheid wordt bereikt door de logische scheiding van veilige code en code waarin veiligheidsproblemen kunnen optreden. Alle systeemoproepen, bestandssystemen en stuurprogramma's worden uitgevoerd op het niveau van OS Services en kunnen geen unsafe-blokken bevatten. De code wordt verspreid onder de MPL 2.0-licentie.
  • Voor de Linux-kernel is de utiliteit rsched voorbereid, die de statistieken van de taakplanner analyseert. In de praktijk maakt de utiliteit het mogelijk om de beslissingen van de planner met betrekking tot de toewijzing van middelen aan processen te evalueren, evenals om vertragingen die optreden tijdens de planning bij te houden. Voor het verzamelen van gegevens in de kernel wordt het BPF-systeem gebruikt, en het gebruikersruimte-gereedschap is geschreven in Rust. De auteur van de utiliteit is Chris Mason, de maker en hoofdarchitect van het bestandssysteem Btrfs.
  • Het bedrijf Collabora heeft de ontwikkeling aangekondigd van een versie van de Coccinelle-toolkit voor de programmeertaal Rust. Coccinelle is oorspronkelijk bedoeld voor de automatisering van het zoeken naar en het transformeren van code in C binnen de Linux-kernel. De transformaties worden gedefinieerd in de vorm van regels die lijken op abstracte patches, niet gebonden aan een specifieke positie in de code.
  • De ontwikkelaars van GNOME hebben een bibliotheek gepresenteerd voor het laden van afbeeldingen, glycin, geschreven in Rust en die decoding van afbeeldingen biedt met behulp van sandbox-isolatie. Het is mogelijk om gedecodeerde inhoud via gdk::Textures te retourneren en om metadata te extraheren. Er zijn wrappers beschikbaar voor het gebruik van glycin in GTK4, evenals een backend voor het inschakelen van glycin in de GdkPixbuf-bibliotheek, die in GNOME wordt gebruikt voor het laden van afbeeldingen. Glycin is al geïntegreerd in de standaard afbeeldingsviewer Loupe die in GNOME wordt aangeboden. De backend voor GdkPixbuf maakt het mogelijk om glycin te gebruiken in GNOME Shell, miniatuurgenerators en willekeurige GNOME-toepassingen, zonder wijzigingen aan deze programma's aan te brengen.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster