Rust 1.38 programmeertaal release

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

  • Er is een pijplijncompilatiemodus toegevoegd (pijplijn), waarin het bouwen van een afhankelijk kratpakket begint zodra de metagegevens van de afhankelijkheid beschikbaar komen, zonder te wachten tot de compilatie is voltooid. Bij het compileren van een pakket hoeven de afhankelijkheden niet volledig te worden samengesteld; u hoeft alleen maar de metagegevens te definiëren, die lijsten met typen, afhankelijkheden en geëxporteerde elementen bevatten. Metadata worden vroeg in het compilatieproces beschikbaar gesteld, zodat gekoppelde pakketten nu veel eerder kunnen worden gecompileerd. Bij het bouwen van afzonderlijke pakketten heeft de voorgestelde modus geen invloed op de prestaties, maar als de build pakketten met vertakte afhankelijkheden omvat, kan de totale bouwtijd met 10-20% worden verkort;
  • Zorgt voor detectie van onjuist gebruik van functies std::mem::niet-geïnitialiseerd и std::mem::op nul gezet. std::mem::uninitialized is bijvoorbeeld handig voor het snel maken van arrays, maar het misleidt de compiler omdat het geïnitialiseerd lijkt, maar in werkelijkheid blijft de waarde niet geïnitialiseerd. De functie mem::uninitialized is al gemarkeerd als verouderd en het wordt aanbevolen om in plaats daarvan een tussenliggend type te gebruiken Misschien Eenheid. Wat mem::zeroed betreft, kan deze functie problemen veroorzaken met typen die geen nulwaarden kunnen accepteren.

    Om ongedefinieerd gedrag te helpen identificeren, voegt de nieuwe release een lintcontrole toe aan de compiler die enkele problemen met mem::uninitialized of mem::zeroed detecteert. U krijgt nu bijvoorbeeld een foutmelding wanneer u mem::uninitialized of mem::zeroed probeert te gebruiken met de typen &T en Box‹T›, die pointerobjecten vertegenwoordigen die geen nulwaarden kunnen accepteren;

  • Het kenmerk “#[deprecated]” is uitgebreid, zodat kratpakketten als verouderd kunnen worden gemarkeerd en gepland zijn voor toekomstige verwijdering. Vanaf Rust 1.38 kan dit attribuut ook voor macro's worden gebruikt;
  • De mogelijkheid toegevoegd om het “#[global_allocator]” attribuut in submodules te gebruiken;
  • Functie toegevoegd std::any::type_naam, waarmee u de naam van het type kunt achterhalen, wat handig kan zijn voor foutopsporingsdoeleinden. Tijdens de programma-uitvoering kunt u bijvoorbeeld achterhalen voor welk type de functie werd aangeroepen:

    fn gen_waarde‹T: Standaard>() -› T {
    println!("Initialiseren van een exemplaar van {}", std::any::type_name::‹T›());
    Standaard::standaard()
    }

    fn hoofd() {
    laat _: i32 = gen_value(); # "i32" wordt afgedrukt
    laat _: String = gen_value(); # zal "alloc::string::String" afdrukken
    }

  • Uitgebreide functies van de standaardbibliotheek:
    • slice::{concat, connect, join} kan nu de waarde &[T] aannemen naast &T;
    • "*const T" en "*mut T" implementeren nu marker::Unpin;
    • "Arc‹[T]›" en "Rc‹[T]›" implementeren nu FromIterator‹T›;
    • iter::{StepBy, Peekable, Take} implementeert nu DoubleEndedIterator.
    • ascii::EscapeDefault implementeert klonen en weergeven.
  • Een nieuw deel van de API's is overgebracht naar de stabiele categorie, inclusief methoden die zijn gestabiliseerd
    • ‹*const T›::cast, ‹*mut T›::cast,
    • Duur::as_secs_f{32|64},
    • Duur::div_duration_f{32|64},
    • Duur::div_f{32|64},
    • Duur::from_secs_f{32|64},
    • Duur::mul_f{32|64},
    • divisieactiviteiten met de rest
      div_euclid en rem_euclid voor alle primitieven met gehele getallen;

  • Ondersteuning toegevoegd voor het meerdere keren specificeren van de optie “--features” om verschillende functies in de vrachtpakketbeheerder in te schakelen;
  • De compiler biedt een derde niveau ondersteuning voor doelplatforms aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc doelen, armv7-unknown-linux -gnueabi, armv7-onbekend-linux-musleabi, hexagon-onbekend-linux-musl en riscv32i-onbekend-geen-elf. Het derde niveau omvat basisondersteuning, maar zonder geautomatiseerd testen en publiceren van officiële builds.

Bron: opennet.ru

Voeg een reactie