Uitgave van de programmeertaal Rust 1.75 en unikernel Hermit 0.6.7

De release van de algemene programmeertaal Rust 1.75, opgericht door het Mozilla-project, maar nu ontwikkeld onder auspiciën van de onafhankelijke non-profitorganisatie Rust Foundation, is gepubliceerd. De taal is gericht op geheugenveiligheid en biedt de middelen om een ​​hoog parallellisme te bereiken bij het uitvoeren van taken, terwijl het gebruik van een garbage collector en runtime wordt vermeden (runtime wordt beperkt tot basisinitialisatie en onderhoud van de standaardbibliotheek).

De geheugenbeheertechnieken van Rust bevrijden de ontwikkelaar van pointermanipulatiefouten en beschermen tegen problemen die voortkomen uit geheugenmanipulatie op laag niveau, zoals after-free toegang, null pointer-dereferenties, bufferoverruns en dergelijke. Om bibliotheken te distribueren, de assemblage te garanderen en afhankelijkheden te beheren, ontwikkelt het project de Cargo-pakketbeheerder. De kratten.io-repository wordt ondersteund voor het hosten van bibliotheken.

Geheugenveiligheid wordt in Rust afgedwongen tijdens het compileren door middel van referentiecontrole, het volgen van objecteigendom, overweging van de levensduur van objecten (scoping) en evaluatie van geheugentoegang tijdens runtime. Rust biedt ook bescherming tegen overflows van gehele getallen, vereist dat variabelewaarden vóór gebruik worden geïnitialiseerd, heeft een betere foutafhandeling in de standaardbibliotheek, gebruikt standaard het concept van onveranderlijke referenties en variabelen en biedt sterke statische typering om logische fouten te minimaliseren.

Belangrijkste innovaties:

  • De mogelijkheid toegevoegd om “async fn” en de “->impl Trait”-notatie te gebruiken in privé-kenmerken. Met behulp van bijvoorbeeld “->impl Trait” kunt u een trait-methode schrijven die een iterator retourneert: trait Container { fn items(&self) -> impl Iterator; } impl Container voor MyContainer { fn items(&self) -> impl Iterator { self.items.iter().cloned() } }

    U kunt ook eigenschappen maken met behulp van "async fn": trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // wordt uitgebreid naar: // fn fetch(&self, url: Url) -> impl Future; }

  • API toegevoegd voor het berekenen van byte-offsets ten opzichte van pointers. Bij het werken met kale pointers (“*const T” en “*mut T”) kunnen bewerkingen nodig zijn om een ​​offset aan de pointer toe te voegen. Voorheen was het hiervoor mogelijk om een ​​constructie als “::add(1)” te gebruiken, waarbij het aantal bytes werd opgeteld dat overeenkomt met de grootte van “size_of::()”. De nieuwe API vereenvoudigt deze bewerking en maakt het mogelijk om byte-offsets te manipuleren zonder eerst de typen naar "*const u8" of "*mut u8" te casten.
    • pointer::byte_add
    • pointer::byte_offset
    • pointer::byte_offset_from
    • pointer::byte_sub
    • pointer::wrapping_byte_add
    • pointer::wrapping_byte_offset
    • pointer::wrapping_byte_sub
  • Voortgezet werk om de prestaties van de rustc-compiler te verbeteren. De BOLT-optimalisatie toegevoegd, die in de post-linkfase draait en informatie uit een vooraf opgesteld uitvoeringsprofiel gebruikt. Door BOLT te gebruiken, kunt u de uitvoering van de compiler met ongeveer 2% versnellen door de lay-out van de bibliotheekcode librustc_driver.so te wijzigen voor een efficiënter gebruik van de processorcache.

    Inclusief het bouwen van de rustc-compiler met de "-Ccodegen-units=1" optie om de kwaliteit van de optimalisatie in LLVM te verbeteren. De uitgevoerde tests laten een prestatieverbetering zien in het geval van de “-Ccodegen-units=1” build met ongeveer 1.5%. De toegevoegde optimalisaties zijn standaard alleen ingeschakeld voor het x86_64-unknown-linux-gnu-platform.

    De eerder genoemde optimalisaties zijn door Google getest om de bouwtijd van Android-platformcomponenten geschreven in Rust te verkorten. Door “-C codegen-units=1” te gebruiken bij het bouwen van Android konden we de omvang van de toolkit met 5.5% verkleinen en de prestaties met 1.8% verhogen, terwijl de bouwtijd van de toolkit zelf bijna verdubbelde.

    Het inschakelen van link-time garbage collection (“--gc-sections”) bracht de prestatiewinst tot 1.9%, waardoor link-time optimalisatie (LTO) tot 7.7% mogelijk werd, en profielgebaseerde optimalisaties (PGO) tot 19.8%. In de finale werden optimalisaties toegepast met behulp van het BOLT-hulpprogramma, waardoor de bouwsnelheid kon worden verhoogd tot 24.7%, maar de omvang van de toolkit met 10.9% toenam.

    Uitgave van de programmeertaal Rust 1.75 en unikernel Hermit 0.6.7

  • Een nieuw deel van de API is overgebracht naar de stabiele categorie, inclusief de methoden en implementaties van eigenschappen:
    • Atomair*::van_ptr
    • Bestandstijden
    • FileTimesExt
    • Bestand::set_modified
    • Bestand::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Optie::as_slice
    • Optie::as_mut_slice
    • pointer::byte_add
    • pointer::byte_offset
    • pointer::byte_offset_from
    • pointer::byte_sub
    • pointer::wrapping_byte_add
    • pointer::wrapping_byte_offset
    • pointer::wrapping_byte_sub
  • Het attribuut “const”, dat de mogelijkheid bepaalt om het in elke context te gebruiken in plaats van constanten, wordt gebruikt in de functies:
    • Ipv6Addr::to_ipv4_mapped
    • MisschienUninit::assume_init_read
    • Misschien Unitit:: op nul gezet
    • mem::discriminerend
    • mem::op nul gezet
  • Het derde ondersteuningsniveau is geïmplementeerd voor de platforms csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd en mipsel-unknown-netbsd. Het derde niveau omvat basisondersteuning, maar zonder geautomatiseerd testen, het publiceren van officiële builds of het controleren of de code kan worden gebouwd.

Daarnaast kunnen we een nieuwe versie van het Hermit-project opmerken, dat een gespecialiseerde kernel (unikernel) ontwikkelt, geschreven in de Rust-taal, die tools biedt voor het bouwen van op zichzelf staande applicaties die zonder extra lagen op een hypervisor of kale hardware kunnen draaien. en zonder besturingssysteem. Wanneer de applicatie is gebouwd, is deze statisch gekoppeld aan een bibliotheek, die zelfstandig alle noodzakelijke functionaliteit implementeert, zonder gebonden te zijn aan de OS-kernel en systeembibliotheken. De projectcode wordt gedistribueerd onder Apache 2.0- en MIT-licenties. Assembly wordt ondersteund voor het zelfstandig uitvoeren van applicaties geschreven in Rust, Go, Fortran, C en C++. Het project ontwikkelt ook een eigen bootloader waarmee je Hermit kunt starten met QEMU en KVM.

Bron: opennet.ru

Voeg een reactie