Rust 1.58 Programazio Lengoaia kaleratzea

Mozilla proiektuak sortua, baina orain Rust Foundation irabazi asmorik gabeko erakunde independentearen babespean garatutako Rust 1.58 programazio-lengoaia orokorreko bertsioa argitaratu da. Lengoaiak memoriaren segurtasunean oinarritzen da, memoria automatikoki kudeatzea eskaintzen du eta zereginen paralelismo handia lortzeko bitartekoak eskaintzen ditu zabor-biltzaile edo exekuzio-denbora erabili gabe (exekuzio-denbora liburutegi estandarraren hasierako oinarrizko hasierara eta mantentzera murrizten da).

Rust-en memoria-kudeaketa automatikoak akatsak ezabatzen ditu erakusleak manipulatzean eta maila baxuko memoriaren manipulaziotik sortzen diren arazoetatik babesten du, hala nola, memoria-eskualde batera atzitzea askatu ondoren, erakusle nuluen deserreferentziak, buffer gainditzeak, etab. Liburutegiak banatzeko, muntaia ziurtatzeko eta mendekotasunak kudeatzeko, Cargo paketeen kudeatzailea garatzen ari da proiektua. crates.io biltegia liburutegiak ostatatzeko onartzen da.

Berrikuntza nagusiak:

  • Lerro-formatua-blokeetan, aurretik eskuragarri zegoen aldagaiak zenbakiz eta izenez lerro baten ondoren esplizituki zerrendatutako aldagaiak ordezkatzeko gaitasunaz gain, identifikatzaile arbitrarioak ordezteko gaitasuna ezartzen da lerroari "{identificatzailea}" adierazpena gehituz. Adibidez: // Aurretik onartzen ziren eraikuntzak: println!("Kaixo, {}!", get_person()); println!("Kaixo, {0}!", get_person()); println!("Kaixo, {pertsona}!", pertsona = get_person()); // orain let person = get_person(); println!("Kaixo, {pertsona}!");

    Formatu-aukeretan ere identifikatzaileak zuzenean zehaztu daitezke. let (zabalera, zehaztasuna) = get_format(); for (izena, puntuazioa) get_scores() in { println!("{izena}: {score:width$.precision$}"); }

    Ordezkapen berriak kate formatuaren definizioa onartzen duten makro guztietan funtzionatzen du, "panic!" makroa izan ezik. Rust hizkuntzaren 2015eko eta 2018ko bertsioetan, zeinetan izua!("{ident}") kate arrunt gisa tratatzen den ( Rust 2021ean ordezkapenak funtzionatzen du).

  • Windows plataformako std::process::Komando egituraren portaera aldatu da, komandoak exekutatzen direnean, segurtasun arrazoiengatik, uneko direktorioan fitxategi exekutagarririk bilatzen ez dezan. Uneko direktorioa baztertuta dago, kode gaiztoa exekutatzeko erabil baitaiteke programak fidagarriak ez diren direktorioetan exekutatzen badira (CVE-2021-3013). Exekutagarrien detekzio-logika berriak Rust direktorioa, aplikazioen direktorioa, Windows sistemaren direktorioa eta PATH ingurune-aldagaian zehaztutako direktorioetan bilatzea dakar.
  • Liburutegi estandarrak "#[ust_use]" markatutako funtzio-kopurua zabaldu du, itzuleraren balioari jaramonik egiten ez bazaio abisua emateko, eta horrek balio berri bat itzuli beharrean funtzio batek balioak aldatuko dituela suposatuz eragindako erroreak identifikatzen laguntzen du.
  • APIaren zati berri bat egonkorren kategoriara eraman da, eta ezaugarrien metodoak eta inplementazioak egonkortu dira:
    • Metadatuak::es_sinbolikoa
    • Bidea:: esteka_sinbolikoa da
    • {osokoa}::saturating_div
    • Aukera::unwrap_unchecked
    • Emaitza::unwrap_unchecked
    • Emaitza::unwrap_err_unchecked
  • "const" atributua, konstanteen ordez edozein testuingurutan erabiltzeko aukera zehazten duena, funtzioetan erabiltzen da:
    • Iraupena::berria
    • Iraupena::checked_add
    • Iraupena::saturating_add
    • Iraupena::checked_sub
    • Iraupena::saturating_sub
    • Iraupena::checked_mul
    • Iraupena::saturating_mul
    • Iraupena::checked_div
  • "*const T" erakusleak deserreferentziatzea baimenduta "const" testuinguruetan.
  • Cargo paketeen kudeatzailean, rust_version eremua paketeen metadatuetan gehitu da, eta "--message-format" aukera "cargo install" komandoan gehitu da.
  • Konpilatzaileak CFI (Control Flow Integrity) babes-mekanismorako euskarria ezartzen du, zeharkako dei bakoitzaren aurretik egiaztapenak gehitzen dituena, exekuzio-agindu normala (kontrol-fluxua) urratzera ekar dezaketen portaera zehaztugabe batzuk detektatzeko. Funtzioetan memorian gordetako erakusleak aldatzen dituzten ustiapenak erabiltzea.
  • Konpilatzaileak LLVM estaldura alderatzeko formatuaren 5. eta 6. bertsioetarako laguntza gehitu du, probak zehar kode estaldura ebaluatzeko erabiltzen dena.
  • Konpilatzailean, LLVM-ren gutxieneko bertsioaren baldintzak LLVM 12era igotzen dira.
  • x86_64-unknown-none plataformarako hirugarren laguntza-maila ezarri da. Hirugarren mailak oinarrizko euskarria dakar, baina proba automatizatu gabe, eraikuntza ofizialak argitaratu edo kodea eraiki daitekeen egiaztatu gabe.

Gainera, Microsoft-ek Rust-en Windows 0.30 liburutegiak kaleratu duela nabarmendu behar dugu, Rust lengoaia Windows OSrako aplikazioak garatzeko aukera ematen dutenak. Multzoak bi kaxa pakete ditu (windows eta windows-sys), eta horien bidez Win API-ra atzitu dezakezu Rust programetan. API laguntzarako kodea dinamikoki sortzen da APIa deskribatzen duten metadatuetatik, eta horri esker, lehendik dauden Win API deietarako ez ezik, etorkizunean agertuko diren deietarako laguntza ezar dezakezu. Bertsio berriak UWP (Universal Windows Platform) xede-plataformarako euskarria gehitzen du eta Handle eta Debug motak ezartzen ditu.

Iturria: opennet.ru

Gehitu iruzkin berria