Utjefte fan de programmeartaal Rust 1.75 en unikernel Hermit 0.6.7

De algemiene programmeertaal Rust 1.75, oprjochte troch it Mozilla-projekt mar no ûntwikkele ûnder auspysjes fan de ûnôfhinklike non-profit organisaasje Rust Foundation, is frijjûn. De taal rjochtet him op ûnthâld feilichheid en jout de middels te berikken hege baan parallelism wylst it foarkommen fan it brûken fan in garbage collector en runtime (runtime wurdt redusearre ta basis inisjalisaasje en ûnderhâld fan de standert bibleteek).

De metoaden foar ûnthâldbehanneling fan Rust besparje de ûntwikkelder fan flaters by it manipulearjen fan oanwizers en beskermje tsjin problemen dy't ûntsteane troch ûnthâldôfhanneling op leech nivo, lykas tagong krije ta in ûnthâldgebiet nei't it befrijd is, it ferwizen fan nul-oanwizers, buffer-oerrin, ensfh. Om bibleteken te fersprieden, builds te leverjen en ôfhinklikens te behearjen, ûntwikkelet it projekt de Cargo-pakketbehearder. It crates.io repository wurdt stipe foar hosting fan bibleteken.

Unthâld feilichheid wurdt foarsjoen yn Rust op it gearstallen tiid troch referinsje kontrôle, byhâlden fan foarwerp eigendom, byhâlden fan foarwerp lifetimes (omfang), en beoardielje de korrektheid fan ûnthâld tagong by koade útfiering. Rust leveret ek beskerming tsjin oerstreamingen fan heule getal, fereasket ferplichte inisjalisaasje fan fariabele wearden foar gebrûk, behannelet flaters better yn 'e standertbibleteek, tapast standert it konsept fan ûnferoarlike referinsjes en fariabelen, biedt sterke statyske typen om logyske flaters te minimalisearjen.

Wichtichste ynnovaasjes:

  • De mooglikheid tafoege om "async fn" en de notaasje "->impl Trait" te brûken yn privee eigenskippen. Bygelyks, mei "->impl Trait" kinne jo in traitmetoade skriuwe dy't in iterator werombringt: trait Container { fn items(&self) -> impl Iterator; } impl Container foar MyContainer { fn items(&self) -> impl Iterator { self.items.iter().cloned() } }

    Jo kinne ek trekken oanmeitsje mei "async fn": trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // sil útwreide wurde nei: // fn fetch(&self, url: Url) -> impl Future; }

  • Added API foar it berekkenjen fan byte offsets relatyf oan pointers. By it wurkjen mei bleate pointers ("* const T" en "* mut T"), kinne operaasjes nedich wêze om in offset ta te foegjen oan 'e pointer. Earder wie it mooglik om in konstruksje te brûken lykas "::add(1)", it tafoegjen fan it oantal bytes dat oerienkomt mei de grutte fan "size_of::()". De nije API ferienfâldiget dizze operaasje en makket it mooglik om byte-offsets te manipulearjen sûnder de typen earst te casten nei "*const u8" of "*mut u8".
    • pointer::byte_add
    • oanwizer::byte_offset
    • oanwizer::byte_offset_from
    • oanwizer::byte_sub
    • pointer::wrapping_byte_add
    • pointer::wrapping_byte_offset
    • pointer::wrapping_byte_sub
  • Trochgean wurk om de prestaasjes fan 'e rustc-kompiler te ferheegjen. De BOLT-optimizer tafoege, dy't rint yn 'e post-link-poadium en brûkt ynformaasje fan in foarôf taret útfieringsprofyl. It brûken fan BOLT lit jo de útfiering fan kompilator mei sawat 2% fersnelle troch de yndieling fan 'e librustc_driver.so-biblioteekkoade te feroarjen foar effisjinter gebrûk fan' e prosessor-cache.

    Ynbegrepen it bouwen fan de rustc-kompiler mei de opsje "-Ccodegen-units=1" om de kwaliteit fan optimalisaasje yn LLVM te ferbetterjen. De útfierde testen litte in ferheging fan prestaasjes sjen yn it gefal fan 'e "-Ccodegen-units=1" build mei sawat 1.5%. De tafoege optimisaasjes binne standert allinich ynskeakele foar it x86_64-unknown-linux-gnu-platfoarm.

    De earder neamde optimisaasjes waarden testen troch Google om de boutiid fan Android-platfoarmkomponinten skreaun yn Rust te ferminderjen. It brûken fan "-C codegen-units=1" by it bouwen fan Android liet ús de grutte fan 'e toolkit mei 5.5% ferminderje en syn prestaasjes mei 1.8% ferheegje, wylst de boutiid fan 'e toolkit sels hast ferdûbele.

    It ynskeakeljen fan jiskefet yn keppelingstiid ("--gc-seksjes") brocht de prestaasjeswinst oant 1.9%, it ynskeakeljen fan keppeling-tiidoptimalisaasje (LTO) oant 7.7%, en profyl-basearre optimisaasjes (PGO) oant 19.8%. Yn 'e finale waarden optimisaasjes tapast mei it BOLT-hulpprogramma, wat it mooglik makke om de bousnelheid te ferheegjen nei 24.7%, mar de grutte fan 'e toolkit ferhege mei 10.9%.

    Utjefte fan de programmeartaal Rust 1.75 en unikernel Hermit 0.6.7

  • In nij diel fan 'e API is ferpleatst nei de kategory stabile, ynklusyf de metoaden en ymplemintaasjes fan eigenskippen binne stabilisearre:
    • Atoom*::from_ptr
    • FileTimes
    • FileTimesExt
    • File :: set_modified
    • File :: set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Opsje :: as_slice
    • Opsje :: as_mut_slice
    • pointer::byte_add
    • oanwizer::byte_offset
    • oanwizer::byte_offset_from
    • oanwizer::byte_sub
    • pointer::wrapping_byte_add
    • pointer::wrapping_byte_offset
    • pointer::wrapping_byte_sub
  • It attribút "const", dat de mooglikheid bepaalt om it yn elke kontekst te brûken ynstee fan konstanten, wurdt brûkt yn 'e funksjes:
    • Ipv6Addr::to_ipv4_mapped
    • MaybeUninit :: assume_init_read
    • MaybeUninit::nulearre
    • mem :: diskriminant
    • mem :: nul
  • It tredde nivo fan stipe is ymplementearre foar de csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd en mipsel-unknown-netbsd platfoarms. It tredde nivo omfettet basisstipe, mar sûnder automatisearre testen, publikaasje fan offisjele builds, en ferifikaasje fan koade bouwberens.

Derneist kinne wy ​​​​notearje in nije ferzje fan it Hermit-projekt, dat in spesjalisearre kernel (unikernel) ûntwikkelet, skreaun yn 'e Rust-taal, dy't ark leveret foar it bouwen fan selsstannige applikaasjes dy't kinne rinne boppe op in hypervisor of bleate hardware sûnder ekstra lagen en sûnder in bestjoeringssysteem. As boud, is de applikaasje statysk keppele oan in bibleteek, dy't selsstannich alle nedige funksjonaliteit ymplementearret, sûnder te wêzen bûn oan 'e OS-kernel en systeembiblioteken. De projektkoade wurdt ferspraat ûnder Apache 2.0 en MIT-lisinsjes. Gearstalling wurdt stipe foar stand-alone útfiering fan applikaasjes skreaun yn Rust, Go, Fortran, C en C ++. It projekt ûntwikkelet ek in eigen bootloader wêrmei jo Hermit kinne starte mei QEMU en KVM.

Boarne: opennet.ru

Add a comment