Rust 1.60 programmeertaal release

De release van de algemene programmeertaal Rust 1.60, opgericht door het Mozilla-project, maar nu ontwikkeld onder auspiciën van de onafhankelijke non-profitorganisatie Rust Foundation, is gepubliceerd. De taal is gericht op geheugenveiligheid en biedt de middelen om een ​​hoog parallellisme te bereiken bij het uitvoeren van taken, terwijl het gebruik van een garbage collector en runtime wordt vermeden (runtime wordt beperkt tot basisinitialisatie en onderhoud van de standaardbibliotheek).

De geheugenbeheertechnieken van Rust bevrijden de ontwikkelaar van pointermanipulatiefouten en beschermen tegen problemen die voortkomen uit geheugenmanipulatie op laag niveau, zoals after-free toegang, null pointer-dereferenties, bufferoverruns en dergelijke. Om bibliotheken te distribueren, de assemblage te garanderen en afhankelijkheden te beheren, ontwikkelt het project de Cargo-pakketbeheerder. De kratten.io-repository wordt ondersteund voor het hosten van bibliotheken.

Geheugenveiligheid wordt in Rust afgedwongen tijdens het compileren door middel van referentiecontrole, het volgen van objecteigendom, overweging van de levensduur van objecten (scoping) en evaluatie van geheugentoegang tijdens runtime. Rust biedt ook bescherming tegen overflows van gehele getallen, vereist dat variabelewaarden vóór gebruik worden geïnitialiseerd, heeft een betere foutafhandeling in de standaardbibliotheek, gebruikt standaard het concept van onveranderlijke referenties en variabelen en biedt sterke statische typering om logische fouten te minimaliseren.

Belangrijkste innovaties:

  • De rustc-compiler heeft een gestabiliseerd op LLVM gebaseerd systeem voor het genereren van dekkingsgegevens die worden gebruikt om de codedekking tijdens het testen te evalueren. Om dekkingsgegevens tijdens de montage mogelijk te maken, moet u de vlag "-Cinstrument-coverage" gebruiken, bijvoorbeeld door de montage te starten met de opdracht "RUSTFLAGS="-C instrument-coverage" cargo build". Nadat het op deze manier gecompileerde uitvoerbare bestand is uitgevoerd, wordt het bestand default.profraw opgeslagen in de huidige map. Voor verwerking kunt u het hulpprogramma llvm-profdata van de component llvm-tools-preview gebruiken. De door llvm-profdata verwerkte uitvoer kan vervolgens worden doorgegeven aan llvm-cov om een ​​geannoteerd codedekkingsrapport te genereren. Informatie over de link naar de broncode wordt gehaald uit het onderzochte uitvoerbare bestand, dat de benodigde gegevens bevat over de verbinding tussen dekkingstellers en de code. 1| 1|fn hoofd() { 2| 1| println!("Hallo wereld!"); 3| 1|}
  • In de vrachtpakketbeheerder is de ondersteuning voor de vlag ‘-timings’ gestabiliseerd, waaronder het genereren van een gedetailleerd rapport over de voortgang van de bouw en de uitvoeringstijd van elke stap. Het rapport kan nuttig zijn voor het optimaliseren van de prestaties van het assemblageproces.
  • De cargopakketbeheerder biedt een nieuwe syntaxis voor het mechanisme van voorwaardelijke compilatie en selectie van optionele afhankelijkheden, geconfigureerd in het Cargo.toml-bestand door een lijst met benoemde eigenschappen op te sommen in de sectie [features] en geactiveerd door de eigenschappen in te schakelen tijdens het bouwen van het pakket met behulp van de vlag "--features". De nieuwe versie voegt ondersteuning toe voor afhankelijkheden in afzonderlijke naamruimten en zwakke afhankelijkheden.

    In het eerste geval is het mogelijk om elementen met het voorvoegsel “dep:” in de sectie “[features]” te gebruiken om expliciet te linken naar een optionele afhankelijkheid zonder deze afhankelijkheid impliciet als een feature weer te geven. In het tweede geval is ondersteuning voor het markeren met het “?”-teken toegevoegd. ("pakketnaam?/featurenaam") optionele afhankelijkheden die alleen mogen worden opgenomen als een andere eigenschap de gegeven optionele afhankelijkheid bevat. In het onderstaande voorbeeld zal het inschakelen van de eigenschap serde bijvoorbeeld de afhankelijkheid "serde" inschakelen, evenals de eigenschap "serde" voor de afhankelijkheid "rgb", maar alleen als de afhankelijkheid "rgb" elders is ingeschakeld: [dependencies] serde = { versie = " 1.0.133", optioneel = true } rgb = { versie = "0.8.25", optioneel = true } [features] serde = ["dep:serde", "rgb?/serde"]

  • Ondersteuning voor incrementele compilatie, die in de laatste release was uitgeschakeld, is teruggekeerd. De compilerbug die ervoor zorgde dat de functie werd uitgeschakeld, is opgelost.
  • Een aantal problemen opgelost bij het leveren van Instant-timers met een garantie voor monotone timing, waarbij rekening wordt gehouden met de tijd die het systeem in de slaapmodus doorbrengt. Voorheen werd waar mogelijk de OS API gebruikt om de timer te bedienen, waarbij geen rekening werd gehouden met problematische situaties die de monotonie van de tijd doorbreken, zoals hardwareproblemen, het gebruik van virtualisatie of fouten in het besturingssysteem.
  • Een nieuw deel van de API is overgebracht naar de stabiele categorie, inclusief de methoden en implementaties van eigenschappen:
    • Boog::new_cyclic
    • Rc::nieuwe_cyclisch
    • slice::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • MisschienUninit::neem_init_drop
    • MisschienUninit::assume_init_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • isize::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • gebruik::abs_diff
    • Weergave voor io::ErrorKind
    • Van voor ExitCode
    • Niet voor ! (typ "nooit")
    • _Op_Assign<$t>
    • arch::is_aarch64_feature_detected!
  • Het derde ondersteuningsniveau is geïmplementeerd voor de mips64-openwrt-linux-musl* en armv7-unknown-linux-uclibceabi (softfloat) platforms. Het derde niveau omvat basisondersteuning, maar zonder geautomatiseerd testen, het publiceren van officiële builds of het controleren of de code kan worden gebouwd.
  • De compiler is overgeschakeld naar LLVM 14.

Daarnaast kunt u het volgende noteren:

  • Ondersteuning toegevoegd voor het opstarten van de rustc-compiler met behulp van de rustc_codegen_gcc-backend, waarmee u de libgccjit-bibliotheek van het GCC-project kunt gebruiken als codegenerator in rustc, waardoor rustc ondersteuning kan bieden voor architecturen en optimalisaties die beschikbaar zijn in GCC. Compilerpromotie betekent de mogelijkheid om een ​​GCC-gebaseerde codegenerator in rustc te gebruiken om de rustc-compiler zelf te bouwen. Praktisch gezien kunt u met deze functie roestprogramma's bouwen voor architecturen die voorheen niet werden ondersteund in rustc.
  • De release van de uutils coreutils 0.0.13 toolkit is beschikbaar, waarin een analoog van het GNU Coreutils-pakket, herschreven in de Rust-taal, wordt ontwikkeld. Coreutils wordt geleverd met meer dan honderd hulpprogramma's, waaronder sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln en ls. Het doel van het project is het creëren van een platformonafhankelijke alternatieve implementatie van Coreutils, die kan draaien op Windows-, Redox- en Fuchsia-platforms, en kan worden gedistribueerd onder de permissieve MIT-licentie, in plaats van de GPL copyleft-licentie.

    De nieuwe versie heeft de implementaties van veel hulpprogramma's verbeterd, waaronder een aanzienlijk verbeterde compatibiliteit van de hulpprogramma's cp, dd, df, split en tr met hun tegenhangers uit het GNU-project. Online documentatie verstrekt. De clap-parser wordt gebruikt om opdrachtregelargumenten te ontleden, waardoor de uitvoer van de vlag “--help” is verbeterd en ondersteuning is toegevoegd voor afkortingen van lange opdrachten (u kunt bijvoorbeeld “ls -col” opgeven in plaats van “ls -color ”).

Bron: opennet.ru

Voeg een reactie