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