Rust 1.37 Programming Language Release

gepubliseer stelsel programmeertaal vrystelling Roes 1.37, gestig deur die Mozilla-projek. Die taal fokus op geheueveiligheid, verskaf outomatiese geheuebestuur en bied 'n manier om hoë taakparallelisme te bereik sonder om 'n vullisverwyderaar of looptyd te gebruik.

Rust se outomatiese geheuebestuur spaar die ontwikkelaar daarvan om wysers te manipuleer en beskerm teen probleme wat voortspruit uit laevlakgeheuemanipulasie, soos om toegang tot 'n geheuearea te kry nadat dit vrygestel is, die herkenning van nulwysers, bufferoorskryding, ens. Om biblioteke te versprei, samestelling te verseker en afhanklikhede te bestuur, ontwikkel die projek 'n pakketbestuurder Cargo, wat jou in staat stel om die biblioteke wat jy nodig het vir die program in een klik te kry. 'n Bewaarplek word ondersteun om biblioteke te huisves kratte.io.

Die belangrikste innovasies:

  • In die rustc samesteller beveilig ondersteuning vir optimalisering gebaseer op kodeprofielresultate (PGO, Profile-Guided Optimization),
    wat jou toelaat om meer optimale kode te genereer gebaseer op die ontleding van statistieke wat tydens programuitvoering opgehoop is. Om 'n profiel te genereer, word die "-C profile-generate" vlag verskaf, en om die profiel tydens samestelling te gebruik - "-C profile-use" (aanvanklik word die program saamgestel met die eerste vlag, loop rond, en nadat dit geskep is die profiel, dit word weer met die tweede vlag saamgevoeg);

  • Wanneer die "cargo run"-opdrag uitgevoer word, wat gerieflik is om te gebruik om konsoletoepassings vinnig te toets, is die vermoë om outomaties 'n uitvoerbare lêer te kies om te hardloop bygevoeg as daar verskeie uitvoerbare lêers in die pakket is. Die versteklêer wat uitgevoer moet word, word bepaal deur die verstekloop-aanwysing in die [pakket]-afdeling met pakketparameters, wat jou toelaat om te verhoed dat die lêernaam eksplisiet deur die "-bin"-vlag gespesifiseer word elke keer as jy "cargo run" hardloop;
  • Die "vragverkoper"-opdrag, voorheen verskaf as aparte pakket. Die opdrag laat jou toe om werk te organiseer met 'n plaaslike kopie van afhanklikhede - na die uitvoering van "vragverkoper", word alle bronkodes van die projek se afhanklikhede afgelaai vanaf crates.io na 'n plaaslike gids, wat dan vir werk gebruik kan word sonder om toegang tot kratte te kry. io (nadat die opdrag uitgevoer is, word 'n wenk vir die verandering van die konfigurasie gewys om die gids vir builds te gebruik). Hierdie kenmerk word reeds gebruik om die aflewering van die rustc-samesteller te organiseer met verpakking van alle afhanklikhede in een argief met die vrystelling;
  • Dit is nou moontlik om skakels na enum opsies te skep deur gebruik te maak van tipe aliasse (byvoorbeeld, in die liggaam van die funksie "fn increment_or_zero(x: ByteOption) kan jy "ByteOption::Geen => 0") spesifiseer, tik berekeningskonstrukte (‹ MyType‹.. ››::opsie => N) of Selftoegange (in blokke c &self kan jy “Self::Kwartier => 25” spesifiseer);
  • Bygevoeg die vermoë om naamlose konstantes in makro's te skep. In plaas daarvan om die elementnaam in "const" te definieer, kan jy nou die "_"-karakter gebruik om 'n nie-herhalende identifiseerder dinamies te kies, wat naamkonflikte vermy wanneer die makro weer geroep word;
  • Het die vermoë bygevoeg om die "#[repr(align(N))"-kenmerk met enums te gebruik deur 'n sintaksis te gebruik soortgelyk aan die definisie van 'n AlignN‹T›-struktuur met belyning en dan AlignN‹MyEnum› te gebruik;
  • 'n Nuwe gedeelte van die API is na die stabiele kategorie geskuif, insluitend die BufReader::buffer, BufWriter::buffer, en
    Sel::van_mut,
    Sel::as_slice_of_cells,
    DoubleEndedIterator::nth_back,
    Opsie::xor
    {i,u}{8,16,64,128,grootte}::reverse_bits, Wrapping::reverse_bits en
    sny::kopie_binne.

Daarbenewens kan dit opgemerk word begin toets die projek Async-std, wat 'n asinchrone variant van die Rust-standaardbiblioteek bied ('n poort van die std-biblioteek, waarin alle koppelvlakke in 'n asynchrone weergawe aangebied word en gereed is vir gebruik met asinc/wag ​​sintaksis).

Bron: opennet.ru

Voeg 'n opmerking