Ngaleupaskeun basa programming Rust 1.75 sarta unikernel Hermit 0.6.7

Pelepasan bahasa pemrograman tujuan umum Rust 1.75, diadegkeun ku proyék Mozilla, tapi ayeuna dikembangkeun dina naungan organisasi nirlaba bebas Rust Foundation, parantos diterbitkeun. basa museurkeun kana kaamanan memori jeung nyadiakeun sarana pikeun ngahontal paralelisme pakasaban tinggi bari Ngahindarkeun pamakéan a collector sampah na runtime (runtime diréduksi jadi initialization dasar tur pamaliharaan perpustakaan baku).

Métode penanganan memori Rust nyalametkeun pamekar tina kasalahan nalika ngamanipulasi pointer sareng ngajagi tina masalah anu timbul kusabab panangan mémori tingkat rendah, sapertos aksés ka daérah mémori saatos dibébaskeun, dereferencing pointer null, overruns panyangga, jsb. Pikeun ngadistribusikaeun perpustakaan, nyadiakeun ngawangun jeung ngatur kagumantungan, proyék ngamekarkeun manajer pakét Cargo. Repositori crates.io dirojong pikeun perpustakaan hosting.

Kasalametan memori disayogikeun dina Rust dina waktos kompilasi ngaliwatan pamariksaan rujukan, ngalacak kapamilikan obyék, ngalacak umur obyék (skop), sareng ngira-ngira kabeneran aksés mémori nalika palaksanaan kode. Karat ogé nyadiakeun panyalindungan ngalawan overflows integer, merlukeun initialization wajib nilai variabel saméméh pamakéan, handles kasalahan hadé dina perpustakaan baku, nerapkeun konsép rujukan immutable sarta variabel sacara standar, nawarkeun ketak statik kuat pikeun ngaleutikan kasalahan logis.

Inovasi utama:

  • Ditambahkeun kamampuan ngagunakeun "async fn" sareng notasi "-> impl Trait" dina sipat pribadi. Contona, ngagunakeun "-> impl Tret" Anjeun bisa nulis métode tret nu mulih hiji iterator: Tret Wadahna {fn item (& diri) -> impl Iterator; } impl Wadahna pikeun MyContainer {fn item (& diri) -> impl Iterator {self.items.iter().cloned()} }

    Anjeun oge bisa nyieun Tret maké "async fn": tret HttpService {async fn fetch (& sorangan, url: Url) -> HtmlBody; // bakal dilegakeun ka: // fn fetch (& diri, url: Url) -> impl Future; }

  • Ditambahkeun API pikeun ngitung bait offsets relatif ka pointers. Nalika damel sareng pointer bulistir ("*const T" sareng "*mut T"), operasi tiasa diperyogikeun pikeun nambihan offset kana pointer. Saméméhna, pikeun ieu kasebut nyaéta dimungkinkeun pikeun ngagunakeun konstruksi kawas ":: nambahkeun (1)", nambahkeun jumlah bait pakait jeung ukuran "size_of:: ()". API anyar simplifies operasi ieu sarta ngamungkinkeun pikeun ngamanipulasi offsets bait tanpa mimiti casting jenis ka "* const u8" atawa "* 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
  • Terus gawé pikeun ngaronjatkeun kinerja kompiler rustc. Ditambahkeun optimizer BOLT, anu dijalankeun dina tahap post-link sareng nganggo inpormasi tina profil palaksanaan anu tos disiapkeun. Ngagunakeun BOLT ngidinan Anjeun pikeun nyepetkeun palaksanaan kompiler ngeunaan 2% ku cara ngarobah tata perenah kode perpustakaan librustc_driver.so pikeun pamakéan leuwih efisien tina cache processor.

    Kaasup ngawangun kompiler rustc kalawan pilihan "-Ccodegen-unit = 1" pikeun ngaronjatkeun kualitas optimasi di LLVM. Tés anu dilakukeun nunjukkeun paningkatan kinerja dina kasus ngawangun "-Ccodegen-units = 1" sakitar 1.5%. Optimasi tambahan diaktipkeun sacara standar ngan pikeun platform x86_64-unknown-linux-gnu.

    Optimasi anu disebatkeun sateuacana diuji ku Google pikeun ngirangan waktos ngawangun komponén platform Android anu ditulis dina Rust. Ngagunakeun "-C codegen-units = 1" nalika ngawangun Android ngamungkinkeun urang pikeun ngurangan ukuran toolkit ku 5.5% jeung ningkatkeun kinerja na ku 1.8%, bari waktu ngawangun toolkit sorangan ampir dua kali.

    Aktipkeun koléksi sampah link-waktos ("--gc-sections") nyababkeun gain kinerja nepi ka 1.9%, ngamungkinkeun link-time optimization (LTO) nepi ka 7.7%, sarta optimizations basis profil (PGO) nepi ka 19.8%. Dina ahir, optimizations diterapkeun nganggo utilitas BOLT, anu ngamungkinkeun pikeun ningkatkeun laju ngawangun ka 24.7%, tapi ukuran toolkit ningkat ku 10.9%.

    Ngaleupaskeun basa programming Rust 1.75 sarta unikernel Hermit 0.6.7

  • Bagian anyar tina API geus dipindahkeun ka kategori stabil, kaasup métode jeung palaksanaan Tret geus stabilized:
    • Atom*::from_ptr
    • FileTimes
    • FileTimesExt
    • File:: set_modified
    • File::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Pilihan:: as_slice
    • Pilihan:: 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
  • Atribut "const", anu nangtukeun kamungkinan ngagunakeunana dina konteks naon waé tinimbang konstanta, dianggo dina fungsi:
    • IPv6Addr::to_ipv4_mapped
    • MaybeUninit:: assume_init_read
    • MaybeUninit :: nol
    • mem:: diskriminatif
    • mem:: enol
  • Tingkat katilu pangrojong parantos dilaksanakeun pikeun platform csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd sareng mipsel-unknown-netbsd. Tingkat katilu ngalibatkeun rojongan dasar, tapi tanpa nguji otomatis, publikasi wangunan resmi, sarta verifikasi buildability kode.

Salaku tambahan, urang tiasa nyatet versi anyar tina proyék Hermit, anu ngembangkeun kernel khusus (unikernel), ditulis dina basa Rust, nyayogikeun alat pikeun ngawangun aplikasi mandiri anu tiasa dijalankeun dina luhureun hypervisor atanapi hardware tanpa lapisan tambahan. sareng tanpa sistem operasi. Nalika diwangun, aplikasi ieu statis numbu ka perpustakaan, nu bebas implements sakabéh pungsi diperlukeun, tanpa kabeungkeut kana kernel OS jeung perpustakaan sistem. Kodeu proyék disebarkeun dina Apache 2.0 sareng lisensi MIT. Majelis dirojong pikeun palaksanaan mandiri tina aplikasi anu ditulis dina Rust, Go, Fortran, C sareng C ++. Proyék ieu ogé ngembangkeun bootloader sorangan anu ngamungkinkeun anjeun ngaluncurkeun Hermit nganggo QEMU sareng KVM.

sumber: opennet.ru

Tambahkeun komentar