Keluaran bahasa pengaturcaraan Rust 1.61

Bahasa pengaturcaraan tujuan umum Rust 1.61, 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:

  • Ia adalah mungkin untuk menentukan kod pulangan anda sendiri dari fungsi utama. Pada asalnya, fungsi utama Rust hanya boleh mengembalikan jenis "()" (unit), yang sentiasa menunjukkan status keluar yang berjaya melainkan pembangun secara eksplisit memanggil fungsi "process::exit(code)". Dalam Rust 1.26, menggunakan ciri Penamatan yang tidak stabil dalam fungsi utama, adalah mungkin untuk mengembalikan nilai "Ok" dan "Err", sepadan dengan kod EXIT_SUCCESS dan EXIT_FAILURE dalam program C. Dalam Rust 1.61, ciri Penamatan telah dibuat stabil, dan jenis ExitCode yang berasingan telah dicadangkan untuk mewakili kod pulangan tertentu, yang mengabstrak jenis pulangan khusus platform dengan menyediakan kedua-dua pemalar yang dipratentukan SUCCESS dan FAILURE, dan kaedah Daripada untuk mengembalikan kod pulangan tersuai. gunakan std::process::ExitCode; fn main() -> ExitCode { if !check_foo() { return ExitCode::from(8); } ExitCod::SUCCESS }
  • Keupayaan tambahan fungsi yang ditakrifkan menggunakan ungkapan "const fn" telah distabilkan, yang boleh dipanggil bukan sahaja sebagai fungsi biasa, tetapi juga digunakan dalam sebarang konteks dan bukannya pemalar. Fungsi ini dikira pada masa penyusunan, bukan pada masa jalan, jadi ia tertakluk kepada sekatan tertentu, seperti keupayaan untuk membaca hanya daripada pemalar. Dalam versi baharu, operasi asas dengan penuding fungsi dibenarkan di dalam fungsi const (mencipta, menghantar dan menghantar penunjuk dibenarkan, tetapi tidak memanggil fungsi dengan penuding); sempadan sifat untuk parameter generik fungsi const seperti T: Salin; sifat yang boleh dihantar secara dinamik (dyn Trait); Jenis sifat impl untuk argumen fungsi dan nilai pulangan.
  • Strim mengendalikan Stdin, Stdout dan Stderr dalam std::io kini mempunyai hayat statik (β€œ'statik”) apabila dikunci, membenarkan binaan seperti β€œlet out = std::io::stdout().lock();” dengan mendapatkan pemegang dan menetapkan kunci dalam satu ungkapan.
  • Bahagian baharu API telah dialihkan ke kategori stabil, termasuk kaedah dan pelaksanaan ciri telah distabilkan:
    • Pin::static_mut
    • Pin::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • Tulis untuk Kursor<[u8; N]>
    • std::os::unix::net::SocketAddr::from_pathname
    • std::process::ExitCode
    • std::process::Penamatan
    • std::thread::JoinHandle::is_finished
  • Atribut "const", yang menentukan kemungkinan menggunakannya dalam sebarang konteks dan bukannya pemalar, digunakan dalam fungsi:
    • <*const T>::offset dan <*mut T>::offset
    • <*const T>::wrapping_offset dan <*mut T>::wrapping_offset
    • <*const T>::tambah dan <*mut T>::tambah
    • <*const T>::sub dan <*mut T>::sub
    • <*const T>::wrapping_add dan <*mut T>::wrapping_add
    • <*const T>::wrapping_sub dan <*mut T>::wrapping_sub
    • <[T]>::as_mut_ptr
    • <[T]>::sebagai_ptr_range
    • <[T]>::sebagai_mut_ptr_range

Selain itu, anda boleh perhatikan artikel "Rust: A Critical Retrospective" dengan ringkasan tera bahasa Rust selepas menulis 100 ribu baris kod di dalamnya semasa pembangunan sistem pengendalian mikrokernel Xous yang digunakan dalam perisian tegar. Kelemahan termasuk sintaks yang sukar difahami, ketidaklengkapan dan pembangunan berterusan bahasa, kekurangan binaan yang boleh diulang, masalah biasa dengan kepercayaan pergantungan dalam Crates.io, dan keperluan untuk mengekalkan disiplin tertentu untuk menulis kod selamat. Ciri yang melebihi jangkaan termasuk alat untuk pemfaktoran semula kod dan mengolah semula "godam" ditambah semasa prototaip pantas.

Sumber: opennet.ru

Tambah komen