Rust 1.39 programmeertaal release

gepubliceerd systeem programmeertaal release Roest 1.39, 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:

  • Gestabiliseerd een nieuwe syntaxis voor asynchrone programmering gebaseerd op de functie "async", het blok async move { ... } en de operator ".await", waardoor het gemakkelijker wordt om handlers te schrijven die de hoofdopdrachtstroom niet blokkeren. Vergeleken met de eerder aangeboden API voor asynchrone I/O zijn async/.await-constructies eenvoudig te begrijpen en zeer leesbaar, en kunt u complexe asynchrone interacties implementeren met behulp van bekende flow control-technieken op basis van lussen, voorwaardelijke instructies en uitzonderingen.

    Met de syntaxis Async-await kunt u functies maken die de uitvoering ervan kunnen onderbreken, de controle terug kunnen geven aan de hoofdthread en vervolgens de uitvoering kunnen hervatten vanaf het punt waar ze waren gebleven. Zo'n pauze is bijvoorbeeld nodig bij het verwerken van I/O, waarin ander werk kan worden gedaan terwijl wordt gewacht op het volgende stukje data. Functies en blokken gedefinieerd met "async fn" en "async move" retourneren een eigenschap toekomst, die een uitgestelde asynchrone berekeningsrepresentatie definieert. U kunt direct een uitgestelde berekening starten en het resultaat verkrijgen met behulp van de operator “.await”. Er wordt geen actie uitgevoerd of vooraf gepland totdat .await wordt aangeroepen, waardoor complexe geneste constructies kunnen worden gemaakt zonder extra overhead.

    async fn eerste_functie() -> u32 { .. }
    ...
    laat future = first_function();
    ...
    laat resultaat: u32 = future.await;

  • Gestabiliseerd "#![feature(bind_by_move_pattern_guards)]", waardoor het gebruik van variabelen met het bindingstype "door-verplaatsen" in sjablonen en gebruik verwijzingen naar deze variabelen in de "if"-sectie van de uitdrukking "match". Zo zijn nu bijvoorbeeld de volgende constructies toegestaan:

    fn hoofd() {
    laat array: Box<[u8; 4]> = Box::new([1, 2, 3, 4]);

    overeenkomende array {
    nums
    als nums.iter().sum::() == 10

    => {
    drop(nums);
    }
    _ => onbereikbaar!(),
    }
    }

  • Indicatie toegestaan attributen bij het definiëren van functieparameters, afsluitingen en functieaanwijzers. Voorwaardelijke compilatieattributen (cfg, cfg_attr) die de diagnostiek regelen via lint (allow, warn, deny en forbid) en aanvullende macro-aanroepende attributen worden ondersteund.

    fn len(
    #[cfg(windows)] slice: &[u16], // gebruik de parameter op Windows
    #[cfg(not(windows))] slice: &[u8], // gebruik in een ander besturingssysteem
    ) -> gebruik maat {
    segment.len()
    }

  • Waarschuwingen over problemen die zijn vastgesteld bij het controleren van het lenen van variabelen (lenencontrole) met behulp van de NLL-techniek (Non-Lexical Lifetimes), vertaald in de categorie fatale fouten. Laten we niet vergeten dat het verificatiesysteem, gebaseerd op een nieuw mechanisme om rekening te houden met de levensduur van geleende variabelen, het mogelijk maakte enkele problemen te identificeren die onopgemerkt bleven door de oude verificatiecode. Omdat de foutuitvoer bij dergelijke controles de compatibiliteit met eerder werkende code zou kunnen beïnvloeden, werden er aanvankelijk waarschuwingen gegeven in plaats van fouten. Waarschuwingen zijn nu vervangen door fouten bij het uitvoeren van de Rust 2018-modus. In de volgende release zal de foutuitvoer ook worden geïmplementeerd in de Rust 2015-modus, waardoor eindelijk de oude leencontrole zal verdwijnen;
  • Het attribuut “const”, dat de mogelijkheid bepaalt om in elke context te gebruiken in plaats van constanten, wordt gebruikt voor de functies Vec::new, String::new, LinkedList::new, str::len, [T]::len , str::as_bytes,
    buikspieren, omhullende buikspieren en overvolle buikspieren;

  • Een nieuw deel van de API's is overgebracht naar de stabiele categorie, inclusief methoden die zijn gestabiliseerd
    Pin::into_inner, Instant::checked_duration_since en Instant::saturating_duration_since;

  • De vrachtpakketbeheerder heeft nu de mogelijkheid om de extensie “.toml” te gebruiken voor configuratiebestanden. Voorlopige ondersteuning toegevoegd voor het rechtstreeks vanuit Cargo bouwen van de standaardbibliotheek. De vlag "--workspace" is toegevoegd, ter vervanging van de controversiële vlag "--all". Er is een nieuw veld toegevoegd aan de metadata "publiceren", waarmee je afhankelijkheden kunt publiceren door een git-tag en versienummer op te geven. Testoptie "-Ztimings" toegevoegd om een ​​HTML-rapport te genereren van de uitvoeringstijden van verschillende compilatiefasen.
  • In de rustc-compiler omvatten diagnostische berichten het bijsnijden van de staarten van code die niet in de terminal passen. Biedt derde niveau van ondersteuning voor doelplatforms
    i686-onbekend-uefi en sparc64-onbekend-openbsd. Het derde niveau omvat basisondersteuning, maar zonder geautomatiseerd testen en publiceren van officiële builds.

Bron: opennet.ru

Voeg een reactie