Keluaran bahasa pengaturcaraan Rust 1.75 dan unikernel Hermit 0.6.7

Bahasa pengaturcaraan tujuan umum Rust 1.75, yang diasaskan oleh projek Mozilla tetapi kini dibangunkan di bawah naungan organisasi bebas tanpa untung Rust Foundation, telah dikeluarkan. Bahasa ini memberi tumpuan kepada keselamatan ingatan dan menyediakan cara untuk mencapai keselarian kerja yang tinggi sambil mengelakkan penggunaan pengumpul sampah dan masa jalan (masa jalan dikurangkan kepada permulaan asas dan penyelenggaraan perpustakaan standard).

Kaedah pengendalian memori Rust menyelamatkan pembangun daripada ralat semasa memanipulasi penunjuk dan melindungi daripada masalah yang timbul akibat pengendalian memori peringkat rendah, seperti mengakses kawasan memori selepas ia dibebaskan, membatalkan penunjuk nol, overrun penimbal, dsb. Untuk mengedarkan perpustakaan, menyediakan binaan dan mengurus kebergantungan, projek membangunkan pengurus pakej Kargo. Repositori crates.io disokong untuk mengehos perpustakaan.

Keselamatan memori disediakan dalam Rust pada masa penyusunan melalui semakan rujukan, menjejaki pemilikan objek, menjejaki jangka hayat objek (skop) dan menilai ketepatan akses memori semasa pelaksanaan kod. Rust juga menyediakan perlindungan terhadap limpahan integer, memerlukan permulaan mandatori nilai pembolehubah sebelum digunakan, mengendalikan ralat dengan lebih baik dalam perpustakaan standard, menggunakan konsep rujukan tidak berubah dan pembolehubah secara lalai, menawarkan penaipan statik yang kuat untuk meminimumkan ralat logik.

Inovasi utama:

  • Menambahkan keupayaan untuk menggunakan "async fn" dan notasi "->impl Trait" dalam sifat peribadi. Contohnya, menggunakan β€œ->impl Trait” anda boleh menulis kaedah trait yang mengembalikan iterator: trait Container { fn items(&self) -> impl Iterator; } impl Container untuk MyContainer { fn items(&self) -> impl Iterator { self.items.iter().cloned() } }

    Anda juga boleh mencipta ciri menggunakan "async fn": trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // akan dikembangkan kepada: // fn fetch(&self, url: Url) -> impl Future; }

  • Menambahkan API untuk mengira offset bait berbanding penunjuk. Apabila bekerja dengan penunjuk kosong (β€œ*const T” dan β€œ*mut T”), operasi mungkin diperlukan untuk menambah offset pada penuding. Sebelum ini, untuk ini adalah mungkin untuk menggunakan pembinaan seperti "::add(1)", menambah bilangan bait yang sepadan dengan saiz "size_of::()". API baharu memudahkan operasi ini dan memungkinkan untuk memanipulasi offset bait tanpa terlebih dahulu menghantar jenis kepada "*const u8" atau "*mut u8".
    • penunjuk::byte_add
    • penunjuk::byte_offset
    • penunjuk::byte_offset_from
    • penunjuk::byte_sub
    • penunjuk::wrapping_byte_add
    • penunjuk::wrapping_byte_offset
    • penunjuk::wrapping_byte_sub
  • Kerja berterusan untuk meningkatkan prestasi pengkompil rustc. Menambahkan pengoptimum BOLT, yang berjalan dalam peringkat pasca pautan dan menggunakan maklumat daripada profil pelaksanaan yang telah disediakan sebelumnya. Menggunakan BOLT membolehkan anda mempercepatkan pelaksanaan pengkompil sebanyak kira-kira 2% dengan menukar susun atur kod perpustakaan librustc_driver.so untuk penggunaan cache pemproses yang lebih cekap.

    Termasuk membina pengkompil rustc dengan pilihan "-Ccodegen-units=1" untuk meningkatkan kualiti pengoptimuman dalam LLVM. Ujian yang dilakukan menunjukkan peningkatan dalam prestasi dalam kes binaan "-Ccodegen-units=1" sebanyak kira-kira 1.5%. Pengoptimuman tambahan didayakan secara lalai hanya untuk platform x86_64-unknown-linux-gnu.

    Pengoptimuman yang dinyatakan sebelum ini telah diuji oleh Google untuk mengurangkan masa binaan komponen platform Android yang ditulis dalam Rust. Menggunakan "-C codegen-units=1" semasa membina Android membolehkan kami mengurangkan saiz kit alat sebanyak 5.5% dan meningkatkan prestasinya sebanyak 1.8%, manakala masa binaan kit alat itu sendiri hampir dua kali ganda.

    Mendayakan pengumpulan sampah masa pautan (β€œ--gc-sections”) membawa peningkatan prestasi sehingga 1.9%, membolehkan pengoptimuman masa pautan (LTO) sehingga 7.7% dan pengoptimuman berasaskan profil (PGO) sehingga 19.8% . Pada peringkat akhir, pengoptimuman telah digunakan menggunakan utiliti BOLT, yang memungkinkan untuk meningkatkan kelajuan binaan kepada 24.7%, tetapi saiz kit alat meningkat sebanyak 10.9%.

    Keluaran bahasa pengaturcaraan Rust 1.75 dan unikernel Hermit 0.6.7

  • Bahagian baharu API telah dialihkan ke kategori stabil, termasuk kaedah dan pelaksanaan ciri telah distabilkan:
    • Atom*::from_ptr
    • FileTimes
    • FileTimesExt
    • Fail::set_modified
    • Fail::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Pilihan::as_slice
    • Pilihan::as_mut_slice
    • penunjuk::byte_add
    • penunjuk::byte_offset
    • penunjuk::byte_offset_from
    • penunjuk::byte_sub
    • penunjuk::wrapping_byte_add
    • penunjuk::wrapping_byte_offset
    • penunjuk::wrapping_byte_sub
  • Atribut "const", yang menentukan kemungkinan menggunakannya dalam sebarang konteks dan bukannya pemalar, digunakan dalam fungsi:
    • Ipv6Addr::to_ipv4_mapped
    • MaybeUninit::assume_init_read
    • MaybeUninit::sifar
    • mem:: diskriminasi
    • mem::sifar
  • Tahap ketiga sokongan telah dilaksanakan untuk platform csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd dan mipsel-unknown-netbsd. Tahap ketiga melibatkan sokongan asas, tetapi tanpa ujian automatik, menerbitkan binaan rasmi atau menyemak sama ada kod itu boleh dibina.

Selain itu, kita boleh perhatikan versi baharu projek Hermit, yang membangunkan kernel khusus (unikernel), yang ditulis dalam bahasa Rust, menyediakan alatan untuk membina aplikasi serba lengkap yang boleh berjalan di atas hypervisor atau perkakasan kosong tanpa lapisan tambahan dan tanpa sistem pengendalian. Apabila dibina, aplikasi dipautkan secara statik ke perpustakaan, yang secara bebas melaksanakan semua fungsi yang diperlukan, tanpa terikat pada kernel OS dan perpustakaan sistem. Kod projek diedarkan di bawah lesen Apache 2.0 dan MIT. Perhimpunan disokong untuk pelaksanaan bersendirian bagi aplikasi yang ditulis dalam Rust, Go, Fortran, C dan C++. Projek ini juga sedang membangunkan pemuat but sendiri yang membolehkan anda melancarkan Hermit menggunakan QEMU dan KVM.

Sumber: opennet.ru

Tambah komen