Rust 1.78 dileupaskeun. Basa Borgo anu ngagabungkeun kakuatan Go sareng Rust

Pelepasan bahasa pemrograman tujuan umum Rust 1.78, diadegkeun ku proyék Mozilla, tapi ayeuna dikembangkeun dina naungan organisasi nirlaba bebas Rust Foundation, parantos diterbitkeun. basa museurkeun kana kaamanan memori jeung nyadiakeun sarana pikeun ngahontal paralelisme pakasaban tinggi bari Ngahindarkeun pamakéan a collector sampah na runtime (runtime diréduksi jadi initialization dasar tur pamaliharaan perpustakaan baku).

Métode penanganan memori Rust nyalametkeun pamekar tina kasalahan nalika ngamanipulasi pointer sareng ngajagi tina masalah anu timbul kusabab panangan mémori tingkat rendah, sapertos aksés ka daérah mémori saatos dibébaskeun, dereferencing pointer null, overruns panyangga, jsb. Pikeun ngadistribusikaeun perpustakaan, nyadiakeun ngawangun jeung ngatur kagumantungan, proyék ngamekarkeun manajer pakét Cargo. Repositori crates.io dirojong pikeun perpustakaan hosting.

Kasalametan memori disayogikeun dina Rust dina waktos kompilasi ngaliwatan pamariksaan rujukan, ngalacak kapamilikan obyék, ngalacak umur obyék (skop), sareng ngira-ngira kabeneran aksés mémori nalika palaksanaan kode. Karat ogé nyadiakeun panyalindungan ngalawan overflows integer, merlukeun initialization wajib nilai variabel saméméh pamakéan, handles kasalahan hadé dina perpustakaan baku, nerapkeun konsép rujukan immutable sarta variabel sacara standar, nawarkeun ketak statik kuat pikeun ngaleutikan kasalahan logis.

Inovasi utama:

  • A atribut namespace anyar "#[diagnostik]" geus diajukeun, nyadiakeun sarana pikeun pangaruh pesen kasalahan dihasilkeun ku compiler. Anu kahiji dina rohangan anyar nyaéta atribut "#[diagnostic::on_unimplemented]", anu tiasa dianggo pikeun ngaropea pesen kasalahan anu dialungkeun dina kaayaan dimana anjeun kedah nganggo sipat anu henteu dilaksanakeun pikeun jinisna. #[diagnostic::on_unimplemented( message = "Pesen kuring pikeun `ImportantTrait<{A}>` henteu dilaksanakeun pikeun `{Self}`", label = "My Label", note = "Catetan 1", note = "Catetan 2")] sipat ImportantTrait {} fn use_my_trait(_: impl ImportantTrait ) {} fn main() {use_my_trait(String::new()); } kasalahan [E32]: Pesen kuring pikeun `ImportantTrait ` henteu dilaksanakeun pikeun `String` —> src/main.rs:0277:32 | 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^ Label Kuring | | | diperlukeun ku kabeungkeut diwanohkeun ku panggero ieu | = pitulung: sipat `ImportantTrait ` henteu dilaksanakeun pikeun `String` = catetan: Catetan 18 = catetan: Catetan 12
  • Cék pra-negeskeun anu dilarapkeun kana fungsi anu teu aman ayeuna tiasa ditunda dugi ka ngahasilkeun kode, ngamungkinkeun pamariksaan ieu dilaksanakeun tanpa kedah ngawangun perpustakaan standar dina modeu "#[cfg(debug_assertions)]". Pikeun memicu cék, éta ayeuna cekap pikeun ngaktifkeun pernyataan debug pikeun uji atanapi debug ngawangun kode anjeun.
  • Paripolah fungsi dina perpustakaan standar anu mangaruhan alignment of pointers jeung keureut ayeuna bisa diprediksi dina runtime sarta gumantung kana data input. Fungsi pointer :: align_offset, nu ngitung offset pikeun align pointer, ayeuna mulih make :: MAX ngan lamun operasi gagal. Fungsi keureut::align_to jeung keureutan::align_to_mut duanana, nu transformasi keureut kana ngagambarkeun jeung keureutan tengah sajajar jeung awal jeung tungtung keureut aslina, ayeuna salawasna mulangkeun bagian tengah pangbadagna.
  • Di handap ieu dialihkeun kana kategori stabil:
    • impl Baca pikeun &Stdin
    • Ngidinan pamakéan hirup non-statis (non-statis) pikeun sababaraha std :: kasalahan :: palaksanaan patali kasalahan.
    • palaksanaan Impl diwenangkeun ngagunakeun nilai ?Sized.
    • impl Ti pikeun io :: Kasalahan
  • Fungsi panghalang :: anyar () geus stabilized pikeun dipaké kalawan atribut "const" dina sagala konteks tinimbang konstanta.
  • Pikeun 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 sareng i686-pc-windows-gnu ayeuna merlukeun sahenteuna Windows 10 Vérsi.
  • Tingkat katilu pangrojong parantos dilaksanakeun pikeun platform wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf sareng loongarch64-unknown-linux-musl. Tingkat katilu ngawengku rojongan dasar, tapi tanpa nguji otomatis, penerbitan resmi ngawangun, atawa mariksa naha kode bisa diwangun.
  • Tingkat kadua pangrojong pikeun platform target Add wasm32-wasip1 parantos dilaksanakeun. Tingkat kadua pangrojong ngalibatkeun jaminan assembly.
  • Platform wasm32-wasi-preview1-threads parantos namina janten wasm32-wasip1-threads.
  • kompiler geus switched pikeun pamakéan LLVM 18. Lamun maké LLVM 18 pikeun x86-32 na x86-64 arsitéktur, ABI pakait sareng jenis u128 na i128 geus robah.
  • Dina manajer pakta Cargo, versi 4 tina file konci (lockfile v4) parantos distabilkeun.
  • Kargo gaduh cache global anu stabil sareng inpormasi ngeunaan pamakean data panganyarna. Cache ieu hosted di $ CARGO_HOME / .global-cache maké SQLite sarta diropéa otomatis pikeun ngagambarkeun parobahan panganyarna kana indéks, file crate, diréktori kode, git clone, sarta git Checkout.

Salaku tambahan, basa pamrograman Borgo nyobian janten langkung ekspresif tibatan basa Go, tapi kirang kompleks tibatan basa Rust. Borgo ngagabungkeun fitur pangalusna Go jeung Rust, nyieun pikeun shortcomings unggal basa. Contona, Go téh basajan tur lugas, tapi teu nyadiakeun fitur kaamanan tipe canggih. Basa Rust nyadiakeun parabot pikeun programming aman, tapi overcomplicated. Proyék ieu dikembangkeun ku Marco Sampellegrini, panulis The Simple Haskell Handbook sareng pamekar sistem integrasi kontinyu Quad CI.

Rust 1.78 dileupaskeun. Basa Borgo anu ngagabungkeun kakuatan Go sareng Rust

Borgo ngagunakeun ketikan statik, jinis Go-like, sareng sintaksis sapertos Rust. Titik koma mangrupa pilihan dina tungtung garis dina kode Borgo. Kode Borgo disusun jadi representasi Go anu sapinuhna cocog sareng pakét Go anu tos aya. Kodeu kompiler ditulis dina Rust sareng disebarkeun dina lisénsi ISC. ngagunakeun fmt enum NetworkState { Loading, Gagal (int), Kasuksesan (T), } struct Tanggapan {judul: string, lilana: int,} fn utama () {hayu res = Tanggapan {judul: "Halo dunya", durasi: 0,} hayu kaayaan = NetworkState.Success(res) let msg = match state { NetworkState.Loading => "masih ngamuat", NetworkState.Failed(kode) => fmt.Sprintf("Got error code: %d", code), NetworkState.Success (res) => res.judul, } fmt.Println(msg) }

sumber: opennet.ru

Tambahkeun komentar