Derxistina zimanê bernamekirinê Rust 1.75 û unikernel Hermit 0.6.7

Serbestberdana zimanê bernamesaziya gelemperî ya Rust 1.75, ku ji hêla projeya Mozilla ve hatî damezrandin, lê naha di bin banê rêxistina ne-qezenc a serbixwe Rust Foundation de hatî pêşve xistin, hate weşandin. Ziman balê dikişîne ser ewlehiya bîranînê û amûran peyda dike ku bigihîje paraleliya kar a bilind dema ku ji karanîna berhevkarek çopê û dema xebitandinê dûr dikeve (dema xebitandinê ji destpêkirina bingehîn û domandina pirtûkxaneya standard re kêm dibe).

Rêbazên birêkûpêkkirina bîranîna Rust pêşdebiran ji xeletiyan di dema manîpulekirina nîşankeran de diparêze û li hember pirsgirêkên ku ji ber destwerdana bîranîna nizm çêdibin diparêze, wek gihandina cîhek bîranînê piştî ku ew azad bû, jêbirina nîşangirên betal, zêdekirina tampon û hwd. Ji bo belavkirina pirtûkxaneyan, peydakirina avahî û birêvebirina pêwendiyan, proje rêveberê pakêtê Cargo pêşve dike. Depoya crates.io ji bo pirtûkxaneyên mêvandar têne piştgirî kirin.

Ewlehiya bîranînê di Rust de di dema berhevkirinê de bi kontrolkirina referansê, şopandina xwedîtiya tiştan, şopandina heyamên tiştan (çarçove), û nirxandina rastbûna gihîştina bîranînê di dema darvekirina kodê de tê peyda kirin. Rust di heman demê de parastina li dijî hejmarên bêkêmasî peyda dike, berî karanîna pêdivî bi destpêkirina mecbûrî ya nirxên guhêrbar hewce dike, di pirtûkxaneya standard de xeletiyan çêtir digire, têgeha referansên neguhêrbar û guhêrbar ji hêla xwerû ve bicîh tîne, tîpkirina statîk a bihêz pêşkêşî dike da ku xeletiyên mantiqî kêm bike.

Nûvekirinên sereke:

  • Hêza karanîna "async fn" û nîşana "-> impl Trait" di taybetmendiyên taybet de zêde kir. Mînakî, bi karanîna “->impl Trait” hûn dikarin rêbazek taybetmendiyê binivîsin ku îteratorek vedigerîne: trait Container { fn items(&self) -> impl Iterator; } impl Container for MyContainer { fn items(&self) -> impl Iterator {self.items.iter().cloned() } }

    Her weha hûn dikarin bi karanîna "async fn" taybetmendiyan biafirînin: trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // dê berfereh bibe: // fn fetch(&self, url: Url) -> impl Future; }

  • API-ya zêde kir ji bo hesabkirina guheztinên byte yên li gorî nîşankeran. Dema ku bi nîşankerên tazî re dixebitin ("*const T" û "*mut T"), dibe ku operasyonan hewce bike ku li ser nîşanderê veqetandinek zêde bikin. Berê, ji bo vê yekê mimkun bû ku avahiyek mîna "::add(1)" were bikar anîn, hejmara baytên li gorî mezinahiya "size_of::()" zêde bike. API-ya nû vê operasyonê hêsan dike û mimkun dike ku meriv lihevhatinên baytê were manîpule kirin bêyî ku pêşî tîpan biavêje "*const u8" an "*mut u8".
    • nîşanker::byte_add
    • nîşanker::byte_offset
    • nîşanker::byte_offset_from
    • nîşanker::byte_sub
    • nîşanker:: wrapping_byte_add
    • nîşanker:: wrapping_byte_offset
    • nîşanker::wrapping_byte_sub
  • Ji bo zêdekirina performansa berhevkarê rustc xebat berdewam kirin. Optimîzatorê BOLT, ku di qonaxa post-girêdanê de dimeşe û agahdariya ji profîlek darvekirinê ya pêş-amadekirî bikar tîne lê zêde kir. Bikaranîna BOLT dihêle hûn bi guheztina sêwirana koda pirtûkxaneyê ya librustc_driver.so ji bo karanîna bêtir bikêrhatî ya cache-ya pêvajoyê bi qasî 2% pêkanîna berhevkerê bilez bikin.

    Di nav de avakirina berhevkarê rustc bi vebijarka "-Ccodegen-units=1" heye da ku kalîteya xweşbîniyê di LLVM de baştir bike. Testên hatine kirin zêdebûnek performansê di rewşa avakirina "-Ccodegen-unit=1" de bi qasî 1.5% nîşan didin. Optimîzasyonên zêdekirî tenê ji bo platforma x86_64-unknown-linux-gnu ji hêla xwerû ve têne çalak kirin.

    Optimîzasyonên ku berê hatine behs kirin ji hêla Google ve hatine ceribandin da ku dema avakirina pêkhateyên platforma Android-ê yên ku bi Rust hatine nivîsandin kêm bikin. Bikaranîna "-C codegen-units=1" di dema çêkirina Androidê de hişt ku em mezinahiya amûrê% 5.5 kêm bikin û performansa wê% 1.8 zêde bikin, dema ku dema çêkirina amûrê bixwe hema du qat zêde bû.

    Çalakkirina berhevkirina çopê ya dema girêdanê ("--gc-beş") qezenckirina performansê gihand 1.9%, xweşbînkirina zemanê girêdanê (LTO) heya 7.7%, û xweşbîniyên li ser profîlê (PGO) heya 19.8% . Di dawiyê de, optimîzasyon bi karanîna kargêriya BOLT-ê hatin sepandin, ku destûr da ku leza çêkirinê ji% 24.7 zêde bibe, lê mezinahiya amûrê 10.9% zêde bû.

    Derxistina zimanê bernamekirinê Rust 1.75 û unikernel Hermit 0.6.7

  • Parçeyek nû ya API-yê hate veguheztin kategoriya îstîqrar, di nav de rêbaz û pêkanînên taybetmendiyan hatine stabîlkirin:
    • Atomî*::from_ptr
    • FileTimes
    • FileTimesExt
    • Wêne::set_modified
    • Wêne::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Vebijêrk::as_slice
    • Vebijêrk::as_mut_slice
    • nîşanker::byte_add
    • nîşanker::byte_offset
    • nîşanker::byte_offset_from
    • nîşanker::byte_sub
    • nîşanker:: wrapping_byte_add
    • nîşanker:: wrapping_byte_offset
    • nîşanker::wrapping_byte_sub
  • Taybetmendiya "const", ku îmkana karanîna wê di her çarçovê de li şûna domdar diyar dike, di fonksiyonan de tê bikar anîn:
    • Ipv6Addr::to_ipv4_mapped
    • DibeUninit::assume_init_read
    • DibeUninit:: sifir
    • mem::cudaxwaz
    • mem:: sifir kirin
  • Asta sêyem piştgirî ji bo platformên csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd û mipsel-nenas-netbsd hatî bicîh kirin. Asta sêyemîn piştgirîya bingehîn digire, lê bêyî ceribandina otomatîk, weşandina avahiyên fermî, û verastkirina avakirina kodê.

Wekî din, em dikarin guhertoyek nû ya projeya Hermit destnîşan bikin, ku kernelek pispor (unikernel), ku bi zimanê Rust hatî nivîsandin, peyda dike, amûran peyda dike ji bo avakirina sepanên xweser ên ku dikarin li ser hîpervisorek an hardware tazî bêyî qatên zêde bixebitin. û bêyî pergala xebitandinê. Dema ku hatî çêkirin, serîlêdan bi statîkî bi pirtûkxaneyek ve girêdayî ye, ku serbixwe hemî fonksiyonên pêwîst bicîh tîne, bêyî ku bi kernel OS û pirtûkxaneyên pergalê ve were girêdan. Koda projeyê di bin lîsansa Apache 2.0 û MIT de tê belav kirin. Meclîs ji bo pêkanîna serbixwe ya serîlêdanên ku bi Rust, Go, Fortran, C û C++ hatine nivîsandin tê piştgirî kirin. Proje di heman demê de bootloader-a xwe jî pêşve dike ku dihêle hûn Hermit bi karanîna QEMU û KVM-ê dest pê bikin.

Source: opennet.ru

Add a comment