Rust 1.64 programmēŔanas valodas izlaidums

Publicēts vispārējas nozÄ«mes programmÄ“Å”anas valodas Rust 1.64 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 un nodroÅ”ina lÄ«dzekļus, lai sasniegtu augstu darba paralēlismu, vienlaikus izvairoties no atkritumu savācēja un izpildlaika izmantoÅ”anas (izpildlaiks tiek samazināts lÄ«dz standarta bibliotēkas pamata inicializÄ“Å”anai un uzturÄ“Å”anai).

Rust atmiņas apstrādes metodes pasargā izstrādātāju no kļūdām, manipulējot ar rādÄ«tājiem, un aizsargā pret problēmām, kas rodas zema lÄ«meņa atmiņas apstrādes dēļ, piemēram, piekļūŔana atmiņas apgabalam pēc tā atbrÄ«voÅ”anas, nulles rādÄ«tāju atsauču atcelÅ”ana, bufera pārtēriņi utt. Lai izplatÄ«tu bibliotēkas, nodroÅ”inātu bÅ«vējumus un pārvaldÄ«tu atkarÄ«bas, projekts izstrādā Cargo pakotņu pārvaldnieku. Crates.io repozitorijs tiek atbalstÄ«ts bibliotēku mitināŔanai.

Atmiņas droŔība tiek nodroÅ”ināta Rust kompilÄ“Å”anas laikā, pārbaudot atsauces, sekojot lÄ«dzi objekta Ä«paÅ”umtiesÄ«bām, sekojot lÄ«dzi objektu kalpoÅ”anas laikam (tvērumam) un novērtējot atmiņas piekļuves pareizÄ«bu koda izpildes laikā. RÅ«sa arÄ« nodroÅ”ina aizsardzÄ«bu pret veselu skaitļu pārpildÄ«Å”anu, pieprasa obligātu mainÄ«go vērtÄ«bu inicializāciju pirms lietoÅ”anas, labāk apstrādā kļūdas standarta bibliotēkā, pēc noklusējuma piemēro nemainÄ«gu atsauču un mainÄ«go jēdzienu, piedāvā spēcÄ«gu statisko rakstÄ«Å”anu, lai samazinātu loÄ£iskās kļūdas.

Galvenie jauninājumi:

  • Paaugstinātas prasÄ«bas Linux videi kompilatorā, Cargo pakotņu pārvaldniekā un libstd standarta bibliotēkā - minimālās prasÄ«bas Glibc ir paaugstinātas no versijas 2.11 uz 2.17, bet Linux kodolam no versijas 2.6.32 uz 3.2. Ierobežojumi attiecas arÄ« uz Rust lietojumprogrammu izpildāmajiem failiem, kas izveidoti ar libstd. IzplatÄ«Å”anas komplekti RHEL 7, SLES 12-SP5, Debian 8 un Ubuntu 14.04 atbilst jaunajām prasÄ«bām. RHEL 6, SLES 11-SP4, Debian 7 un Ubuntu 12.04 atbalsts tiks pārtraukts. Lietotāji, kuri izmanto Rust-built izpildāmos failus vidēs ar vecāku Linux kodolu, tiek mudināti jaunināt savas sistēmas, izmantot vecākus kompilatora laidienus vai uzturēt savu libstd fork ar slāņiem, lai saglabātu saderÄ«bu.

    Viens no iemesliem vecāku Linux sistēmu atbalsta pārtraukÅ”anai ir ierobežoti resursi, lai turpinātu uzturēt saderÄ«bu ar vecākām vidēm. Lai atbalstÄ«tu mantoto Glibc, ir jāizmanto mantotie rÄ«ki, veicot pārbaudi nepārtrauktas integrācijas sistēmā, ņemot vērā pieaugoŔās versijas prasÄ«bas LLVM un savstarpējās kompilācijas utilÄ«tprogrammās. Kodola versijas prasÄ«bu pieaugums ir saistÄ«ts ar iespēju izmantot jaunus sistēmas izsaukumus libstd bez nepiecieÅ”amÄ«bas uzturēt slāņus, lai nodroÅ”inātu saderÄ«bu ar vecākiem kodoliem.

  • IntoFuture iezÄ«me ir stabilizēta, kas atgādina IntoIterator, bet atŔķiras no pēdējās, izmantojot ".await", nevis "for ... in ..." cilpas. Kombinācijā ar IntoFuture atslēgvārdam ".await" var bÅ«t ne tikai nākotnes iezÄ«me, bet arÄ« citi veidi, kurus var pārvērst par nākotni.
  • RÅ«sas analizatora utilÄ«ta ir iekļauta Rust izlaidumu utilÄ«tu kolekcijā. LietderÄ«ba ir pieejama arÄ« instalÄ“Å”anai, izmantojot rustup (rustup komponents pievieno rÅ«sas analizatoru).
  • Cargo pakotņu pārvaldniekā ir iekļauta darbvietas mantoÅ”ana, lai novērstu kopējo lauku vērtÄ«bu dublÄ“Å”anos starp pakotnēm, piemēram, Rust versijām un repozitorija URL. Pievienots arÄ« atbalsts vairāku mērÄ·a platformu veidoÅ”anai vienlaikus (tagad opcijā ā€œ--targetā€ varat norādÄ«t vairāk nekā vienu parametru).
  • Jauna API daļa ir pārvietota uz stabilo kategoriju, tostarp ir stabilizētas pazÄ«mju metodes un ievieÅ”anas:
    • nākotne::IntoFuture
    • num::NonZero*::checked_mul
    • num::NonZero*::checked_pow
    • num::NonZero*::saturating_mul
    • num::NonZero*::saturating_pow
    • num::NonZeroI*::abs
    • num::NonZeroI*::checked_abs
    • num::NonZeroI*::overflowing_abs
    • num::NonZeroI*::saturating_abs
    • num::NonZeroI*::unsigned_abs
    • num::NonZeroI*::wrapping_abs
    • num::NonZeroU*::checked_add
    • num::NonZeroU*::checked_next_power_of_dwo
    • num::NonZeroU*::saturating_add
    • os::unix::process::CommandExt::process_group
    • os::windows::fs::FileTypeExt::is_symlink_dir
    • os::windows::fs::FileTypeExt::is_symlink_file
  • Ar C saderÄ«gi tipi, kas iepriekÅ” stabilizēti modulÄ« std::ffi, ir pievienoti kodolam un alloc bibliotēkai:
    • kodols::ffi::CStr
    • kodols::ffi::FromBytesWithNulError
    • alloc::ffi::CString
    • aloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • aloc::ffi::NulError
  • C tipi, kas iepriekÅ” stabilizēti std::os::raw modulÄ«, ir pievienoti kodolam::ffi un std::ffi moduļiem (piemēram, uint un ulong C tipiem ir piedāvāti c_uint un c_ulong tipi):
    • ffi::c_char
    • ffi::c_double
    • ffi::c_float
    • ffi::c_int
    • ffi::c_long
    • ffi::c_longlong
    • ffi::c_schar
    • ffi::c_short
    • ffi::c_uchar
    • ffi::c_uint
    • ffi::c_ulong
    • ffi::c_ulonglong
    • ffi::c_ushort
  • Zema lÄ«meņa apstrādātāji ir stabilizēti lietoÅ”anai ar Poll mehānismu (nākotnē plānots nodroÅ”ināt vienkārÅ”otu API, kas neprasa izmantot zema lÄ«meņa struktÅ«ras, piemēram, Pull and Pin):

    • nākotne::poll_fn
    • uzdevums::gatavs!
  • AtribÅ«ts ā€œconstā€, kas nosaka iespēju to izmantot jebkurā kontekstā konstantu vietā, tiek izmantots funkcijā slice::from_raw_parts.
  • Lai kompaktāk uzglabātu datus, ir mainÄ«ts Ipv4Addr, Ipv6Addr, SocketAddrV4 un SocketAddrV6 struktÅ«ru atmiņas izkārtojums. Var rasties saderÄ«bas problēma ar vienas kastes pakotnēm, kas izmanto std::mem::transmute zema lÄ«meņa manipulācijām ar struktÅ«rām.
  • RÅ«sas kompilatora bÅ«vniecÄ«bā Windows platformai tiek izmantota PGO optimizācija (profila vadÄ«ta optimizācija), kas ļāva palielināt koda kompilācijas veiktspēju par 10ā€“20%.
  • Kompilators ir ieviesis jaunu brÄ«dinājumu par neizmantotiem laukiem noteiktās struktÅ«rās.

Turklāt varat atzÄ«mēt statusa ziņojumu par Rust valodas kompilatora alternatÄ«vas ievieÅ”anas izstrādi, ko sagatavojis projekts gccrs (GCC Rust) un kas apstiprināts iekļauÅ”anai GCC. Pēc priekÅ”gala integrÄ“Å”anas standarta GCC rÄ«kus var izmantot, lai kompilētu programmas Rust valodā bez nepiecieÅ”amÄ«bas instalēt rustc kompilatoru, kas izveidots, izmantojot LLVM izstrādes. Kamēr attÄ«stÄ«ba norisinās un izslēdzot neparedzētas problēmas, Rust priekÅ”gals tiks integrēts GCC 13 laidienā, kas paredzēts nākamā gada maijā. Rust GCC 13 ievieÅ”ana bÅ«s beta statusā, bet pēc noklusējuma vēl nav iespējota.

Avots: opennet.ru

Pievieno komentāru