Rilis bahasa pemrograman Rust 1.75 dan unikernel Hermit 0.6.7

Rilis bahasa pemrograman tujuan umum Rust 1.75, yang didirikan oleh proyek Mozilla, tetapi sekarang dikembangkan di bawah naungan organisasi nirlaba independen Rust Foundation, telah diterbitkan. Bahasa berfokus pada keamanan memori dan menyediakan sarana untuk mencapai paralelisme pekerjaan yang tinggi sambil menghindari penggunaan pengumpul sampah dan runtime (runtime dikurangi menjadi inisialisasi dasar dan pemeliharaan perpustakaan standar).

Metode penanganan memori Rust menyelamatkan pengembang dari kesalahan saat memanipulasi pointer dan melindungi dari masalah yang muncul karena penanganan memori tingkat rendah, seperti mengakses area memori setelah dibebaskan, dereferencing null pointer, buffer overruns, dll. Untuk mendistribusikan pustaka, menyediakan build, dan mengelola dependensi, proyek mengembangkan manajer paket Cargo. Repositori crates.io didukung untuk hosting perpustakaan.

Keamanan memori disediakan di Rust pada waktu kompilasi melalui pemeriksaan referensi, melacak kepemilikan objek, melacak masa pakai objek (cakupan), dan menilai kebenaran akses memori selama eksekusi kode. Rust juga memberikan perlindungan terhadap integer overflow, membutuhkan inisialisasi wajib dari nilai variabel sebelum digunakan, menangani kesalahan dengan lebih baik di perpustakaan standar, menerapkan konsep referensi dan variabel yang tidak dapat diubah secara default, menawarkan pengetikan statis yang kuat untuk meminimalkan kesalahan logis.

Inovasi utama:

  • Menambahkan kemampuan untuk menggunakan notasi "async fn" dan notasi "->impl Trait" dalam ciri pribadi. Misalnya, dengan menggunakan “->impl Trait” Anda dapat menulis metode sifat yang mengembalikan iterator: trait Container { fn items(&self) -> impl Iterator; } impl Kontainer untuk MyContainer { fn item(&self) -> impl Iterator { self.items.iter().cloned() } }

    Anda juga dapat membuat sifat menggunakan "async fn": trait HttpService { async fn ambil(&self, url: Url) -> HtmlBody; // akan diperluas menjadi: // fn ambil(&self, url: Url) -> impl Future; }

  • Menambahkan API untuk menghitung offset byte relatif terhadap pointer. Saat bekerja dengan pointer kosong (“*const T” dan “*mut T”), operasi mungkin diperlukan untuk menambahkan offset ke pointer. Sebelumnya, untuk ini dimungkinkan untuk menggunakan konstruksi seperti “::add(1)”, menambahkan jumlah byte yang sesuai dengan ukuran “size_of::()”. API baru menyederhanakan operasi ini dan memungkinkan manipulasi offset byte tanpa terlebih dahulu memasukkan tipe ke "*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
  • Melanjutkan pekerjaan untuk meningkatkan kinerja kompiler Rustc. Menambahkan pengoptimal BOLT, yang berjalan pada tahap pasca-tautan dan menggunakan informasi dari profil eksekusi yang telah disiapkan sebelumnya. Menggunakan BOLT memungkinkan Anda mempercepat eksekusi kompiler sekitar 2% dengan mengubah tata letak kode perpustakaan librustc_driver.so untuk penggunaan cache prosesor yang lebih efisien.

    Termasuk membangun kompiler Rustc dengan opsi "-Ccodegen-units=1" untuk meningkatkan kualitas pengoptimalan di LLVM. Pengujian yang dilakukan menunjukkan peningkatan kinerja dalam kasus build “-Ccodegen-units=1” sekitar 1.5%. Pengoptimalan tambahan diaktifkan secara default hanya untuk platform x86_64-unknown-linux-gnu.

    Pengoptimalan yang disebutkan sebelumnya telah diuji oleh Google untuk mengurangi waktu pembuatan komponen platform Android yang ditulis dalam Rust. Penggunaan “-C codegen-units=1” saat membuat Android memungkinkan kami mengurangi ukuran toolkit sebesar 5.5% dan meningkatkan kinerjanya sebesar 1.8%, sementara waktu pembuatan toolkit itu sendiri meningkat hampir dua kali lipat.

    Mengaktifkan pengumpulan sampah waktu tautan (“--gc-sections”) menghasilkan peningkatan kinerja hingga 1.9%, mengaktifkan pengoptimalan waktu tautan (LTO) hingga 7.7%, dan pengoptimalan berbasis profil (PGO) hingga 19.8% . Pada akhirnya, optimasi diterapkan menggunakan utilitas BOLT, yang memungkinkan peningkatan kecepatan build hingga 24.7%, namun ukuran toolkit meningkat sebesar 10.9%.

    Rilis bahasa pemrograman Rust 1.75 dan unikernel Hermit 0.6.7

  • Bagian baru dari API telah dipindahkan ke kategori stabil, termasuk metode dan penerapan sifat yang telah distabilkan:
    • Atom*::from_ptr
    • Waktu File
    • FileTimesExt
    • Berkas::set_modifikasi
    • Berkas::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Opsi::as_slice
    • Opsi::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 konteks apa pun alih-alih konstanta, digunakan dalam fungsi:
    • Ipv6Addr::to_ipv4_mapped
    • MungkinUninit::assume_init_read
    • MungkinUninit::dipusatkan
    • mem::diskriminan
    • mem::dipusatkan
  • Dukungan tingkat ketiga telah diterapkan untuk platform csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd dan mipsel-unknown-netbsd. Tingkat ketiga melibatkan dukungan dasar, tetapi tanpa pengujian otomatis, penerbitan versi resmi, atau pemeriksaan apakah kode dapat dibuat.

Selain itu, kita dapat mencatat versi baru dari proyek Hermit, yang mengembangkan kernel khusus (unikernel), ditulis dalam bahasa Rust, menyediakan alat untuk membangun aplikasi mandiri yang dapat berjalan di atas hypervisor atau perangkat keras tanpa lapisan tambahan. dan tanpa sistem operasi. Saat dibuat, aplikasi ditautkan secara statis ke perpustakaan, yang secara independen mengimplementasikan semua fungsi yang diperlukan, tanpa terikat ke kernel OS dan perpustakaan sistem. Kode proyek didistribusikan di bawah lisensi Apache 2.0 dan MIT. Majelis didukung untuk eksekusi mandiri aplikasi yang ditulis dalam Rust, Go, Fortran, C dan C++. Proyek ini juga mengembangkan bootloadernya sendiri yang memungkinkan Anda meluncurkan Hermit menggunakan QEMU dan KVM.

Sumber: opennet.ru

Tambah komentar