Rilis saka basa pemrograman Rust 1.75 lan unikernel Hermit 0.6.7

Basa pemrograman tujuan umum Rust 1.75, didegaké déning proyèk Mozilla nanging saiki dikembangaké ing sangisoré organisasi nirlaba independen Rust Foundation, wis dirilis. Basa kasebut fokus ing safety memori lan nyedhiyakake sarana kanggo nggayuh paralelisme proyek sing dhuwur nalika ngindhari panggunaan kolektor sampah lan runtime (runtime dikurangi dadi initialization dhasar lan pangopènan perpustakaan standar).

Cara nangani memori Rust nylametake pangembang saka kesalahan nalika manipulasi penunjuk lan nglindhungi masalah sing muncul amarga penanganan memori tingkat rendah, kayata ngakses area memori sawise dibebasake, null pointer dereferencing, overruns buffer, etc. Kanggo nyebarake perpustakaan, nyedhiyakake mbangun lan ngatur dependensi, proyek kasebut ngembangake manajer paket Cargo. Repositori crates.io didhukung kanggo hosting perpustakaan.

Keamanan memori diwenehake ing Rust ing wektu kompilasi liwat mriksa referensi, nglacak kepemilikan obyek, nglacak umur obyek (skop), lan netepake akurasi akses memori sajrone eksekusi kode. Rust uga menehi pangayoman marang overflows integer, mbutuhake initialization prentah saka nilai variabel sadurunge nggunakake, Ngalahake kasalahan luwih apik ing perpustakaan standar, ditrapake konsep referensi immutable lan variabel minangka standar, nawakake typing statis kuwat kanggo nyilikake kasalahan logis.

Inovasi utama:

  • Nambahake kemampuan kanggo nggunakake "async fn" lan notasi "-> impl Trait" ing sipat pribadi. Contone, nggunakake "-> impl Trait" sampeyan bisa nulis cara sipat sing ngasilake iterator: trait Container { fn item (& self) -> impl Iterator; } impl Container kanggo MyContainer { fn item(&self) -> impl Iterator {self.items.iter().cloned()} }

    Sampeyan uga bisa nggawe sipat nggunakake "async fn": sipat HttpService {async fn fetch (& dhewe, url: Url) -> HtmlBody; // bakal ditambahi kanggo: // fn fetch (& poto, url: Url) -> impl Future; }

  • Added API kanggo ngetung bait offsets relatif kanggo penunjuk. Nalika nggarap pointer kosong ("*const T" lan "*mut T"), operasi bisa uga dibutuhake kanggo nambah offset menyang pointer. Sadurunge, iki bisa nggunakake konstruksi kaya " :: add (1)", nambahake jumlah bita sing cocog karo ukuran "size_of:: ()". API anyar nyederhanakake operasi iki lan ndadekake iku bisa kanggo ngapusi offsets byte tanpa pisanan casting jinis kanggo "* const u8" utawa "* mut u8".
    • pointer:: byte_add
    • pointer:: byte_offset
    • pointer:: byte_offset_from
    • pitunjuk:: byte_sub
    • pointer:: wrapping_byte_add
    • pointer:: wrapping_byte_offset
    • pointer:: wrapping_byte_sub
  • Terus kerja kanggo nambah kinerja kompiler rustc. Nambahake pangoptimal BOLT, sing mlaku ing tahap post-link lan nggunakake informasi saka profil eksekusi sing wis disiapake. Nggunakake BOLT ngijini sampeyan kanggo nyepetake eksekusi compiler ing bab 2% kanthi ngganti tata letak saka librustc_driver.so kode perpustakaan kanggo nggunakake luwih efisien saka cache prosesor.

    Klebu mbangun compiler rustc karo "-Ccodegen-units = 1" pilihan kanggo nambah kualitas Optimization ing LLVM. Tes sing ditindakake nuduhake peningkatan kinerja ing kasus "-Ccodegen-units = 1" mbangun kira-kira 1.5%. Optimasi sing ditambahake diaktifake kanthi standar mung kanggo platform x86_64-unknown-linux-gnu.

    Optimasi sing kasebut sadurunge diuji dening Google kanggo nyuda wektu mbangun komponen platform Android sing ditulis ing Rust. Nggunakake "-C codegen-units = 1" nalika mbangun Android ngidini kita nyuda ukuran toolkit kanthi 5.5% lan nambah kinerja 1.8%, nalika wektu mbangun toolkit dhewe meh tikel kaping pindho.

    Ngaktifake koleksi sampah link-time ("--gc-sections") nggawa gain kinerja nganti 1.9%, mbisakake optimasi link-time (LTO) nganti 7.7%, lan optimasi basis profil (PGO) nganti 19.8%. Ing pungkasan, optimasi ditrapake nggunakake sarana BOLT, sing bisa nambah kacepetan mbangun nganti 24.7%, nanging ukuran toolkit tambah 10.9%.

    Rilis saka basa pemrograman Rust 1.75 lan unikernel Hermit 0.6.7

  • Bagean anyar saka API wis dipindhah menyang kategori stabil, kalebu cara lan implementasine sifat wis stabil:
    • Atom*::saka_ptr
    • FileTimes
    • FileTimesExt
    • Berkas::set_modified
    • Berkas::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
    • pitunjuk:: byte_sub
    • pointer:: wrapping_byte_add
    • pointer:: wrapping_byte_offset
    • pointer:: wrapping_byte_sub
  • Atribut "const", sing nemtokake kemungkinan nggunakake ing sembarang konteks tinimbang konstanta, digunakake ing fungsi:
    • IPv6Addr::to_ipv4_mapped
    • MaybeUninit:: assume_init_read
    • MaybeUninit:: nul
    • mem:: diskriminan
    • mem:: nul
  • Dhukungan tingkat katelu wis dileksanakake kanggo platform csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd lan mipsel-unknown-netbsd. Tingkat katelu kalebu dhukungan dhasar, nanging tanpa tes otomatis, nerbitake bangunan resmi, utawa mriksa manawa kode kasebut bisa dibangun.

Kajaba iku, kita bisa nyathet versi anyar saka proyek Hermit, sing ngembangake kernel khusus (unikernel), sing ditulis ing basa Rust, nyedhiyakake alat kanggo mbangun aplikasi mandiri sing bisa mlaku ing ndhuwur hypervisor utawa hardware tanpa lapisan tambahan. lan tanpa sistem operasi. Nalika dibangun, aplikasi kasebut disambungake kanthi statis menyang perpustakaan, sing kanthi mandiri ngetrapake kabeh fungsi sing dibutuhake, tanpa disambungake menyang kernel OS lan perpustakaan sistem. Kode proyek disebarake miturut lisensi Apache 2.0 lan MIT. Majelis didhukung kanggo eksekusi aplikasi sing ditulis ing Rust, Go, Fortran, C lan C ++. Proyek kasebut uga ngembangake bootloader dhewe sing ngidini sampeyan miwiti Hermit nggunakake QEMU lan KVM.

Source: opennet.ru

Add a comment