Ħruġ tal-lingwa ta' programmar Rust 1.75 u unikernel Hermit 0.6.7

Ġiet rilaxxata l-lingwa ta 'programmar għal skopijiet ġenerali Rust 1.75, imwaqqfa mill-proġett Mozilla iżda issa żviluppat taħt l-awspiċi tal-organizzazzjoni indipendenti mingħajr skop ta' qligħ Rust Foundation. Il-lingwa tiffoka fuq is-sikurezza tal-memorja u tipprovdi l-mezzi biex tikseb paralleliżmu għoli tax-xogħol filwaqt li tevita l-użu ta 'ġbir ta' żibel u runtime (runtime huwa mnaqqas għal inizjalizzazzjoni bażika u manutenzjoni tal-librerija standard).

Il-metodi tal-immaniġġjar tal-memorja ta 'Rut isalvaw lill-iżviluppatur minn żbalji meta jimmanipula l-indikazzjonijiet u jipproteġu kontra problemi li jinqalgħu minħabba t-tqandil tal-memorja ta' livell baxx, bħall-aċċess għal żona tal-memorja wara li tkun ġiet meħlusa, dereferencing null pointers, buffer overruns, eċċ. Biex iqassam il-libreriji, jipprovdi bini u jimmaniġġja d-dipendenzi, il-proġett jiżviluppa l-maniġer tal-pakkett tat-Tagħbija. Ir-repożitorju crates.io huwa appoġġjat għall-hosting tal-libreriji.

Is-sikurezza tal-memorja hija pprovduta f'Rut fil-ħin tal-kompilazzjoni permezz ta 'verifika ta' referenza, iżżomm kont tal-pussess tal-oġġett, iżżomm kont tal-ħajja tal-oġġetti (ambiti), u tivvaluta l-korrettezza tal-aċċess għall-memorja waqt l-eżekuzzjoni tal-kodiċi. Rust jipprovdi wkoll protezzjoni kontra overflows integer, jeħtieġ inizjalizzazzjoni obbligatorja ta 'valuri varjabbli qabel l-użu, jimmaniġġja l-iżbalji aħjar fil-librerija standard, japplika l-kunċett ta' referenzi immutabbli u varjabbli b'mod awtomatiku, joffri tajpjar statiku qawwi biex jimminimizza l-iżbalji loġiċi.

Innovazzjonijiet ewlenin:

  • Żid il-ħila li tuża "async fn" u n-notazzjoni "->impl Trait" f'karatteristiċi privati. Pereżempju, billi tuża “->impl Trait” tista’ tikteb metodu ta’ karatteristika li jirritorna iteratur: karatteristika Container { fn items(&self) -> impl Iterator; } impl Container għal MyContainer { fn items(&self) -> impl Iterator {self.items.iter().cloned() } }

    Tista' wkoll toħloq karatteristiċi billi tuża "async fn": trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // se jiġi estiż għal: // fn fetch(&self, url: Url) -> impl Future; }

  • Miżjud API għall-kalkolu tal-byte offsets relattiv għall-pointers. Meta taħdem b'indikazzjonijiet vojta (“*const T” u “*mut T”), jistgħu jkunu meħtieġa operazzjonijiet biex iżidu offset mal-pointer. Preċedentement, għal dan kien possibbli li tintuża kostruzzjoni bħal "::add(1)", billi żżid in-numru ta 'bytes li jikkorrispondi għad-daqs ta' "size_of::()". L-API l-ġdida tissimplifika din l-operazzjoni u tagħmilha possibbli li jiġu mmanipulati l-offsets tal-byte mingħajr ma l-ewwel jitfgħu t-tipi għal "*const u8" jew "*mut u8".
    • 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
  • Xogħol kontinwu biex tiżdied il-prestazzjoni tal-kompilatur rustc. Żid il-BOLT optimizer, li jaħdem fl-istadju ta 'wara l-link u juża informazzjoni minn profil ta' eżekuzzjoni ppreparat minn qabel. L-użu tal-BOLT jippermettilek tħaffef l-eżekuzzjoni tal-kompilatur b'madwar 2% billi tbiddel it-tqassim tal-kodiċi tal-librerija librustc_driver.so għal użu aktar effiċjenti tal-cache tal-proċessur.

    Inkluż il-bini tal-kompilatur rustc bl-għażla "-Ccodegen-units=1" biex ittejjeb il-kwalità tal-ottimizzazzjoni f'LLVM. It-testijiet imwettqa juru żieda fil-prestazzjoni fil-każ tal-bini "-Ccodegen-units=1" b'madwar 1.5%. L-ottimizzazzjonijiet miżjuda huma attivati ​​awtomatikament biss għall-pjattaforma x86_64-unknown-linux-gnu.

    L-ottimizzazzjonijiet imsemmija qabel ġew ittestjati minn Google biex jitnaqqas il-ħin tal-bini tal-komponenti tal-pjattaforma Android miktuba f'Rut. L-użu ta '"-C codegen-units=1" meta nibnu Android ippermettilna nnaqqsu d-daqs tal-għodda b'5.5% u nżidu l-prestazzjoni tiegħu b'1.8%, filwaqt li l-ħin tal-bini tal-għodda innifsu kważi rdoppja.

    L-abilitazzjoni tal-ġbir taż-żibel fil-ħin tal-link ("--gc-sections") ġab il-qligħ fil-prestazzjoni sa 1.9%, li ppermettiet l-ottimizzazzjoni tal-ħin tal-link (LTO) sa 7.7%, u ottimizzazzjonijiet ibbażati fuq profil (PGO) sa 19.8%. Fl-aħħar, ġew applikati ottimizzazzjonijiet bl-użu tal-utilità BOLT, li għamilha possibbli li tiżdied il-veloċità tal-bini għal 24.7%, iżda d-daqs tal-għodda żdied b'10.9%.

    Ħruġ tal-lingwa ta' programmar Rust 1.75 u unikernel Hermit 0.6.7

  • Porzjon ġdid tal-API ġie mċaqlaq għall-kategorija ta 'stabbli, inklużi l-metodi u l-implimentazzjonijiet tal-karatteristiċi ġew stabbilizzati:
    • Atomika*::from_ptr
    • FileTimes
    • FileTimesExt
    • File::set_modified
    • File::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Għażla::as_slice
    • Għażla::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
  • L-attribut "const", li jiddetermina l-possibbiltà li jintuża fi kwalunkwe kuntest minflok kostanti, jintuża fil-funzjonijiet:
    • Ipv6Addr::to_ipv4_mapped
    • ForsiUninit::assume_init_read
    • ForsiUninit::zeroed
    • mem::diskriminant
    • mem::zeroed
  • It-tielet livell ta' appoġġ ġie implimentat għall-pjattaformi csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd u mipsel-unknown-netbsd. It-tielet livell jinvolvi appoġġ bażiku, iżda mingħajr ittestjar awtomatizzat, pubblikazzjoni ta 'bini uffiċjali, jew verifika jekk il-kodiċi jistax jinbena.

Barra minn hekk, nistgħu ninnotaw verżjoni ġdida tal-proġett Hermit, li tiżviluppa għadma speċjalizzata (unikernel), miktuba fil-lingwa Rust, li tipprovdi għodod għall-bini ta’ applikazzjonijiet awtonomi li jistgħu jaħdmu fuq hypervisor jew ħardwer vojt mingħajr saffi addizzjonali. u mingħajr sistema operattiva. Meta tinbena, l-applikazzjoni hija marbuta b'mod statiku ma 'librerija, li timplimenta b'mod indipendenti l-funzjonalità kollha meħtieġa, mingħajr ma tkun marbuta mal-kernel tal-OS u l-libreriji tas-sistema. Il-kodiċi tal-proġett huwa mqassam taħt liċenzji Apache 2.0 u MIT. L-assemblaġġ huwa appoġġjat għall-eżekuzzjoni waħedha ta 'applikazzjonijiet miktuba f'Rut, Go, Fortran, C u C++. Il-proġett qed jiżviluppa wkoll il-bootloader tiegħu stess li jippermettilek tniedi Hermit billi tuża QEMU u KVM.

Sors: opennet.ru

Żid kumment