Rust 1.78 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:
- "#[diagnostikoa]" atributu-izen-espazio berri bat proposatu da, konpilatzaileak sortutako errore-mezuetan eragiteko bitartekoa eskainiz. Espazio berriko lehena "#[diagnostic::on_unimplemented]" atributua da, motarako inplementatu ez den ezaugarri bat erabili behar duzun egoera batean botatako errore-mezuak pertsonalizatzeko erabil daitekeena. #[diagnostic::on_unimplemented( message = "`ImportantTrait<{A}>`-rako nire mezua ez dago inplementatu `{Self}`", label = "Nire etiketa", note = "1. oharra", note = "Oharra 2" )] ezaugarri Garrantzizko Ezaugarri {} fn use_my_trait(_: impl Garrantzizko Ezaugarri ) {} fn main() { use_my_trait(String::new()); } error[E32]: `ImportantTrait-rako nire mezua ` ez dago inplementatu `String` —> src/main.rs:0277:32 | 12 | erabili_nire_ezaugarria(String::berria()); | ———— ^^^^^^^^^^^^^ Nire etiketa | | | deialdi honek sartutako lotu batek eskatzen du | = laguntza: ezaugarria `Ezaugarri Garrantzitsua ` ez da inplementatu `String` = oharra: 18. oharra = oharra: 12. oharra
- Funtzio ez-seguruei aplikatutako aurre-baieztatzeko egiaztapenak atzeratu daitezke orain kodea sortu arte, egiaztapen hauek "#[cfg(debug_assertions)]" moduan liburutegi estandarra eraiki beharrik gabe egiteko aukera emanez. Egiaztapenak abiarazteko, orain nahikoa da arazketa-afirmazioak gaitzea zure kodearen proba edo arazketa-eraiketetarako.
- Erakusleen eta xeren lerrokatzean eragina duten liburutegi estandarreko funtzioen portaera exekuzioan aurreikusten da orain eta sarrerako datuen araberakoa da. Erakuslea lerrokatzeko desplazamendua kalkulatzen duen erakuslea::align_offset funtzioak orain use::MAX itzultzen du eragiketak huts egiten badu soilik. Slice::align_to eta slice::align_to_mut biak funtzioek, xerrak erdiko xerra lerrokatuarekin eta jatorrizko hasierako eta amaierako xerrak dituen irudikapen bihurtzen dituztenak, orain beti itzultzen dute erdiko zati handiena.
- Kategoria egonkorrera eraman dira honako hauek:
- impl Irakurri &Stdin
- Onartu iraupen ez-estatikoa (ez-estatikoa) erabiltzea std::error::Errorrekin lotutako inplementazio batzuentzat.
- Inplementazioa inplementatzea ?Tamainako balioa onartzen da.
- impl From iorako::Errorea
- Barrier::new() funtzioa egonkortu egin da "const" atributuarekin edozein testuingurutan erabiltzeko, konstanteen ordez.
- Xede-plataformetarako x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm eta i686_10-pc-windows-gnullvm-gnu-windows-gnu orain gutxienez Windows XNUMX bertsioa behar du.
- Hirugarren laguntza-maila wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf eta loongarch64-unknown-linux-musl plataformetarako inplementatu da. Hirugarren mailak oinarrizko euskarria dakar, baina proba automatikorik gabe, eraikuntza ofizialen argitalpenik eta kodearen eraikigarritasunaren egiaztapenik gabe.
- Gehitu wasm32-wasip1 xede-plataformaren bigarren laguntza-maila ezarri da. Bigarren laguntza-mailak muntaketa-bermea dakar.
- wasm32-wasi-preview1-threads plataformari izena aldatu zaio wasm32-wasip1-threads.
- Konpilatzailea LLVM 18 erabiltzeko aldatu da. LLVM 18 x86-32 eta x86-64 arkitekturatarako erabiltzean, u128 eta i128 motekin lotutako ABIa aldatu da.
- Cargo pact manager-en, blokeo fitxategien 4. bertsioa (lockfile v4) egonkortu da.
- Cargo-k cache global egonkortua du datuen azken erabilerari buruzko informazioarekin. Cachea $CARGO_HOME/.global-cache-n dago SQLite erabiliz eta automatikoki eguneratzen da indizean, crate fitxategian, kode-direktorioan, git klonean eta git checkout-en azken aldaketak islatzeko.
Gainera, Borgo programazio-lengoaia Go lengoaia baino adierazgarriagoa izaten saiatzen da, baina Rust hizkuntza baino konplexuagoa. Borgok Go eta Rust-en ezaugarri onenak uztartzen ditu, hizkuntza bakoitzaren gabeziak konpontzen. Adibidez, Go sinplea eta zuzena da, baina ez ditu motako segurtasun-funtzio aurreratuak eskaintzen. Rust hizkuntzak programazio segururako tresnak eskaintzen ditu, baina gehiegi konplikatua da. Marco Sampellegrini The Simple Haskell Eskuliburuaren egilea eta Quad CI etengabeko integrazio sistemaren garatzailea garatzen ari da proiektua.

Borgo-k idazketa estatikoa, Go antzerako motak eta Herdoilaren antzeko sintaxia erabiltzen ditu. Puntu eta komak aukerakoak dira Borgo kodean lerroen amaieran. Borgo kodea lehendik dauden Go paketeekin guztiz bateragarria den Go irudikapen batean biltzen da. Konpiladorearen kodea Rust-en idatzita dago eta ISC lizentziapean banatzen da. erabili fmt enum NetworkState { Kargatzen, Huts egin (int), Arrakasta (T), } struct Response { title: string, duration: int, } fn main () { let res = Erantzuna { title: "Kaixo mundua", iraupena: 0, } let state = NetworkState.Success(res) let msg = bat etortzeko egoera { NetworkState.Loading => “oraindik kargatzen”, NetworkState.Failed(code) => fmt.Sprintf(“Errore-kodea lortu: %d”, kodea), NetworkState.Success (res) => res.title, } fmt.Println(msg) }
Iturria: opennet.ru
