Verëffentlechung vun der programméiere Sprooch Rust 1.75 an unikernel Eremit 0.6.7

D'Verëffentlechung vun der Rust 1.75 allgemeng Zweck Programméierungssprooch, gegrënnt vum Mozilla-Projet, awer elo entwéckelt ënner der Regie vun der onofhängeger Asbl Rust Foundation, gouf publizéiert. D'Sprooch konzentréiert sech op d'Erënnerungssécherheet a stellt d'Moyene fir en héije Jobparallelismus z'erreechen, während d'Benotzung vun engem Gerempels a Runtime vermeit (Runtime gëtt op Basisinitialiséierung an Ënnerhalt vun der Standardbibliothéik reduzéiert).

Rust d'Erënnerungsveraarbechtungsmethoden retten den Entwéckler vu Feeler beim Manipulatioun vu Pointer a schützt géint Probleemer déi entstinn wéinst nidderegen Niveau Memory Handhabung, sou wéi Zougang zu engem Erënnerungsberäich nodeems se befreit gouf, Nullpointer ofgeleent, Pufferiwwerschlag, etc. Fir Bibliothéiken ze verdeelen, Builds ze bidden an Ofhängegkeeten ze managen, entwéckelt de Projet de Cargo Package Manager. De crates.io Repository gëtt ënnerstëtzt fir Bibliothéiken ze hosten.

Gedächtnissécherheet gëtt a Rust zur Zesummesetzungszäit zur Verfügung gestallt duerch Referenzprüfung, Verfollegung vum Objektbesëtzer, Verfollegung vun Objektliewenszäiten (Scope), an d'Korrektheet vum Gedächtniszougang wärend der Code Ausféierung bewäerten. Rust bitt och Schutz géint ganz Zuelen Iwwerschwemmungen, erfuerdert obligatoresch Initialiséierung vu variabelen Wäerter virum Gebrauch, handhabt Feeler besser an der Standardbibliothéik, applizéiert d'Konzept vun onverännerleche Referenzen a Variablen als Standard, bitt staark statesch Tippen fir logesch Feeler ze minimiséieren.

Haaptinnovatiounen:

  • D'Fäegkeet bäigefüügt fir "async fn" an d'"-> impl Trait" Notatioun a privaten Eegeschaften ze benotzen. Zum Beispill, mat "->impl Trait" kënnt Dir eng Traitmethod schreiwen déi en Iterator zréckkënnt: Trait Container { fn items(&self) -> impl Iterator; } impl Container fir MyContainer { fn items(&self) -> impl Iterator { self.items.iter().cloned() } }

    Dir kënnt och Charaktere mat "async fn" erstellen: trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // gëtt erweidert op: // fn fetch(&self, url: Url) -> impl Future; }

  • Added API fir d'Berechnung vun Byte Offsets relativ zu Pointer. Wann Dir mat bloe Pointer schafft ("*const T" an "*mut T"), kënnen Operatiounen erfuerderlech sinn fir en Offset zum Zeiger ze addéieren. Virdrun war et méiglech eng Konstruktioun wéi "::add (1)" ze benotzen, andeems d'Zuel vun de Bytes entsprécht der Gréisst vun "size_of::()". Déi nei API vereinfacht dës Operatioun a mécht et méiglech Byte-Offsets ze manipuléieren ouni éischt d'Typen op "*const u8" oder "*mut u8" ze 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
  • Weider Aarbecht fir d'Performance vum Rustc Compiler ze erhéijen. De BOLT Optimizer bäigefüügt, deen an der Post-Link Etapp leeft an Informatioun aus engem virbereeten Ausféierungsprofil benotzt. D'Benotzung vun BOLT erlaabt Iech d'Ausféierung vum Compiler ëm ongeféier 2% ze beschleunegen andeems Dir de Layout vum librustc_driver.so Bibliothéikscode ännert fir méi effizient Notzung vum Prozessor-Cache.

    Abegraff Bau vum Rustc Compiler mat der "-Ccodegen-units=1" Optioun fir d'Qualitéit vun der Optimisatioun am LLVM ze verbesseren. D'Tester, déi duerchgefouert goufen, weisen eng Erhéijung vun der Leeschtung am Fall vun den "-Ccodegen-units=1" ëm ongeféier 1.5%. Déi zousätzlech Optimisatiounen sinn als Standard nëmme fir d'x86_64-unknown-linux-gnu Plattform aktivéiert.

    Déi virdru genannte Optimisatiounen goufen vu Google getest fir d'Bauzäit vun Android Plattform Komponenten ze reduzéieren, déi a Rust geschriwwe sinn. Mat "-C codegen-units = 1" beim Bau vun Android erlaabt eis d'Gréisst vum Toolkit ëm 5.5% ze reduzéieren an hir Leeschtung ëm 1.8% ze erhéijen, während d'Bauzäit vum Toolkit selwer bal verduebelt huet.

    D'Verbindungszäit Drecksammlung aktivéieren ("--gc-Sektiounen") huet d'Leeschtungsgewënn bis zu 1.9% bruecht, d'Linkzäitoptiméierung (LTO) bis zu 7.7% aktivéiert, a Profilbaséiert Optimisatiounen (PGO) bis zu 19.8%. An der Finale goufen Optimisatiounen mat dem BOLT Utility applizéiert, wat et méiglech gemaach huet d'Baugeschwindegkeet op 24.7% ze erhéijen, awer d'Gréisst vum Toolkit ass ëm 10.9% eropgaang.

    Verëffentlechung vun der programméiere Sprooch Rust 1.75 an unikernel Eremit 0.6.7

  • En neien Deel vun der API gouf an d'Kategorie vum Stall geplënnert, dorënner d'Methoden an d'Implementatioune vun de Charaktere goufen stabiliséiert:
    • Atomic*:: from_ptr
    • FileTimes
    • FileTimesExt
    • Datei :: set_modified
    • Datei::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Optioun :: as_slice
    • Optioun :: 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
  • Den Attribut "const", wat d'Méiglechkeet bestëmmt et an all Kontext ze benotzen anstatt Konstanten, gëtt a Funktiounen benotzt:
    • Ipv6Addr::to_ipv4_mapped
    • MaybeUninit::assume_init_read
    • VläichtUninit::null
    • mem :: diskriminant
    • mem :: null
  • Den drëtten Niveau vun der Ënnerstëtzung gouf fir d'csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd a mipsel-unknown-netbsd Plattformen implementéiert. Den drëtten Niveau beinhalt d'Basis Ënnerstëtzung, awer ouni automatiséiert Testen, offiziell Builds ze publizéieren oder ze kontrolléieren ob de Code ka gebaut ginn.

Zousätzlech kënne mir eng nei Versioun vum Eremit-Projet notéieren, deen e spezialiséierte Kernel (Unikernel) entwéckelt, geschriwwen an der Rust Sprooch, déi Tools ubitt fir selbstänneg Uwendungen ze bauen, déi uewen op engem Hypervisor oder bloe Hardware ouni zousätzlech Schichten lafen kënnen an ouni Betribssystem. Wann gebaut ass, ass d'Applikatioun statesch mat enger Bibliothéik verbonnen, déi onofhängeg all déi néideg Funktionalitéit implementéiert, ouni un den OS Kernel a Systembibliothéiken gebonnen ze sinn. De Projet Code gëtt ënner Apache 2.0 a MIT Lizenzen verdeelt. Assemblée gëtt ënnerstëtzt fir Stand-alone Ausféierung vun Uwendungen geschriwwen a Rust, Go, Fortran, C an C ++. De Projet entwéckelt och säin eegene Bootloader deen Iech erlaabt Hermit mat QEMU a KVM ze starten.

Source: opennet.ru

Setzt e Commentaire