Rust 1.36 programmēšanas valodas izlaidums

publicēts sistēmas programmēšanas valodas izlaidums 1.36. rūsa, ko dibināja Mozilla projekts. Valoda koncentrējas uz atmiņas drošību, nodrošina automātisku atmiņas pārvaldību un nodrošina iespēju sasniegt augstu uzdevumu paralēlismu, neizmantojot atkritumu savācēju vai izpildlaiku.

Rust automātiskā atmiņas pārvaldība atbrīvo izstrādātāju no manipulācijām ar rādītāju un aizsargā pret problēmām, kas rodas no zema līmeņa atmiņas manipulācijām, piemēram, pēc brīvas piekļuves atmiņai, nulles rādītāja atsauču, bufera pārtēriņu un tamlīdzīgi. Tiek izstrādāts pakotņu pārvaldnieks, lai izplatītu bibliotēkas, nodrošinātu montāžu un pārvaldītu projekta atkarības. krava, kas ļauj ar vienu klikšķi iegūt programmai nepieciešamās bibliotēkas. Repozitorijs tiek atbalstīts bibliotēku mitināšanai crates.io.

Galvenais jauninājumiem:

  • Pazīme stabilizējās Nākotne, kas apzīmē vērtību, kuras novērtēšana, iespējams, vēl nav pabeigta, izmantojot asinhronos / .await blokus. Asinhronās vērtības, kas definētas, izmantojot Future, ļauj turpināt veikt noderīgu darbu pavedienā, vienlaikus gaidot noteiktas vērtības aprēķinu pabeigšanu;
  • Bibliotēka stabilizējās piešķirt, kas nodrošina viedas norādes un kolekcijas atmiņas piešķirto vērtību pārvaldībai. Atmiņas piešķiršana std tagad izmanto veidu Lieta, kas tiek reeksportēti no aloc. Atsevišķa alloc izmantošana ir jēga lietojumprogrammās, kas nav saistītas ar std (“#![no_std]”), kā arī bibliotēkās, kas paredzētas lietošanai līdzīgās programmās bez std;
  • Lai apietu pareizas vērtību inicializācijas pārbaudes ierosināts starpposma tips VarbūtVienība, ko var izmantot funkcijas mem::unitialized vietā kā drošāku alternatīvu. Funkcija mem::unitialized ir ērta, lai ātri izveidotu masīvus, taču tā maldina kompilatoru, jo šķiet, ka tas ir inicializēts, taču patiesībā vērtība paliek neinicializēta. MaybeUninit ļauj skaidri norādīt kompilatoram, ka vērtība nav inicializēta, ņemt vērā iespējamo nenoteikto uzvedību, kas saistīta ar to, kā arī organizēt programmu pārbaudes, izmantojot “maybe_t:” un soli pa solim inicializāciju, atzīmējot tās pabeigšanu. izmantojot izsaukumu “.assume_init()”. Līdz ar MaybeUninit parādīšanos funkcija mem::unitialized ir novecojusi un nav ieteicama lietošanai;
  • NLL (Non-Lexical Lifetimes) tehnika, kas paplašināja aizņemto mainīgo lielumu dzīves ilguma reģistrēšanas sistēmu, ir stabilizēta valodai Rust 2015 (sākotnēji NLL atbalstīja tikai Rust 2018). Tā vietā, lai noteiktu kalpošanas laiku leksiskā līmenī, NLL to dara izpildes plūsmas diagrammas rādītāju kopas līmenī. Šī pieeja ļauj paaugstināt mainīgo lielumu aizņemšanās pārbaudes kvalitāti (aizņemšanās pārbaudītājs) un ļauj izpildīt dažu veidu pareizu kodu, kura izmantošana iepriekš izraisīja kļūdu. Jaunā darbība arī ievērojami atvieglo atkļūdošanu;
  • Iekļauta jauna asociatīvo masīvu ieviešana HashMap, pamatojoties uz struktūras pielietojumu Šveices galds (automātiski ielādēts hashbrown::HashMap, ja vien nav skaidri norādīts citādi, piemēram, std::HashMap, kuras pamatā ir SipHash 1-3). Programmatūras saskarne paliek nemainīga, un izstrādātāja pamanāmās atšķirības ir saistītas ar palielinātu veiktspēju un samazinātu atmiņas patēriņu;
  • Pakas menedžera kravā pievienots opcija “--offline”, kas nodrošina darbību bez piekļuves tīklam, kurā, instalējot atkarības, tiek izmantotas tikai lokālajā sistēmā kešatmiņā saglabātās pakotnes. Ja atkarība nav lokālajā kešatmiņā, tiks parādīta kļūda. Lai pirms pāriešanas bezsaistē ielādētu atkarības lokālajā kešatmiņā, varat izmantot komandu “kravas ielāde”;
  • Ieviesta iespēja izsaukt makro “dbg!” norādot vairākus argumentus;
  • Metodēm tiek izmantots atribūts “const”, kas nosaka iespēju izmantot jebkurā kontekstā, nevis konstantes
    Izkārtojums::from_size_align_unchecked,
    mem::needs_drop,
    NonNull::karājās un
    NonNull::cast;

  • Jauna API daļa ir pārvietota uz stabilo kategoriju, tostarp metodes, kas ir stabilizētas
    uzdevums::Waker, uzdevums::Aptauja,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Lasīt::lasīt_vectored, rakstīt::write_vectored,
    Iterators::kopēts,
    BorrowMut (virknēm) un str::as_mut_ptr.

Avots: opennet.ru

Pievieno komentāru