Basa pemrograman Rust 1.57 release

Rilis basa pemrograman sistem Rust 1.57, sing diadegake dening proyek Mozilla, nanging saiki dikembangake ing sangisore organisasi nirlaba independen Rust Foundation, wis diterbitake. Basa fokus ing safety memori, menehi Manajemen memori otomatis, lan menehi liya kanggo entuk podo tugas dhuwur tanpa nggunakake kolektor uwuh utawa runtime (runtime suda kanggo initialization dhasar lan pangopènan perpustakaan standar).

Manajemen memori otomatis Rust ngilangake kasalahan nalika manipulasi penunjuk lan nglindhungi saka masalah njedhul saka manipulasi memori tingkat kurang, kayata ngakses wilayah memori sawise wis dibebaske, null pointer dereferences, buffer overruns, etc. Kanggo nyebarake perpustakaan, mesthekake perakitan lan ngatur dependensi, proyek ngembangake manajer paket Cargo. Repositori crates.io didhukung kanggo hosting perpustakaan.

Inovasi utama:

  • Panggunaan makro "gupuh!" wis stabil. ing konteks sing digawe sajrone kompilasi, kayata deklarasi "const fn". Kajaba iku, saliyane nggunakake "gupuh!" deklarasi const ngidini nggunakake "negesake!"Macro. lan sawetara API perpustakaan standar liyane. Stabilisasi durung nyakup kabeh prasarana format, saengga ing wangun saiki "gupuh!" makro mung bisa digunakake nganggo senar statis (gupuh!(β€œ...")) utawa kanthi nilai interpolasi tunggal "&str" nalika ngganti (gupuh!("{}", a)), sing kudu diwatesi kanggo ngganti "{ }" tanpa format specifiers lan jinis liyane. Ing mangsa ngarep, aplikasi makro ing konteks konstan bakal ditambahi, nanging kabisan sing stabil wis cukup kanggo nindakake pemeriksaan assert ing tahap kompilasi: const _: () = assert!(std::mem::size_of:: () == 64); const _: () = assert!(std::mem::size_of:: () == 8);
  • Manajer paket Cargo ngidini panggunaan profil kanthi jeneng sing sewenang-wenang, ora diwatesi karo "dev", "release", "test" lan "bench". Contone, kanggo ngaktifake optimasi ing tataran linking (LTO) mung nalika rakitan produk final kui, sampeyan bisa nggawe profil "produksi" ing Cargo.toml lan nambah flag "lto = bener". Nanging, nalika nemtokake profil sampeyan dhewe, sampeyan kudu nemtokake profil sing wis ana kanggo entuk setelan gawan saka iku. Conto ing ngisor iki nggawe profil "produksi" sing nglengkapi profil "rilis" kanthi nyakup gendera "lto = bener". Profil kasebut dhewe diaktifake kanthi nelpon kargo kanthi pilihan "--profile production", lan artefak perakitan bakal diselehake ing direktori "target / produksi". [profile.production] inherits = "release" lto = bener
  • Panggunaan try_reserve kanggo jinis Vec, String, HashMap, HashSet lan VecDeque wis distabilake, sing ngidini sampeyan nyimpen papan luwih dhisik kanggo sawetara unsur saka jinis tartamtu supaya bisa nyuda frekuensi operasi alokasi memori lan nyegah kacilakan sajrone operasi amarga kurang memori.
  • Diijini kanggo nemtokake macro karo kurung kriting ing ekspresi kaya "m!{ .. }.metode ()" lan "m!{ .. }?".
  • Eksekusi fungsi File :: read_to_end lan read_to_string wis dioptimalake.
  • Dhukungan kanggo spesifikasi Unicode wis dianyari menyang versi 14.0.
  • Ngembangake jumlah fungsi sing ditandhani "#[must_use]" kanggo ngetokake bebaya yen nilai bali ora digatekake, sing mbantu ngenali kesalahan sing disebabake yen fungsi bakal ngganti nilai tinimbang ngasilake nilai anyar.
  • Ditambahake backend eksperimen kanggo generasi kode nggunakake libgccjit.
  • Bagean anyar saka API wis dipindhah menyang kategori stabil, kalebu cara lan implementasine sifat wis stabil:
    • [T; N]::as_mut_slice
    • [T; N]:: minangka_slice
    • koleksi :: TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • String::try_reserve
    • String:: try_reserve_exact
    • Vec::try_reserve
    • Vec:: try_reserve_exact
    • VecDeque:: try_reserve
    • VecDeque:: try_reserve_exact
    • Iterator::map_while
    • iter::MapWhile
    • proc_macro:: is_available
    • Perintah::get_program
    • Prentah:: get_args
    • Perintah::get_envs
    • Prentah:: get_current_dir
    • CommandArgs
    • CommandEnvs
  • Atribut "const", sing nemtokake manawa bisa digunakake ing konteks apa wae tinimbang konstanta, digunakake ing pitunjuk fungsi:: unreachable_unchecked.
  • Dhukungan tingkat katelu wis dileksanakake kanggo armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi lan armv7a-kmc- platform solid_asp3-eabihf. Tingkat katelu kalebu dhukungan dhasar, nanging tanpa tes otomatis, nerbitake bangunan resmi, utawa mriksa manawa kode kasebut bisa dibangun.

Source: opennet.ru

Add a comment