Rust 1.58 programmēŔanas valodas izlaidums

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

Pievieno komentāru