Basa pemrograman tujuan umum Rust 1.78, didegaké déning proyèk Mozilla nanging saiki dikembangaké ing sangisoré organisasi nirlaba independen Rust Foundation, wis dirilis. Basa kasebut fokus ing safety memori lan nyedhiyakake sarana kanggo nggayuh paralelisme proyek sing dhuwur nalika ngindhari panggunaan kolektor sampah lan runtime (runtime dikurangi dadi initialization dhasar lan pangopènan perpustakaan standar).
Cara nangani memori Rust nylametake pangembang saka kesalahan nalika manipulasi penunjuk lan nglindhungi masalah sing muncul amarga penanganan memori tingkat rendah, kayata ngakses area memori sawise dibebasake, null pointer dereferencing, overruns buffer, etc. Kanggo nyebarake perpustakaan, nyedhiyakake mbangun lan ngatur dependensi, proyek kasebut ngembangake manajer paket Cargo. Repositori crates.io didhukung kanggo hosting perpustakaan.
Keamanan memori diwenehake ing Rust ing wektu kompilasi liwat mriksa referensi, nglacak kepemilikan obyek, nglacak umur obyek (skop), lan netepake akurasi akses memori sajrone eksekusi kode. Rust uga menehi pangayoman marang overflows integer, mbutuhake initialization prentah saka nilai variabel sadurunge nggunakake, Ngalahake kasalahan luwih apik ing perpustakaan standar, ditrapake konsep referensi immutable lan variabel minangka standar, nawakake typing statis kuwat kanggo nyilikake kasalahan logis.
Inovasi utama:
- Spasi jeneng atribut anyar "#[diagnostik]" wis diusulake, nyedhiyakake sarana kanggo mangaruhi pesen kesalahan sing diprodhuksi dening kompiler. Pisanan ing papan anyar yaiku atribut "#[diagnostik:: on_unimplemented]", sing bisa digunakake kanggo ngatur pesen kesalahan sing dibuwang ing kahanan sing sampeyan kudu nggunakake sifat sing ora diimplementasikake kanggo jinis kasebut. #[diagnostic::on_unimplemented( message = "Pesenku kanggo `ImportantTrait<{A}>` ora dileksanakake kanggo `{Self}`", label = "Labelku", cathetan = "Cathetan 1", cathetan = "Cathetan 2")] sifat PentingSipat {} fn gunakake_sipat_ku(_: impl Sipat Penting ) {} fn main() { use_my_trait(String::new()); } kesalahan [E32]: Pesenku kanggo `ImportantTrait ` ora dileksanakake kanggo `String` —> src/main.rs:0277:32 | 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^^^ Label Kula | | | dibutuhake dening bound ngenalaken dening telpon iki | = pitulungan: sipat `Sipat Penting ` ora dileksanakake kanggo `String` = cathetan: Cathetan 18 = cathetan: Cathetan 12
- Pemeriksaan pra-tegas sing ditrapake kanggo fungsi sing ora aman saiki bisa ditundha nganti nggawe kode, ngidini pamriksaan kasebut bisa ditindakake tanpa perlu mbangun perpustakaan standar ing mode "#[cfg(debug_assertions)]". Kanggo miwiti mriksa, saiki cukup kanggo ngaktifake pernyataan debug kanggo uji coba utawa debug kode sampeyan.
- Prilaku fungsi ing perpustakaan standar sing mengaruhi alignment pointer lan irisan saiki bisa diprediksi nalika runtime lan gumantung ing data input. Fungsi pointer :: align_offset, sing ngitung offset kanggo nyelarasake pointer, saiki ngasilake usize :: MAX mung yen operasi gagal. Fungsi irisan::align_to lan slice::align_to_mut loro-lorone, sing ngowahi irisan-irisan dadi perwakilan karo irisan tengah sing didadekake siji lan irisan wiwitan lan pungkasan asli, saiki tansah ngasilake bagian tengah paling gedhe.
- Ing ngisor iki ditransfer menyang kategori stabil:
- impl Waca kanggo &Stdin
- Ngidini panggunaan umur non-statis (non-statis) kanggo sawetara std :: error :: implementasine sing gegandhengan karo kesalahan.
- implementasine impl ?Nilai ukuran diijini.
- impl Saka kanggo io :: Kesalahan
- Fungsi Barrier :: new () wis stabil kanggo digunakake karo atribut "const" ing sembarang konteks tinimbang konstanta.
- Kanggo 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 lan i686-pc-windows-gnu saiki mbutuhake paling ora Windows 10 versi.
- Dhukungan tingkat katelu wis ditindakake kanggo platform wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf lan loongarch64-unknown-linux-musl. Tingkat katelu kalebu dhukungan dhasar, nanging tanpa tes otomatis, nerbitake bangunan resmi, utawa mriksa manawa kode kasebut bisa dibangun.
- Dhukungan tingkat kapindho kanggo platform target Tambah wasm32-wasip1 wis dileksanakake. Dhukungan tingkat kapindho kalebu jaminan perakitan.
- Platform wasm32-wasi-preview1-threads wis diganti jeneng dadi wasm32-wasip1-threads.
- Compiler wis diuripake kanggo nggunakake LLVM 18. Nalika nggunakake LLVM 18 kanggo x86-32 lan x86-64 arsitektur, ABI gadhah jinis u128 lan i128 diganti.
- Ing manajer pakta Cargo, versi 4 file kunci (lockfile v4) wis distabilake.
- Kargo nduweni cache global sing stabil kanthi informasi babagan panggunaan data paling anyar. Cache di-host ing $ CARGO_HOME / .global-cache nggunakake SQLite lan dianyari kanthi otomatis kanggo nggambarake owah-owahan paling anyar kanggo indeks, file peti, direktori kode, git clone, lan git checkout.
Kajaba iku, basa pamrograman Borgo nyoba dadi luwih ekspresif tinimbang basa Go, nanging kurang rumit tinimbang basa Rust. Borgo nggabungake fitur paling apik saka Go lan Rust, nggawe kekurangan saben basa. Contone, Go iku prasaja lan langsung, nanging ora nyedhiyani fitur safety jinis majeng. Basa Rust nyedhiyakake alat kanggo program sing aman, nanging rumit banget. Proyèk iki dikembangaké déning Marco Sampellegrini, penulis The Simple Haskell Handbook lan pangembang sistem integrasi terus-terusan Quad CI.

Borgo nggunakake typing statis, jinis Go-like, lan sintaks kaya Rust. Titik koma opsional ing pungkasan baris ing kode Borgo. Kode Borgo dikompilasi dadi perwakilan Go sing kompatibel karo paket Go sing wis ana. Kode compiler ditulis ing Rust lan disebarake miturut lisensi ISC. gunakake fmt enum NetworkState { Loading, Failed(int), Success(T), } struct Response {title: string, duration: int, } fn main() {let res = Response {judhul: "Hello world", duration: 0, } let state = NetworkState.Success(res) let msg = match state { NetworkState.Loading => "isih dimuat", NetworkState.Failed(kode) => fmt.Sprintf("Entuk kode kesalahan: %d", kode), NetworkState.Success (res) => res.title, } fmt.Println(msg) }
Source: opennet.ru
