Karat 1.53 dirilis. Google akan mendanai penambahan dukungan Rust ke kernel Linux

Rilis bahasa pemrograman sistem Rust 1.53, yang didirikan oleh proyek Mozilla, tetapi sekarang dikembangkan di bawah naungan organisasi nirlaba independen Rust Foundation, telah diterbitkan. Bahasa ini berfokus pada keamanan memori, menyediakan manajemen memori otomatis, dan menyediakan sarana untuk mencapai paralelisme tugas yang tinggi tanpa menggunakan pengumpul sampah atau waktu proses (waktu proses dikurangi menjadi inisialisasi dasar dan pemeliharaan perpustakaan standar).

Manajemen memori otomatis Rust menyelamatkan pengembang dari kesalahan saat memanipulasi pointer dan melindungi dari masalah yang muncul karena manipulasi 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.

Inovasi utama:

  • Untuk array, sifat IntoIterator telah diterapkan, yang memungkinkan Anda mengatur iterasi elemen array berdasarkan nilai: for i in [1, 2, 3] { .. }

    Dimungkinkan juga untuk meneruskan array ke metode yang menerima iterator, misalnya: let set = BTreeSet::from_iter([1, 2, 3]); untuk (a, b) di some_iterator.chain([1]).zip([1, 2, 3]) { .. }

    Sebelumnya, IntoIterator hanya diimplementasikan untuk referensi array, mis. untuk mengulangi nilai diperlukan penggunaan referensi (β€œ&[1, 2, 3]”) atau β€œ[1, 2, 3].iter()”. Implementasi IntoIterator untuk array terhambat oleh masalah kompatibilitas yang disebabkan oleh konversi compiler sebelumnya dari array.into_iter() ke (&array).into_iter(). Masalah ini diselesaikan dengan solusi - kompiler akan terus mengonversi array.into_iter() menjadi (&array).into_iter() seolah-olah tidak ada implementasi sifat IntoIterator, tetapi hanya saat memanggil metode menggunakan ".into_iter( )" sintaksisnya dan tanpa menyentuh pemanggilan dalam bentuk "in [1, 2, 3]", "iter.zip([1, 2, 3])", "IntoIterator::into_iter([1, 2, 3] )".

  • Dimungkinkan untuk menentukan ekspresi β€œ|” (operasi logika OR) di bagian mana pun dari templat, misalnya, alih-alih β€œSome(1) | Some(2)" sekarang Anda dapat menulis "Some(1 | 2)": hasil pencocokan { Ok(Some(1 | 2)) => { .. } Err(MyError { kind: FileNotFound | PermissionDenied, .. }) = > { .. } _ => { .. } }
  • Penggunaan karakter non-ASCII dalam pengidentifikasi diperbolehkan, termasuk karakter nasional apa pun yang ditentukan dalam spesifikasi Unicode UAX 31, namun tidak termasuk karakter emoji. Jika Anda menggunakan karakter yang berbeda namun serupa, kompiler akan mengeluarkan peringatan. const BLΓ…HAJ: &str = "🦈"; struct δΊΊ {名字: String, } misalkan Ξ± = 1; misalkansos = 2; peringatan: pasangan pengenal dianggap dapat membingungkan antara 's' dan 's'
  • Sebagian API baru telah dipindahkan ke kategori stabil, termasuk yang distabilkan berikut ini:
    • larik::dari_ref
    • larik::dari_mut
    • AtomicBool::fetch_update
    • AtomicPtr::fetch_update
    • BTreeSet::pertahankan
    • BTreeMap::pertahankan
    • BufReader::seek_relative
    • cmp::min_by
    • cmp::min_by_key
    • cmp::max_by
    • cmp::max_by_key
    • DebugStruct::finish_non_exhaustive
    • Durasi::NOL
    • Durasi::maks
    • Durasi :: is_zero
    • Durasi::saturating_add
    • Durasi::saturating_sub
    • Durasi::jenuh_mul
    • f32::adalah_di bawahnormal
    • f64::adalah_di bawahnormal
    • IntoIterator untuk array
    • {bilangan bulat}::BIT
    • io::Kesalahan::Tidak didukung
    • BukanZero*::leading_zeros
    • BukanZero*::trailing_zeros
    • Opsi::masukkan
    • Pemesanan::is_eq
    • Pemesanan::is_ne
    • Pemesanan::is_lt
    • Pemesanan::is_gt
    • Pemesanan::is_le
    • Pemesanan::is_ge
    • OsStr::make_ascii_huruf kecil
    • OsStr::make_ascii_uppercase
    • OsStr::to_ascii_huruf kecil
    • OsStr::to_ascii_uppercase
    • OsStr::is_ascii
    • OsStr::eq_ignore_ascii_case
    • Dapat dilihat::peek_mut
    • Rc::peningkatan_kuat_hitungan
    • Rc::pengurangan_strong_count
    • irisan::IterMut::as_slice
    • AsRef<[T]> untuk irisan::IterMut
    • impl SliceIndex untuk (Terikat , Melompat )
    • Vec::extend_from_within
  • Dukungan tingkat ketiga untuk platform wasm64-unknown-unknown telah diterapkan. Tingkat ketiga melibatkan dukungan dasar, tetapi tanpa pengujian otomatis, penerbitan versi resmi, atau pemeriksaan apakah kode dapat dibuat.
  • Manajer paket Cargo telah dipindahkan untuk menggunakan nama "main" untuk cabang utama repositori Git (HEAD) secara default. Dependensi yang dihosting di repositori yang menggunakan nama main alih-alih master tidak lagi memerlukan konfigurasi Branch = "main".
  • Di kompiler, persyaratan untuk versi minimum LLVM dinaikkan menjadi LLVM 10.

Selain itu, kami dapat mencatat penyediaan dana untuk pengembangan integrasi ke dalam kernel Linux alat untuk mengembangkan komponen dalam bahasa Rust. Pekerjaan tersebut akan dilakukan dalam kerangka proyek Prossimo di bawah naungan organisasi ISRG (Internet Security Research Group), yang merupakan pendiri proyek Let's Encrypt dan mempromosikan HTTPS serta pengembangan teknologi untuk meningkatkan keamanan file. Internet. Dana tersebut akan disediakan oleh Google, yang akan membiayai pekerjaan Miguel Ojeda, penulis proyek Rust-for-Linux. Sebelumnya, ISRG dan Google telah mendanai pembuatan backend HTTP alternatif untuk utilitas curl dan pengembangan modul TLS baru untuk server http Apache.

Menurut Microsoft dan Google, sekitar 70% kerentanan disebabkan oleh penanganan memori yang tidak aman. Penggunaan bahasa Rust untuk mengembangkan komponen kernel seperti driver perangkat diharapkan akan mengurangi risiko kerentanan yang disebabkan oleh penanganan memori yang tidak aman dan menghilangkan kesalahan seperti mengakses wilayah memori setelah dibebaskan dan melampaui batas buffer.

Penanganan aman-memori disediakan di Rust pada waktu kompilasi melalui pemeriksaan referensi, melacak kepemilikan objek dan masa pakai objek (cakupan), serta melalui evaluasi 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.

Sumber: opennet.ru

Tambah komentar