Rust 1.51 Chirongwa Mutauro Kuburitswa

Kuburitswa kweiyo system programming mutauro Rust 1.51, yakavambwa neMozilla purojekiti, asi iko zvino yakagadziridzwa pasi pekutsigirwa kwesangano rakazvimirira rerust Foundation, raburitswa. Mutauro unotarisana nekuchengetedza ndangariro, unopa otomatiki ndangariro manejimendi, uye inopa nzira dzekuwana yakakwira basa parallelism pasina kushandisa muunganidzi wemarara kana nguva yekumhanya (nguva yekumhanya inoderedzwa kuita yekutanga yekutanga uye kugadzirisa raibhurari yakajairwa).

Rust's otomatiki ndangariro manejimendi inobvisa zvikanganiso kana ichishandisa anongedza uye inodzivirira kubva kune yakaderera-level memory manipulation, sekuwana nzvimbo yekurangarira mushure mekunge yasunungurwa, null pointer dereferences, buffer overruns, nezvimwe. Kugovera maraibhurari, kuve nechokwadi kuungana uye kugadzirisa zvinotsamira, chirongwa ichi chiri kugadzira Cargo package maneja. Iyo crates.io repository inotsigirwa kuitisa maraibhurari.

Zvitsva zvikuru:

  • Iko kushanda kwakabatana nekushandiswa kweanogara magenerics kwakagamuchira mamiriro eiyo shoma inogoneka chigadzirwa (MVP), ichipa girini mwenje kuti ishandiswe zvakanyanya. Const generics inobvumira mhando kuti dzive dzakajairika kune dzinogara dzichikosha, i.e. shandisa zvirevo zvakangogumira kune huwandu hwehukoshi hunogara huripo, kwete mhando kana hupenyu hwese. Ichi chimiro chinokutendera kuti ushandise nhamba-yakatemerwa mhando uye abstraction paunenge uchigadzira hunhu hwekuronga chero saizi pasina kugadzira yakaparadzana mhando kune yega yega nhanho dzehukoshi kuti uve nechokwadi chekuti hapana kunze-kwe-kumisikidzwa kunoitika.

    Kutanga nekuburitswa kwazvino, kune arrays ane mhando β€œ[T; N]" (rudzi T uye saizi N) inopa kugona kweabstract mhando uye saizi uchishandisa kukosha nechero integer, boolean uye mhando mhando (struct uye enum marudzi haasati atsigirwa). Constant generics inorerutsa zvakanyanya kuvandudza raibhurari; semuenzaniso, kushandisa rondedzero isina kusungirirwa kune yakatarwa mhando uye saizi, unogona kutsanangura: struct Array. {// ^^^^^^^^^^^^^^^^^^^^ tsanangudzo yerondedzero yenguva dzose: [T; LENGTH] // ^^^^^^ kushandiswa kwayo }

    Kana yakanyatso shandiswa netsanangudzo iyi ye "Array Β»mugadziri achagadzira monomorphic vhezheni yeArray: struct Array { list: [u8; 32] }

  • Iyo std :: array ::IntoIter API, yakavakirwa pane anogara achigadzirwa, yakagadziriswa, iyo iwe yaunogona kugadzira iterators nekukosha kune chero array: fn main() {let array = [1, 2, 3, 4, 5] ; // Kare, kuti udzokorore pamusoro pekukosha, waifanira kudana iyo .iter() nzira yechinhu mu array.iter().copied() {println!("{}", chinhu); } // Iye zvino unogona kudoma chinhu chiri mu std::array::IntoIter::new(array) {println!("{}", chinhu); }}
  • Iyo cargo package maneja ikozvino inotsigira nzvimbo nyowani yekugadzirisa muCargo.toml, iyo inogona kushandiswa kugonesa yechipiri vhezheni yechinhu chinogadzirisa. Iyo itsva vhezheni yemutsananguri inodzivirira kusanganisa kutsamira maficha akanyorwa mu "[zvinhu]" chikamu pazvisina kufanira, semuenzaniso, kana uchisanganisira kutsamira kunokumbira chimwe chimiro chakajairwa mukuvaka zvinyorwa uye macros, asi kana uchishandisa isiri-yakajairwa chimiro. mune inokonzeresa executable faira .

    Kusvika parizvino, kugona kwepakeji yakataurwa kakawanda mugirafu yekutsamira yakasanganiswa. Semuenzaniso, kana purojekiti ichisanganisira kutsamira foo inotsanangura kugona A uye B, uye pasuru iyi inoshandiswa mune mamwe mapakeji bar uye baz, kunyangwe bhaa ichienderana ne foo ine chimiro A, uye baz zvinoenderana ne foo ine chimiro B, ipapo. mhedzisiro ichava kutakura ichabatanidza zvinhu izvi uye kuunganidza foo ine maitiro A uye B akabatanidzwa. Iyi nzira inogona kuguma nechinhu chinogoneswa nekuda kwekumwe kutsamira kusingaenderane neinotarirwa system iyo inoguma kuvaka inogadzirwa. Semuyenzaniso, kana iwe uchida kushandisa vhezheni yefoo ine "#![no_std]" mune inoteekeka yakavakwa ne"#![no_std]", uye panguva imwecheteyo shandisa foo ne"std" panguva yekuvaka mukuvaka. rs. Paunenge uchitsanangura solver="2" muCargo.toml, maneja wepasuru achaedza kubata nemazvo kukonana uku, kupatsanura dev, host uye zvinovimbika.

  • Cargo inoshandisa iyo split-debuginfo sarudzo, yakaiswa mu "[profile]" chikamu, uye inoenderana mureza "-Csplit-debuginfo=unpacked" mu rustc, ichipa kuitiswa kwenzira nyowani yekuchengetedza ruzivo rwekugadzirisa, izvo zvinobvisa kukosha fonera iyo dsymutil utility uye inomhanyisa zvakanyanya maitiro anovaka nedebugging ruzivo pane macOS.
  • Yakadzikama makos "ptr::addr_of!" uye "ptr::addr_of_mut!", izvo zvinokutendera kuti ugadzire mapoinzi mambishi eminda isina kurongeka. shandisa std::ptr; #[repr(packed)] struct Yakarongedzwa {f1: u8, f2: u16, } rega kurongedza = Packed {f1: 1, f2: 2}; // &packed.f2 ichagadzira chinongedzo chisina kurongeka chinotungamira kune maitiro asina kutsanangurwa rega raw_f2 = ptr::addr_of!(packed.f2); assert_eq!(zvisina kuchengeteka { raw_f2.read_unaligned()}, 2);
  • Chikamu chitsva cheAPI chakaendeswa kune yakagadzikana chikamu, kusanganisira nzira dzinotevera dzakadzikamiswa:
    • Arc::decrement_strong_count
    • Arc::increment_strong_count
    • Kamwe::call_once_force
    • Peekable::inotevera_if_eq
    • Zvinogoneka ::inotevera_kana
    • Tsvaga::stream_position
    • array::IntoIter
    • panic::panic_chero
    • ptr::addr_of!
    • ptr::addr_of_mut!
    • slice ::zadza_na
    • slice::split_inclusive_mut
    • slice ::split_inclusive
    • slice::strip_prefix
    • slice::strip_suffix
    • str::split_inclusive
    • sync::OnceState
    • basa::Wake
  • Nhanho yechitatu yerutsigiro yakashandiswa kune i386-isingazivikanwe-linux-gnu, i486-isingazivikanwe-linux-gnu, aarch64_be-isingazivikanwe-linux-gnu, aarch64-isingazivikanwe-linux-gnu_ilp32 uye aarch64_be-isingazivikanwe-linux-gnu_ilp32 platforms. . Chikamu chechitatu chinosanganisira rutsigiro rwekutanga, asi pasina otomatiki kuyedzwa, kushambadza official kuvaka, kana kutarisa kuti kodhi inogona kuvakwa.

Source: opennet.ru

Voeg