Lëshimi i gjuhës së programimit Rust 1.75 dhe unikernel Hermit 0.6.7

U publikua versioni i gjuhës së programimit Rust 1.75, e cila fillimisht u zhvillua nga projekti Mozilla, por tani zhvillohet nën mbikëqyrjen e një organizate jo-fitimprurëse të pavarur, Rust Foundation. Gjuha fokusohet në punën e sigurt me memorien dhe ofron mjete për arritjen e paralelizmit të lartë në ekzekutimin e detyrave, duke shmangur përdorimin e mbledhësve të plehrave dhe runtime (runtime përfshin inicimin themelor dhe mbështetje të bibliotekës standarde).

Metodat e punës me kujtesën në Rust e çlirojnë zhvilluesin nga gabimet gjatë manipulimit të treguesve dhe mbrojnë nga problemet që lindin nga puna me nivel të ulët me kujtesën, siç janë referimi në një zonë kujtese pas çlirimit të saj, dereferimi i treguesve null, tejkalimi i kufijve të tamponëve etj. Për shpërndarjen e biblioteka, për të siguruar ndërtimin dhe menaxhimin e varësive, projekti zhvillon menaxherin e paketave Cargo. Për ruajtjen e bibliotekave, mbështetet depoja crates.io.

Përdorimi i sigurt i memories sigurohet në Rust gjatë kompilimit përmes verifikimit të lidhjeve, gjurmimit të pronësisë së objekteve, përllogaritjes së kohëzgjatjes së objekteve (fushave të dukshmërisë) dhe vlerësimit të saktësisë së qasjes në memorie gjatë ekzekutimit të kodit. Rust gjithashtu ofron mjete për mbrojtje nga tejkalimet e numrave të plotë, kërkon inicializim të detyrueshëm të vlerave të variablave para përdorimit, menaxhon më mirë gabimet në bibliotekën standarde, aplikon konceptin e lidhjeve dhe variablave të pandryshueshëm (immutable) si parazgjedhje, dhe ofron tipizim të fortë statik për minimizimin e gabimeve logjike.

TĂ« rejat kryesore:

  • Shtuar mundĂ«sia e pĂ«rdorimit tĂ« «async fn» dhe shĂ«njestrimit «->impl Trait» nĂ« tipazhet private. PĂ«r shembull, duke pĂ«rdorur «->impl Trait» mund tĂ« shkruhet njĂ« metodĂ« tipazhi qĂ« kthen njĂ« iterator: trait Container { fn items(&self) -> impl Iterator; } impl Container pĂ«r MyContainer { fn items(&self) -> impl Iterator { self.items.iter().cloned() } }

    Gjithashtu, mund të krijohen tipazhe që përdorin «async fn»: trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // do të zhvillohet në: // fn fetch(&self, url: Url) -> impl Future; }

  • Shtuar API pĂ«r llogaritjen e zhvendosjeve nĂ« bajta nĂ« lidhje me treguesit. Kur punoni me tregues tĂ« pastĂ«r («*const T» dhe «*mut T»), mund tĂ« jetĂ« e nevojshme tĂ« bĂ«ni operacione pĂ«r tĂ« shtuar zhvendosje nĂ« tregues. MĂ« parĂ«, pĂ«r kĂ«tĂ« mund tĂ« pĂ«rdorej konstrukti «::add(1)», qĂ« shtonte numrin e bajtave qĂ« pĂ«rputhet me madhĂ«sinĂ« «size_of::()». API i ri thjeshton kĂ«tĂ« operacion dhe lejon manipulimin e zhvendosjeve nĂ« bajta pa nevojĂ«n pĂ«r ta konvertuar paraprakisht tipin nĂ« «*const u8» ose «*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
  • Puna pĂ«r rritjen e performancĂ«s sĂ« kompilatorit rustc ka vazhduar. Shtuar optimizuesin BOLT, i cili punon nĂ« fazĂ«n pas pĂ«rfundimit tĂ« lidhjes dhe pĂ«rdor informacionin nga njĂ« profil i pĂ«rgatitur mĂ« parĂ«. PĂ«rdorimi i BOLT lejon tĂ« pĂ«rshpejtohet ekzekutimi i kompilatorit me rreth 2% duke ndryshuar dispozitĂ«n e kodit tĂ« bibliotekĂ«s librustc_driver.so pĂ«r njĂ« pĂ«rdorim mĂ« efikas tĂ« cache-it tĂ« procesorit.

    Aktivizuar ndërtimi i kompilatorit rustc me opsionin «-Ccodegen-units=1», që lejon përmirësimin e cilësisë së optimizimit në LLVM. Testet e kryera tregojnë një rritje të performancës për ndërtimet me «-Ccodegen-units=1» me rreth 1.5%. Optimizimet e shtuara përfshihen si standard vetëm për platformën x86_64-unknown-linux-gnu.

    Optimizimet e përmendura më parë ishin testuar nga kompania Google për të shkurtuar kohën e ndërtimit të komponenteve të platformës Android, të shkruara në gjuhën Rust. Përdorimi i «-C codegen-units=1» gjatë ndërtimit të Android lejoi uljen e madhësisë së mjetit me 5.5% dhe rritjen e performancës me 1.8%, ndërkohë që koha e ndërtimit të vetë mjetit u dyfishua pothuajse.

    Aktivizimi i mbledhjes sĂ« plehrave gjatĂ« lidhjes («—gc-sections») mundĂ«soi arritjen e njĂ« rritje tĂ« performancĂ«s deri nĂ« 1.9%, aktivizimi i optimizimit nĂ« fazĂ«n e lidhjes (LTO) deri nĂ« 7.7%, dhe optimizimet e bazuara nĂ« profilin e ekzekutimit tĂ« kodit (PGO) deri nĂ« 19.8%. NĂ« fund, u aplikuan optimizime duke pĂ«rdorur utilitarin BOLT, tĂ« cilat lejuan arritjen e njĂ« rritje tĂ« shpejtĂ«sisĂ« sĂ« ndĂ«rtimit deri nĂ« 24.7%, por madhĂ«sia e mjetit u rrit me 10.9%.

    Lëshimi i gjuhës së programimit Rust 1.75 dhe unikernel Hermit 0.6.7
  • NjĂ« sasi e re API Ă«shtĂ« kaluar nĂ« kategorinĂ« stabile, pĂ«rfshirĂ« stabilizimin e metodave dhe implementimeve tĂ« tipazheve:
    • Atomic*::from_ptr
    • FileTimes
    • FileTimesExt
    • File::set_modified
    • File::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Option::as_slice
    • Option::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
  • Karakteristika «const», qĂ« pĂ«rcakton mundĂ«sinĂ« e pĂ«rdorimit nĂ« çdo kontekst nĂ« vend tĂ« konstantave, Ă«shtĂ« aplikuar nĂ« funksionet:
    • Ipv6Addr::to_ipv4_mapped
    • MaybeUninit::assume_init_read
    • MaybeUninit::zeroed
    • mem::discriminant
    • mem::zeroed
  • Implementuar njĂ« nivel tĂ« tretĂ« mbĂ«shtetjeje pĂ«r platformĂ«n csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd dhe mipsel-unknown-netbsd. NjĂ« nivel i tretĂ« nĂ«nkupton mbĂ«shtetje bazĂ«, por pa testim automatizimi, publikim tĂ« paketave zyrtare dhe verifikim tĂ« mundĂ«sisĂ« pĂ«r ndĂ«rtimin e kodit.

Gjithashtu, mund të përmendet versioni i ri i projektit Hermit, i cili zhvillon një bërthamë të specializuar (unikernel), e shkruar në gjuhën Rust, duke ofruar mjete për ndërtimin e aplikacioneve të pavarura, të cilat mund të funksionojnë mbi një hipervizor ose në pajisje të palakmuara pa ndërmjetësim shtesë dhe pa sistem operativ. Gjatë ndërtimit, aplikacioni lidhet statikisht me bibliotekën, e cila implementon të gjithë funksionalitetin e nevojshëm, pa u lidhur me bërthamën e OS-së dhe bibliotekat sistemore. Kodi i projektit shpërndahet nën licencat Apache 2.0 dhe MIT. Mbështetet ndërtimi për ekzekutimin e aplikacioneve të shkruara në gjuhët Rust, Go, Fortran, C dhe C++. Po ashtu, projekti zhvillon një ngarkues të vetin, që lejon nisjen e Hermit duke përdorur QEMU dhe KVM.

Burimi: opennet.ru

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster