PublicÄts vispÄrÄjas nozÄ«mes programmÄÅ”anas valodas Rust 1.58 izlaidums, kas dibinÄts ar Mozilla projektu, bet tagad izstrÄdÄts neatkarÄ«gÄs bezpeļÅas organizÄcijas Rust Foundation paspÄrnÄ. Valoda koncentrÄjas uz atmiÅas droŔību, nodroÅ”ina automÄtisku atmiÅas pÄrvaldÄ«bu un nodroÅ”ina lÄ«dzekļus augsta uzdevumu paralÄlisma sasniegÅ”anai, neizmantojot atkritumu savÄcÄju vai izpildlaiku (izpildlaiks tiek samazinÄts lÄ«dz standarta bibliotÄkas pamata inicializÄÅ”anai un uzturÄÅ”anai).
Rust automÄtiskÄ atmiÅas pÄrvaldÄ«ba novÄrÅ” kļūdas, manipulÄjot ar rÄdÄ«tÄjiem, un aizsargÄ pret problÄmÄm, kas rodas no zema lÄ«meÅa atmiÅas manipulÄcijÄm, piemÄram, piekļuves atmiÅas apgabalam pÄc tÄ atbrÄ«voÅ”anas, nulles rÄdÄ«tÄju novirzÄm, bufera pÄrtÄriÅiem utt. BibliotÄku izplatÄ«Å”anai, komplektÄÅ”anas nodroÅ”inÄÅ”anai un atkarÄ«bu pÄrvaldÄ«bai projektÄ tiek izstrÄdÄts Cargo pakotÅu pÄrvaldnieks. Crates.io repozitorijs tiek atbalstÄ«ts bibliotÄku mitinÄÅ”anai.
Galvenie jauninÄjumi:
- LÄ«niju formatÄÅ”anas blokos papildus iepriekÅ” pieejamajai iespÄjai aizstÄt mainÄ«gos, kas skaidri norÄdÄ«ti aiz rindas pÄc numura un nosaukuma, ir ieviesta iespÄja aizstÄt patvaļīgus identifikatorus, rindai pievienojot izteiksmi ā{identifier}ā. PiemÄram: // IepriekÅ” atbalstÄ«tÄs konstrukcijas: println!("Sveiks, {}!", get_person()); println!("Sveiks, {0}!", get_person()); println!("Sveiks, {persona}!", persona = get_person()); // tagad jÅ«s varat norÄdÄ«t let persona = get_person(); println!("Sveiks, {persona}!");
Identifikatorus var norÄdÄ«t arÄ« tieÅ”i formatÄÅ”anas opcijÄs. let (platums, precizitÄte) = get_format(); for (nosaukums, rezultÄts) in get_scores() { println!("{name}: {score:width$.precision$}"); }
JaunÄ aizstÄÅ”ana darbojas visos makro, kas atbalsta virknes formÄta definÄ«ciju, izÅemot makro āpanic!ā. Rust valodas 2015. un 2018. gada versijÄs, kurÄs panika!("{ident}") tiek traktÄta kÄ regulÄra virkne (RÅ«sÄ 2021 aizstÄÅ”ana darbojas).
- std::process::Command struktÅ«ra Windows platformÄ ir mainÄ«ta tÄ, ka, izpildot komandas, droŔības apsvÄrumu dÄļ tÄ vairs nemeklÄ izpildÄmos failus paÅ”reizÄjÄ direktorijÄ. PaÅ”reizÄjais direktorijs ir izslÄgts, jo to var izmantot, lai izpildÄ«tu ļaunprÄtÄ«gu kodu, ja programmas tiek palaists neuzticamos direktorijos (CVE-2021-3013). JaunÄ izpildÄmÄ noteikÅ”anas loÄ£ika ietver meklÄÅ”anu Rust direktorijÄs, lietojumprogrammu direktorijÄ, Windows sistÄmas direktorijÄ un PATH vides mainÄ«gajÄ norÄdÄ«tajos direktorijos.
- Standarta bibliotÄka ir paplaÅ”inÄjusi funkciju skaitu, kas apzÄ«mÄtas ar "#[must_use]", lai sniegtu brÄ«dinÄjumu, ja tiek ignorÄta atgrieztÄ vÄrtÄ«ba, kas palÄ«dz identificÄt kļūdas, kas rodas, pieÅemot, ka funkcija mainÄ«s vÄrtÄ«bas, nevis atgriezÄ«s jaunu vÄrtÄ«bu.
- Jauna API daļa ir pÄrvietota uz stabilo kategoriju, tostarp ir stabilizÄtas pazÄ«mju metodes un ievieÅ”anas:
- Metadati::is_symlink
- CeļŔ::is_symlink
- {integer}::saturating_div
- Opcija::unwrap_unchecked
- RezultÄts::unwrap_unchecked
- RezultÄts::unwrap_err_unchecked
- AtribÅ«ts "const", kas nosaka iespÄju to izmantot jebkurÄ kontekstÄ konstantu vietÄ, tiek izmantots funkcijÄs:
- Ilgums::jauns
- Ilgums::checked_add
- Ilgums::saturating_add
- Ilgums::checked_sub
- Ilgums::saturating_sub
- Ilgums::checked_mul
- Ilgums::saturating_mul
- Ilgums::checked_div
- Atļauta atsauces uz "*const T" norÄdÄm "const" kontekstÄ.
- Kravas pakotnes pÄrvaldniekÄ pakotnes metadatiem ir pievienots lauks rust_version, bet komandai ācargo installā ir pievienota opcija ā--message-formatā.
- Kompilators ievieÅ” atbalstu CFI (Control Flow Integrity) aizsardzÄ«bas mehÄnismam, kas pievieno pÄrbaudes pirms katra netieÅ”Ä izsaukuma, lai atklÄtu dažus nenoteiktas darbÄ«bas veidus, kas potenciÄli varÄtu izraisÄ«t parastÄs izpildes kÄrtÄ«bas (kontroles plÅ«smas) pÄrkÄpumu. izmantoÅ”ana, kas maina norÄdes, kas saglabÄtas atmiÅÄ uz funkcijÄm.
- Kompilators ir pievienojis atbalstu LLVM pÄrklÄjuma salÄ«dzinÄÅ”anas formÄta 5. un 6. versijÄm, ko izmanto, lai testÄÅ”anas laikÄ novÄrtÄtu koda pÄrklÄjumu.
- KompilatorÄ prasÄ«bas LLVM minimÄlajai versijai ir paaugstinÄtas lÄ«dz LLVM 12.
- Ir ieviests treÅ”ais atbalsta lÄ«menis x86_64-unknown-none platformai. TreÅ”ais lÄ«menis ietver pamata atbalstu, taÄu bez automatizÄtas testÄÅ”anas, oficiÄlu bÅ«vÄjumu publicÄÅ”anas vai pÄrbaudes, vai kodu var izveidot.
TurklÄt mÄs varam atzÄ«mÄt Microsoft publikÄciju par Rust for Windows 0.30 bibliotÄku izlaiÅ”anu, kas ļauj izmantot Rust valodu, lai izstrÄdÄtu lietojumprogrammas operÄtÄjsistÄmai Windows. KomplektÄ ietilpst divas kastes pakotnes (windows un windows-sys), caur kurÄm Rust programmÄs var piekļūt Win API. API atbalsta kods tiek Ä£enerÄts dinamiski no metadatiem, kas apraksta API, kas ļauj ieviest atbalstu ne tikai esoÅ”ajiem Win API izsaukumiem, bet arÄ« zvaniem, kas parÄdÄ«sies nÄkotnÄ. JaunÄ versija pievieno atbalstu UWP (Universal Windows Platform) mÄrÄ·a platformai un ievieÅ” roktura un atkļūdoÅ”anas tipus.
Avots: opennet.ru