Rilis Bahasa Pemrograman Rust 1.61

Rilis bahasa pemrograman tujuan umum Rust 1.61, 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:

  • Dimungkinkan untuk menentukan kode pengembalian Anda sendiri dari fungsi utama. Awalnya, fungsi utama Rust hanya dapat mengembalikan tipe "()" (unit), yang selalu menunjukkan status keluar yang berhasil kecuali pengembang secara eksplisit memanggil fungsi "proses::keluar(kode)". Di Rust 1.26, menggunakan sifat Termination yang tidak stabil di fungsi utama, dimungkinkan untuk mengembalikan nilai β€œOk” dan β€œErr”, sesuai dengan kode EXIT_SUCCESS dan EXIT_FAILURE dalam program C. Di Rust 1.61, sifat Termination telah dibuat stabil, dan tipe ExitCode terpisah telah diusulkan untuk mewakili kode pengembalian tertentu, yang mengabstraksi tipe pengembalian khusus platform dengan menyediakan konstanta SUCCESS dan FAILURE yang telah ditentukan sebelumnya, dan metode Dari untuk mengembalikan kode pengembalian khusus. gunakan std::proses::Kode Keluar; fn main() -> ExitCode { jika !check_foo() { return ExitCode::from(8); } Kode Keluar :: SUKSES }
  • Kemampuan tambahan dari fungsi yang didefinisikan menggunakan ekspresi β€œconst fn” telah distabilkan, yang dapat disebut tidak hanya sebagai fungsi biasa, tetapi juga digunakan dalam konteks apa pun, bukan konstanta. Fungsi-fungsi ini dihitung pada waktu kompilasi, bukan pada waktu proses, sehingga fungsi-fungsi tersebut tunduk pada batasan tertentu, seperti kemampuan untuk membaca hanya dari konstanta. Di versi baru, operasi dasar dengan penunjuk fungsi diperbolehkan di dalam fungsi const (membuat, meneruskan, dan mentransmisikan penunjuk diperbolehkan, tetapi tidak memanggil fungsi dengan penunjuk); batas sifat untuk parameter umum fungsi const seperti T: Copy; ciri-ciri yang dapat dikirim secara dinamis (dyn Trait); impl Tipe sifat untuk argumen fungsi dan nilai kembalian.
  • Aliran menangani Stdin, Stdout dan Stderr di std::io sekarang memiliki masa pakai statis ("'statis") ketika dikunci, memungkinkan konstruksi seperti "let out = std::io::stdout().lock();" dengan mendapatkan pegangan dan memasang kunci dalam satu ekspresi.
  • Bagian baru dari API telah dipindahkan ke kategori stabil, termasuk metode dan penerapan sifat yang telah distabilkan:
    • Pin::statis_mut
    • Pin::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • Menulis untuk Kursor<[u8; T]>
    • std::os::unix::net::SocketAddr::from_pathname
    • std::proses::Kode Keluar
    • std::proses::Penghentian
    • std::thread::JoinHandle::is_selesai
  • Atribut β€œconst”, yang menentukan kemungkinan menggunakannya dalam konteks apa pun alih-alih konstanta, digunakan dalam fungsi:
    • <*const T>::offset dan <*mut T>::offset
    • <*const T>::wrapping_offset dan <*mut T>::wrapping_offset
    • <*const T>::tambahkan dan <*mut T>::tambahkan
    • <*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]>::as_ptr_range
    • <[T]>::as_mut_ptr_range

Selain itu, Anda dapat mencatat artikel β€œRust: A Critical Retrospective” dengan ringkasan kesan bahasa Rust setelah menulis 100 ribu baris kode di dalamnya selama pengembangan sistem operasi mikrokernel Xous yang digunakan dalam firmware. Kerugiannya termasuk sintaksis yang sulit dipahami, ketidaklengkapan dan pengembangan bahasa yang berkelanjutan, kurangnya pembangunan yang dapat diulang, masalah umum dengan kepercayaan ketergantungan pada Crates.io, dan kebutuhan untuk mempertahankan disiplin tertentu dalam menulis kode yang aman. Fitur yang melampaui ekspektasi mencakup alat untuk memfaktorkan ulang kode dan mengerjakan ulang β€œperetasan” yang ditambahkan selama pembuatan prototipe cepat.

Sumber: opennet.ru

Tambah komentar