Rust 1.60 Programming Language Release

Die algemene programmeertaal Rust 1.60, wat deur die Mozilla-projek gestig is, maar nou ontwikkel is onder die beskerming van die onafhanklike nie-winsgewende organisasie Rust Foundation, is vrygestel. Die taal fokus op geheueveiligheid en bied die middele om hoë werkparallelisme te bereik terwyl die gebruik van 'n vullisverwyderaar en looptyd vermy word (looptyd word verminder tot basiese inisialisering en instandhouding van die standaardbiblioteek).

Rust se geheue hantering metodes red die ontwikkelaar van foute wanneer wysers gemanipuleer word en beskerm teen probleme wat ontstaan ​​as gevolg van laevlak geheue manipulasie, soos toegang tot 'n geheue area nadat dit vrygestel is, herkenning van nulwysers, buffer oorskryding, ens. Om biblioteke te versprei, bouwerk te verskaf en afhanklikhede te bestuur, ontwikkel die projek die Cargo-pakketbestuurder. Die crates.io-bewaarplek word ondersteun vir die aanbieding van biblioteke.

Geheueveiligheid word tydens samestellingstyd in Rust verskaf deur verwysingskontrolering, tred te hou met objekeienaarskap, tred te hou met objekleeftye (bestekke), en die korrektheid van geheuetoegang tydens kode-uitvoering te assesseer. Roes bied ook beskerming teen heelgetal oorvloei, vereis verpligte inisialisering van veranderlike waardes voor gebruik, hanteer foute beter in die standaard biblioteek, pas die konsep van onveranderlike verwysings en veranderlikes by verstek toe, bied sterk statiese tik om logiese foute te minimaliseer.

Belangrikste innovasies:

  • Die rustc samesteller het 'n gestabiliseerde LLVM-gebaseerde stelsel vir die generering van dekkingsdata wat gebruik word om kodedekking tydens toetsing te evalueer. Om dekkingsdata tydens samestelling te aktiveer, moet jy die “-Cinstrument-coverage”-vlag gebruik, byvoorbeeld om die samestelling te begin met die “RUSTFLAGS=”-C instrument-coverage” cargo build”-opdrag. Nadat u die uitvoerbare lêer wat op hierdie manier saamgestel is, laat loop het, sal die default.profraw-lêer in die huidige gids gestoor word, vir verwerking wat u die llvm-profdata-nutsding vanaf die llvm-tools-preview-komponent kan gebruik. Die afvoer wat deur llvm-profdata verwerk word, kan dan na llvm-cov deurgegee word om 'n geannoteerde kodedekkingsverslag te genereer. Inligting oor die skakel na die bronkode word geneem uit die uitvoerbare lêer wat ondersoek word, wat die nodige data insluit oor die verband tussen dekkingstellers en die kode. 1| 1|fn hoof() { 2| 1| println!("Hallo, wêreld!"); 3| 1|}
  • In die vragpakketbestuurder is ondersteuning vir die "-tydberekeninge"-vlag gestabiliseer, wat die generering van 'n gedetailleerde verslag oor die vordering van die bou en die uitvoeringstyd van elke stap insluit. Die verslag kan nuttig wees om die werkverrigting van die monteerproses te optimaliseer.
  • Die vragpakketbestuurder bied 'n nuwe sintaksis vir die meganisme van voorwaardelike samestelling en seleksie van opsionele afhanklikhede, gekonfigureer in die Cargo.toml-lêer deur 'n lys van benoemde eiendomme in die [kenmerke]-afdeling te lys en geaktiveer deur die eienskappe tydens die pakketbou te aktiveer met behulp van die "--kenmerke" vlag. Die nuwe weergawe voeg ondersteuning by vir afhanklikhede in aparte naamruimtes en swak afhanklikhede.

    In die eerste geval is dit moontlik om elemente met die voorvoegsel "dep:" binne die "[kenmerke]"-afdeling te gebruik om eksplisiet na 'n opsionele afhanklikheid te koppel sonder om hierdie afhanklikheid implisiet as 'n kenmerk voor te stel. In die tweede geval is ondersteuning vir merk met die "?"-teken bygevoeg. ("pakketnaam?/kenmerknaam") opsionele afhanklikhede wat slegs ingesluit moet word as 'n ander eienskap die gegewe opsionele afhanklikheid insluit. Byvoorbeeld, in die voorbeeld hieronder, sal die aktivering van die serde-eienskap die "serde"-afhanklikheid aktiveer, sowel as die "serde"-eienskap vir die "rgb"-afhanklikheid, maar slegs as die "rgb"-afhanklikheid elders geaktiveer is: [afhanklikhede] serde = { version = " 1.0.133", opsioneel = true } rgb = { version = "0.8.25", opsioneel = true } [kenmerke] serde = ["dep:serde", "rgb?/serde"]

  • Ondersteuning vir inkrementele samestelling, wat in die laaste vrystelling gedeaktiveer is, is teruggestuur. Die samestellerfout wat veroorsaak het dat die kenmerk gedeaktiveer is, is opgelos.
  • Het 'n paar probleme opgelos met die verskaffing van Instant timers met 'n waarborg van monotoniese tydsberekening, wat die tyd wat die stelsel in slaapmodus spandeer in ag neem. Voorheen is die OS-API waar moontlik gebruik om die timer te gebruik, wat nie problematiese situasies in ag geneem het wat die eentonigheid van tyd breek nie, soos hardewareprobleme, die gebruik van virtualisering of foute in die bedryfstelsel.
  • 'n Nuwe gedeelte van die API is na die kategorie stal geskuif, insluitend die metodes en implementering van eienskappe is gestabiliseer:
    • Arc::nuut_siklies
    • Rc::nuut_siklies
    • sny :: EscapeAscii
    • <[u8]>::escape_ascii
    • u8::ontsnap_ascii
    • Vec::spare_kapasiteit_mut
    • MaybeUninit::assume_init_drop
    • MaybeUninit::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
    • Vertoon vir io::ErrorKind
    • Van vir ExitCode
    • Nie vir ! (tik "nooit")
    • _Op_Assign<$t>
    • arch::is_aarch64_feature_detected!
  • Die derde vlak van ondersteuning is geïmplementeer vir die mips64-openwrt-linux-musl* en armv7-unknown-linux-uclibceabi (softfloat) platforms. Die derde vlak behels basiese ondersteuning, maar sonder outomatiese toetsing, publikasie van amptelike bouwerk en verifikasie van kodeboubaarheid.
  • Die samesteller is oorgeskakel om LLVM 14 te gebruik.

Daarbenewens kan u daarop let:

  • Bygevoeg ondersteuning vir die opstart van die rustc samesteller met behulp van die rustc_codegen_gcc backend, wat jou toelaat om die libgccjit biblioteek van die GCC projek te gebruik as 'n kode genereerder in rustc, wat rustc toelaat om ondersteuning te bied vir argitekture en optimalisering beskikbaar in GCC. Samestellerpromosie beteken die vermoë om 'n GCC-gebaseerde kodegenerator in rustc te gebruik om die rustc-samesteller self te bou. Op die praktiese kant laat hierdie kenmerk jou toe om roesprogramme te bou vir argitekture wat nie voorheen in rustc ondersteun is nie.
  • Die vrystelling van die uutils coreutils 0.0.13 toolkit is beskikbaar, waarbinne 'n analoog van die GNU Coreutils-pakket, herskryf in die Rust-taal, ontwikkel word. Coreutils kom met meer as honderd hulpmiddels, insluitend sort, cat, chmod, chown, chroot, cp, date, dd, eggo, gasheernaam, id, ln en ls. Die doel van die projek is om 'n alternatiewe kruisplatform-implementering van Coreutils te skep, wat op Windows-, Redox- en Fuchsia-platforms kan werk, sowel as verspreiding onder die permissiewe MIT-lisensie, in plaas van die GPL copyleft-lisensie.

    Die nuwe weergawe het verbeterde implementerings van baie nutsprogramme, insluitend aansienlik verbeterde verenigbaarheid van die cp, dd, df, split en tr nutsprogramme met hul eweknieë van die GNU-projek. Aanlyn dokumentasie verskaf. Die klap-ontleder word gebruik om opdragreëlargumente te ontleed, wat die uitset vir die "--help"-vlag verbeter het en ondersteuning vir afkortings van lang opdragte bygevoeg het (byvoorbeeld, jy kan "ls -col" spesifiseer in plaas van "ls -color" ”).

Bron: opennet.ru

Voeg 'n opmerking