Rilis bahasa pemrograman tujuan umum Rust 1.63, 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:
- API std::thread::scope telah ditambahkan, memungkinkan pembuatan thread dengan cakupan tertentu. Tidak seperti thread yang tersedia sebelumnya, API std::thread::scope yang baru memungkinkan peminjaman data non-statis, sementara thread yang dibuat menggunakan API std::thread::spawn klasik harus memiliki semua argumen yang diteruskan dan tidak dapat memperoleh variabel yang dipinjam. API std::thread::scope menjamin bahwa setiap thread yang dihasilkan akan berhenti sebelum mengembalikan data, memberikan tingkat keamanan yang diperlukan untuk mekanisme peminjaman.
- Tipe pengikatan deskriptor berkas baru, BorrowedFd dan OwnedFd, diusulkan, yang menyediakan peminjaman dan kepemilikan. Tipe-tipe ini ditandai dengan "#[repr(transparan)]", yang memungkinkannya digunakan langsung dalam pengikatan C eksternal dengan kepemilikan.
- Menyediakan kemampuan untuk memanggil Condvar::new, Mutex::new, dan RwLock::new dalam konteks konstan untuk membuat nilai Mutex, RwLock, dan Condvar statis global tanpa menggunakan paket lazy_static.
- Untuk fungsi bertipe fn foo (nilai: T, f: impl Copy) sintaks seperti "foo:: diperbolehkan (3, 3)”, yang secara jelas menunjukkan jenis generiknya.
- Transisi ke teknik NLL (Non-Lexical Lifetimes) untuk mendeteksi masalah peminjaman variabel telah selesai. NLL melakukan penghitungan pada level serangkaian pointer dalam grafik alur eksekusi, yang meningkatkan kualitas pemeriksa peminjaman dan memungkinkan eksekusi beberapa jenis kode yang benar yang sebelumnya menghasilkan kesalahan. Dukungan untuk mekanisme lama, yang menggunakan pengikatan lexical lifetime, kini telah dihapus sepenuhnya dari rustc, dan penggunaan NLL baru telah diimplementasikan secara universal.
- Bagian baru dari API telah dipindahkan ke kategori stabil, termasuk metode dan penerapan sifat yang telah distabilkan:
- array::dari_fn
- Kotak::ke_pin
- BinaryHeap::coba_cadangan
- BinaryHeap::coba_cadangan_tepat
- OsString::coba_cadangan
- OsString::coba_cadangan_tepat
- PathBuf::coba_cadangan
- PathBuf::coba_cadangan_tepat
- Jalur::coba_ada
- Ref::peta_filter
- RefMut::peta_filter
- BukanNull::<[T]>::len
- Dimiliki::kloning_ke
- Ipv6Addr::to_ipv4_mapped
- unix::io::AsFd
- unix::io::BorrowedFd<'fd>
- unix::io::OwnedFd
- windows::io::SebagaiPegangan
- windows::io::BorrowedHandle
Sumber: opennet.ru
