Rust 1.37 programmeertaal release

gepubliceerd systeem programmeertaal release Roest 1.37, opgericht door het Mozilla-project. De taal richt zich op geheugenveiligheid, biedt automatisch geheugenbeheer en biedt een manier om een ​​hoge taakparallelliteit te bereiken zonder gebruik te maken van een garbage collector of runtime.

Het automatische geheugenbeheer van Rust bevrijdt de ontwikkelaar van pointermanipulatie en beschermt tegen problemen die voortkomen uit geheugenmanipulatie op laag niveau, zoals after-free geheugentoegang, null pointer-dereferenties, bufferoverruns en dergelijke. Er wordt een pakketbeheerder ontwikkeld om bibliotheken te distribueren, de assemblage te garanderen en de afhankelijkheden van het project te beheren. Cargo, zodat u met één klik de bibliotheken kunt verkrijgen die nodig zijn voor het programma. Er wordt een repository ondersteund om bibliotheken te hosten kratten.io.

De belangrijkste innovaties:

  • In de rustc-compiler beveiligd ondersteuning voor optimalisatie op basis van codeprofileringsresultaten (PGO, Profile-Guided Optimization),
    waardoor u een optimalere code kunt genereren op basis van de analyse van statistieken die zijn verzameld tijdens de uitvoering van het programma. Om een ​​profiel te genereren is de vlag “-C profile-generate” voorzien, en om het profiel tijdens de montage te gebruiken - “-C profile-use” (aanvankelijk wordt het programma samengesteld met de eerste vlag, loopt rond en na het maken het profiel, het wordt opnieuw samengesteld met de tweede vlag);

  • Bij het uitvoeren van de opdracht “cargo run”, wat handig is om snel consoletoepassingen te testen, is de mogelijkheid toegevoegd om automatisch een uitvoerbaar bestand te selecteren om uit te voeren als het pakket meerdere uitvoerbare bestanden bevat. Het standaard uit te voeren bestand wordt bepaald via de default-run richtlijn in de [package] sectie met pakketparameters, waardoor u kunt voorkomen dat u de bestandsnaam expliciet specificeert via de “-bin” vlag elke keer dat u “cargo run” uitvoert;
  • Het commando “vrachtverkoper”, voorheen geleverd als apart pakket. Met deze opdracht kunt u het werk organiseren met een lokale kopie van afhankelijkheden - na het uitvoeren van "cargoleverancier" worden alle broncodes van de afhankelijkheden van het project gedownload van kratten.io naar een lokale map, die vervolgens voor werk kan worden gebruikt zonder toegang tot kratten. io (na het uitvoeren van de opdracht wordt een hint weergegeven voor het wijzigen van de configuratie om de map voor builds te gebruiken). Deze functie wordt al gebruikt om de levering van de rustc-compiler te organiseren met het verpakken van alle afhankelijkheden in één archief met de release;
  • Het is nu mogelijk om koppelingen te maken naar opsommingsopties met behulp van type-aliassen (in de hoofdtekst van de functie “fn increment_or_zero(x: ByteOption) kunt u bijvoorbeeld “ByteOption::None => 0”) opgeven, type berekeningsconstructies (‹ MyType‹.. ››::option => N) of Self-toegangen (in blokken c &self kunt u “Self::Quarter => 25” specificeren);
  • De mogelijkheid toegevoegd om naamloze constanten in macro's te maken. In plaats van de elementnaam in "const" te definiëren, kunt u nu het teken "_" gebruiken om dynamisch een niet-herhalende identificatie te selecteren, waardoor naamconflicten worden vermeden bij het opnieuw aanroepen van de macro;
  • De mogelijkheid toegevoegd om het attribuut "#[repr(align(N))" te gebruiken met enums met behulp van een syntaxis die vergelijkbaar is met het definiëren van een AlignN‹T›-structuur met uitlijning en vervolgens AlignN‹MyEnum› te gebruiken;
  • Een nieuw deel van de API is verplaatst naar de stabiele categorie, inclusief de BufReader::buffer, BufWriter::buffer en
    Cel::van_mut,
    Cel::as_slice_of_cells,
    DoubleEndedIterator::nth_back,
    Optie::xor
    {i,u}{8,16,64,128,size}::reverse_bits, Wrapping::reverse_bits en
    slice::copy_within.

Bovendien kan worden opgemerkt begin van testen project Async-std, dat een asynchrone variant biedt van de Rust-standaardbibliotheek (een port van de std-bibliotheek, waarin alle interfaces in een asynchrone versie worden aangeboden en klaar zijn voor gebruik met async/await-syntaxis).

Bron: opennet.ru

Voeg een reactie