Rust 1.73 Programazio Lengoaia kaleratzea

Rust 1.73 erabilera orokorreko programazio-lengoaia argitaratu da, Mozilla proiektuak sortua, baina orain Rust Foundation irabazi asmorik gabeko erakunde independentearen babespean garatua. Lengoaiak memoriaren segurtasunean oinarritzen da eta lanaren paralelismo handia lortzeko bitartekoak eskaintzen ditu zabor-biltzailea eta exekuzio-denbora erabiltzea saihestuz (exekuzio-denbora liburutegi estandarraren hasierako oinarrizko hasierara eta mantentzera murrizten da).

Rust-en memoria maneiatzeko metodoek garatzaileari erakusleak manipulatzerakoan akatsetatik salbatzen dute eta maila baxuko memoria-kudeaketaren ondorioz sortzen diren arazoetatik babesten dute, hala nola, memoria-eremu batera atzitzea askatu ondoren, erakusle nuluak deserreferentziak egitea, buffer gainditzeak, etab. Liburutegiak banatzeko, eraikuntzak emateko eta mendekotasunak kudeatzeko, proiektuak Cargo paketeen kudeatzailea garatzen du. crates.io biltegia liburutegiak ostatatzeko onartzen da.

Memoriaren segurtasuna Rust-en konpilazio garaian eskaintzen da erreferentziak egiaztatzeko, objektuen jabetzaren jarraipena eginez, objektuen iraupenen (esparruak) jarraipena eginez eta kodearen exekuzioan memoria sarbidearen zuzentasuna ebaluatuz. Rust-ek osoko gainezkatzeen aurkako babesa eskaintzen du, erabili aurretik aldagaien balioak derrigorrezko hasieratzea eskatzen du, liburutegi estandarrean akatsak hobeto kudeatzen ditu, erreferentzia eta aldagai aldaezinen kontzeptua lehenespenez aplikatzen du, idazketa estatiko sendoa eskaintzen du akats logikoak minimizatzeko.

Berrikuntza nagusiak:

  • Programaren hutsegite-kudeatzaile lehenetsiak (izua) igorritako mezuen formatua birdiseinatu da. "Izua!" makroan zehaztutako testua orain lerro bereizi batean agertzen da komatxorik gabe, mezua irakurtzeko errazagoa izan dadin eta nahasmena ezabatuz komatxo habiaratuak daudenean edo hainbat lerrotan zatituta daudenean. fn main() { let file = "ferris.txt"; izua!("oh, ez! {fitxategia:?} ez da aurkitu!"); } "Nagusia" haria izututa zegoen "oh no! "ferris.txt" ez da aurkitu!', src/main.rs:3:5 Thread 'main' izututa src/main.rs:3:5 at: oh, ez! "ferris.txt" ez da aurkitu!

    "assert_eq" eta "assert_ne" makroak abiarazten direnean erakusten diren mezuen irteera ere berritu da. fn main() { assert_eq!("πŸ¦€", "🐟", "ferris ez da arraina"); } 'Nagusia' haria izututa zegoen 'afirmazioak huts egin zuen: `(ezkerreko == eskuineko)' ezkerreko: `"πŸ¦€"`, eskuineko: `"🐟"`: ferris ez da arraina', src/main.rs: 2 :5 'nagusia' haria izututa src/main.rs:2:5-n: `left == right' baieztapenak huts egin zuen: ferris ez da arrain bat ezkerra: "πŸ¦€" eskuinera: "🐟"

  • RFC 3184-aren arabera, hari lokaleko (thread_local) LocalKey biltegiratze-gakoak zuzenean manipulatzeko gaitasuna gehitu da. > eta LocalKey > get(), set(), take() eta replace() metodoen bidez, "with(|inner| ...)" itxiera erabili beharrean, eta horrek hasierako kode gehigarria egiteko beharra ezabatzen du. "thread_local!" makroa erabiltzean hari berrietarako zehaztutako balio lehenetsiak haria_lokal! { STATIC THINGS: Cell > = Cell::new(Vec::new()); } fn f() { // GAUZAK zen.(|i| i.set(vec![32, 1, 2])); // GAUZAK bihurtu zen.set(vec![3, 1, 2]); // ... // utzi zitzaion v = GAUZAK.with(|i| i.take()); // bihurtu let v: Vec = GAUZAK.hartu(); }
  • APIaren zati berri bat egonkorren kategoriara eraman da, eta ezaugarrien metodoak eta inplementazioak egonkortu dira:
    • Sinatu gabeko {osokoa}::div_ceil
    • Sinadurarik gabeko {integer}::next_multiple_of
    • Sinadurarik gabeko {integer}::checked_next_multiple_of
    • std::ffi::FromBytesUntilNulError
    • std::os::unix::fs::chown
    • std::os::unix::fs::fchown
    • std::os::unix::fs::lfchown
    • LocalKey:: >::lortu
    • LocalKey:: >::set
    • LocalKey:: >::hartu
    • LocalKey:: >::ordezkatu
    • LocalKey:: >::maileguarekin
    • LocalKey:: >::behera_mutarekin
    • LocalKey:: >::set
    • LocalKey:: >::hartu
    • LocalKey:: >::ordezkatu
  • "const" atributua, konstanteen ordez edozein testuingurutan erabiltzeko aukera zehazten duena, funtzioetan erabiltzen da:
    • rc::Ahula::berria
    • sync::Ahula::berria
    • NonNull::as_ref
  • Konpilatzaileak bertsioaren informazioa grabatzen du ".comment" atalean, GCC eta Clang-en antzera.
  • Hirugarren laguntza-maila aarch64-unknown-teeos, csky-unknown-linux-gnuabiv2, riscv64-linux-android, riscv64gc-unknown-hermit, x86_64-unikraft-linux-musl eta x86_64-unknown-linux plataformetarako ezarri da. -ohos. Hirugarren mailak oinarrizko euskarria dakar, baina proba automatizatu gabe, eraikuntza ofizialak argitaratu edo kodea eraiki daitekeen egiaztatu gabe.
  • Helburu-plataformaren bigarren laguntza-maila inplementatu da wasm32-wasi-preview1-threads. Bigarren laguntza-mailak muntaketa-bermea dakar.

Iturria: opennet.ru

Gehitu iruzkin berria