Rilis bahasa pemrograman tujuan umum Rust 1.78, 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:
- Namespace atribut baru "#[diagnostic]" telah diusulkan, menyediakan sarana untuk mempengaruhi pesan kesalahan yang dihasilkan oleh kompiler. Yang pertama di ruang baru adalah atribut "#[diagnostic::on_unimplemented]", yang dapat digunakan untuk menyesuaikan pesan kesalahan yang ditampilkan dalam situasi di mana Anda perlu menggunakan sifat yang tidak diterapkan untuk jenis tersebut. #[diagnostic::on_unimplemented( message = "Pesan Saya untuk `ImportantTrait<{A}>` tidak diterapkan untuk `{Self}`", label = "Label Saya", note = "Catatan 1", note = "Catatan 2" )] sifat Sifat Penting {} fn use_my_trait(_: impl Sifat Penting ) {} fn main() { use_my_trait(String::baru()); } error[E32]: Pesan Saya untuk `ImportantTrait ` tidak diterapkan untuk `String` —> src/main.rs:0277:32 | 12 | use_my_trait(String::baru()); | ———— ^^^^^^^^^^^^^ Label Saya | | | dibutuhkan oleh batas yang diperkenalkan oleh panggilan ini | = bantuan: sifat `Sifat Penting ` tidak diterapkan untuk `String` = catatan: Catatan 18 = catatan: Catatan 12
- Pemeriksaan pra-penegasan yang diterapkan pada fungsi yang tidak aman kini dapat ditunda hingga pembuatan kode, sehingga pemeriksaan ini dapat dilakukan tanpa perlu membuat pustaka standar dalam mode "#[cfg(debug_assertions)]". Untuk memicu pemeriksaan, sekarang cukup dengan mengaktifkan pernyataan debug untuk pengujian atau pembuatan debug kode Anda.
- Perilaku fungsi di pustaka standar yang memengaruhi penyelarasan pointer dan irisan kini dapat diprediksi saat runtime dan bergantung pada data masukan. Fungsi pointer::align_offset, yang menghitung offset untuk menyelaraskan pointer, kini mengembalikan usize::MAX hanya jika operasi gagal. Fungsi irisan::align_to dan irisan::align_to_mut keduanya, yang mengubah irisan menjadi representasi dengan irisan tengah yang sejajar serta irisan awal dan akhir yang asli, kini selalu mengembalikan bagian tengah terbesar.
- Berikut ini yang dipindahkan ke kategori stabil:
- impl Baca untuk &Stdin
- Izinkan penggunaan seumur hidup non-statis (non-statis) untuk beberapa implementasi terkait std::error::Error.
- Implementasi implan diperbolehkan menggunakan nilai ?Sized.
- impl Dari untuk io::Kesalahan
- Fungsi Barrier::new() telah distabilkan untuk digunakan dengan atribut "const" dalam konteks apa pun, bukan konstanta.
- Untuk platform target x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm dan i686-pc-windows-gnullvm sekarang membutuhkan setidaknya versi Windows 10.
- Dukungan tingkat ketiga telah diterapkan untuk platform wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf dan loongarch64-unknown-linux-musl. Tingkat ketiga melibatkan dukungan dasar, tetapi tanpa pengujian otomatis, penerbitan versi resmi, atau pemeriksaan apakah kode dapat dibuat.
- Dukungan tingkat kedua untuk platform target Tambahkan wasm32-wasip1 telah diterapkan. Dukungan tingkat kedua melibatkan jaminan perakitan.
- Platform wasm32-wasi-preview1-threads telah diubah namanya menjadi wasm32-wasip1-threads.
- Kompiler telah dialihkan untuk menggunakan LLVM 18. Saat menggunakan LLVM 18 untuk arsitektur x86-32 dan x86-64, ABI yang terkait dengan tipe u128 dan i128 telah diubah.
- Di manajer pakta Kargo, versi 4 file kunci (lockfile v4) telah distabilkan.
- Cargo memiliki cache global yang stabil dengan informasi tentang penggunaan data terbaru. Cache dihosting di $CARGO_HOME/.global-cache menggunakan SQLite dan diperbarui secara otomatis untuk mencerminkan perubahan terbaru pada indeks, file peti, direktori kode, git clone, dan git checkout.
Selain itu, bahasa pemrograman Borgo mencoba menjadi lebih ekspresif dibandingkan bahasa Go, tetapi tidak sekompleks bahasa Rust. Borgo menggabungkan fitur terbaik Go dan Rust, menutupi kekurangan masing-masing bahasa. Misalnya, Go sederhana dan lugas, tetapi tidak menyediakan fitur keamanan tipe tingkat lanjut. Bahasa Rust menyediakan alat untuk pemrograman yang aman, namun terlalu rumit. Proyek ini dikembangkan oleh Marco Sampellegrini, penulis The Simple Haskell Handbook dan pengembang sistem integrasi berkelanjutan Quad CI.

Borgo menggunakan pengetikan statis, tipe mirip Go, dan sintaksis mirip Rust. Titik koma bersifat opsional di akhir baris dalam kode Borgo. Kode Borgo dikompilasi menjadi representasi Go yang sepenuhnya kompatibel dengan paket Go yang ada. Kode kompiler ditulis dalam Rust dan didistribusikan di bawah lisensi ISC. gunakan fmt enum NetworkState { Memuat, Gagal(int), Berhasil(T), } struct Response { judul: string, durasi: int, } fn main() { let res = Response { title: “Halo dunia”, durasi: 0, } biarkan menyatakan = NetworkState.Success(res) let msg = match state { NetworkState.Loading => “masih memuat”, NetworkState.Failed(code) => fmt.Sprintf(“Mendapat kode kesalahan: %d”, kode), NetworkState.Success (res) => res.title, } fmt.Println(pesan) }
Sumber: opennet.ru
