Rust 1.57 Programming Language Release

Pelepasan sistem basa programming Rust 1.57, diadegkeun ku proyék Mozilla, tapi ayeuna dimekarkeun dina naungan organisasi non-profit bebas Rust Foundation, geus diterbitkeun. Basa museurkeun kana kaamanan memori, nyadiakeun manajemén memori otomatis, jeung nyadiakeun sarana pikeun ngahontal paralelisme tugas tinggi tanpa ngagunakeun collector sampah atanapi runtime (runtime diréduksi jadi initialization dasar tur pamaliharaan perpustakaan baku).

Manajemén mémori otomatis Rust ngaleungitkeun kasalahan nalika ngamanipulasi pointer sareng ngajagi tina masalah anu timbul tina manipulasi mémori tingkat rendah, sapertos aksés ka daérah mémori saatos dibébaskeun, dereferensi pointer nol, overruns panyangga, jsb. Pikeun ngadistribusikaeun perpustakaan, mastikeun assembly jeung ngatur kagumantungan, proyék ieu ngamekarkeun manajer pakét Cargo. Repositori crates.io dirojong pikeun perpustakaan hosting.

Inovasi utama:

  • Pamakéan "panik!"Macro geus stabilized. dina konteks dijieun salila kompilasi, kayaning "const fn" deklarasi. Sajaba ti éta, salian ngagunakeun "panik!" deklarasi const ngamungkinkeun pamakéan "negeskeun!"Macro. jeung sababaraha API perpustakaan baku séjén. Stabilisasi teu acan nutupan sakabéh infrastruktur pormat, jadi dina formulir ayeuna "panik!" makro ngan bisa dipaké ku string statik (panik!("...")) atawa ku nilai interpolasi tunggal "& str" nalika ngagantikeun (panik!("{}", a)), nu kudu diwatesan pikeun ngaganti "{ }" tanpa pormat specifiers jeung tipe séjén. Dina mangsa nu bakal datang, panerapan makro dina konteks konstan bakal dilegakeun, tapi kamampuhan stabilized geus cukup pikeun ngalakukeun cék assert dina tahap kompilasi: const _: () = assert!(std::mem::size_of:: () == 64); const _: () = negeskeun!(std::mem::size_of:: () == 8);
  • Pangatur pakét kargo ngamungkinkeun panggunaan propil kalayan nami sawenang-wenang, henteu dugi ka "dev", "release", "test" sareng "bench". Contona, pikeun ngaktipkeun optimasi dina tahap linking (LTO) ngan nalika rakitan produk ahir dihasilkeun, Anjeun bisa nyieun hiji profil "produksi" dina Cargo.toml tur nambahkeun bendera "lto = leres" eta. Nanging, nalika netepkeun profil anjeun nyalira, anjeun kedah netepkeun profil anu tos aya pikeun inherit setélan standar ti éta. Conto di handap ieu nyiptakeun profil "produksi" anu ngalengkepan profil "pelepasan" ku ngalebetkeun bandéra "lto = leres". Propil sorangan diaktipkeun ku nelepon kargo kalawan pilihan "--profil produksi", sarta artefak assembly bakal disimpen dina diréktori "target / produksi". [profile.production] inherits = "ngaleupaskeun" lto = leres
  • Pamakéan try_reserve pikeun jinis Vec, String, HashMap, HashSet sareng VecDeque parantos distabilkeun, anu ngamungkinkeun anjeun pikeun nyéépkeun rohangan sateuacanna pikeun sababaraha unsur tina jinis anu tangtu pikeun ngirangan frékuénsi operasi alokasi mémori sareng ngahindarkeun. kacilakaan salila operasi alatan kurangna memori.
  • Hal ieu diwenangkeun pikeun nangtukeun macros kalawan braces Curly dina ekspresi kawas "m!{ .. }metode ()" jeung "m!{ .. }?".
  • Palaksanaan File :: read_to_end sareng read_to_string fungsi parantos dioptimalkeun.
  • Rojongan pikeun spésifikasi Unicode parantos diropéa kana vérsi 14.0.
  • Ngalegaan jumlah fungsi anu ditandaan "#[must_use]" pikeun ngaluarkeun peringatan upami nilai uih deui dipaliré, anu ngabantosan ngaidentipikasi kasalahan anu disababkeun ku nganggap hiji fungsi bakal ngarobih nilai tinimbang ngabalikeun nilai énggal.
  • Ditambahkeun backend eksperimen pikeun generasi kode maké libgccjit.
  • Bagian anyar tina API geus dipindahkeun ka kategori stabil, kaasup métode jeung palaksanaan Tret geus stabilized:
    • [T; N]::as_mut_slice
    • [T; N]::as_slice
    • kumpulan :: 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
    • Paréntah::get_program
    • Paréntah::get_args
    • Paréntah::get_envs
    • Paréntah::get_current_dir
    • CommandArgs
    • CommandEnvs
  • Atribut "const", nu nangtukeun naha éta bisa dipaké dina sagala konteks tinimbang konstanta, dipaké dina hint fungsi:: unreachable_unchecked.
  • Tingkat katilu dukungan parantos dilaksanakeun pikeun armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi sareng armv7a-kmc- platform solid_asp3-eabihf. Tingkat katilu ngawengku rojongan dasar, tapi tanpa nguji otomatis, penerbitan resmi ngawangun, atawa mariksa naha kode bisa diwangun.

sumber: opennet.ru

Tambahkeun komentar