Rust 1.60 Programming Language Release

De algemiene programmeertaal Rust 1.60, oprjochte troch it Mozilla-projekt mar no ûntwikkele ûnder auspysjes fan de ûnôfhinklike non-profit organisaasje Rust Foundation, is frijjûn. De taal rjochtet him op ûnthâld feilichheid en jout de middels te berikken hege baan parallelism wylst it foarkommen fan it brûken fan in garbage collector en runtime (runtime wurdt redusearre ta basis inisjalisaasje en ûnderhâld fan de standert bibleteek).

De metoaden foar ûnthâldbehanneling fan Rust besparje de ûntwikkelder fan flaters by it manipulearjen fan oanwizers en beskermje tsjin problemen dy't ûntsteane troch ûnthâldôfhanneling op leech nivo, lykas tagong krije ta in ûnthâldgebiet nei't it befrijd is, it ferwizen fan nul-oanwizers, buffer-oerrin, ensfh. Om bibleteken te fersprieden, builds te leverjen en ôfhinklikens te behearjen, ûntwikkelet it projekt de Cargo-pakketbehearder. It crates.io repository wurdt stipe foar hosting fan bibleteken.

Unthâld feilichheid wurdt foarsjoen yn Rust op it gearstallen tiid troch referinsje kontrôle, byhâlden fan foarwerp eigendom, byhâlden fan foarwerp lifetimes (omfang), en beoardielje de korrektheid fan ûnthâld tagong by koade útfiering. Rust leveret ek beskerming tsjin oerstreamingen fan heule getal, fereasket ferplichte inisjalisaasje fan fariabele wearden foar gebrûk, behannelet flaters better yn 'e standertbibleteek, tapast standert it konsept fan ûnferoarlike referinsjes en fariabelen, biedt sterke statyske typen om logyske flaters te minimalisearjen.

Wichtichste ynnovaasjes:

  • De rustc-kompiler hat in stabilisearre LLVM-basearre systeem foar it generearjen fan dekkingsgegevens brûkt om koadedekking te evaluearjen tidens testen. Om dekkingsgegevens yn te skeakeljen tidens de gearstalling, moatte jo de flagge "-Cinstrument-coverage" brûke, bygelyks de gearkomste te begjinnen mei it kommando "RUSTFLAGS="-C instrument-coverage" cargo build". Nei it útfieren fan it útfierbere bestân dat op dizze manier kompilearre is, sil de standert.profraw-bestân bewarre wurde yn 'e aktuele map, foar ferwurking wêrmei jo it helpprogramma llvm-profdata brûke kinne fan 'e llvm-tools-preview-komponint. De útfier ferwurke troch llvm-profdata kin dan wurde trochjûn oan llvm-cov om in annotearre koadedekkingsrapport te generearjen. Ynformaasje oer de keppeling nei de boarnekoade wurdt nommen út it útfierbere bestân dat wurdt ûndersocht, dy't de nedige gegevens omfettet oer de ferbining tusken dekkingtellers en de koade. 1| 1|fn main() { 2| 1| println!("Hallo, wrâld!"); 3| 1|}
  • Yn 'e frachtpakketbehearder is stipe foar de flagge "-timings" stabilisearre, dy't de generaasje fan in detaillearre rapport omfettet oer de fuortgong fan' e bou en de útfieringstiid fan elke stap. It rapport kin nuttich wêze foar it optimalisearjen fan de prestaasjes fan it assemblageproses.
  • De frachtpakketbehearder biedt in nije syntaksis foar it meganisme fan betingst kompilaasje en seleksje fan opsjonele ôfhinklikens, konfigureare yn it Cargo.toml-bestân troch in list mei neamde eigenskippen yn 'e seksje [funksjes] op te nimmen en aktivearre troch de eigenskippen yn te skeakeljen tidens de pakketbou mei de flagge "--funksjes". De nije ferzje foeget stipe ta foar ôfhinklikens yn aparte nammeromten en swakke ôfhinklikens.

    Yn it earste gefal is it mooglik om eleminten te brûken mei it foarheaksel "dep:" yn 'e seksje "[funksjes]" om eksplisyt te keppeljen nei in opsjonele ôfhinklikens sûnder dat dizze ôfhinklikens ymplisyt as in funksje fertsjintwurdiget. Yn it twadde gefal is stipe foar markearring mei it teken "?" tafoege. ("pakketnamme?/funksjenamme") opsjonele ôfhinklikens dy't allinich opnommen wurde moatte as in oar eigendom de opjûne opsjonele ôfhinklikens omfettet. Bygelyks, yn it foarbyld hjirûnder, it ynskeakeljen fan de serde-eigenskip sil de "serde"-ôfhinklikens ynskeakelje, lykas de "serde"-eigenskip foar de "rgb"-ôfhinklikens, mar allinich as de "rgb"-ôfhinklikens earne oars ynskeakele is: [ôfhinklikens] serde = { version = " 1.0.133", optional = true } rgb = { version = "0.8.25", optional = true } [features] serde = ["dep:serde", "rgb?/serde"]

  • Stipe foar inkrementele kompilaasje, dy't yn 'e lêste release útskeakele wie, is weromjûn. De kompiler-bug dy't feroarsake hat dat de funksje útskeakele is, is oplost.
  • Oplost guon problemen mei it jaan fan Instant timers mei in garânsje fan monotoanyske timing, dy't rekken hâldt mei de tiid trochbrocht troch it systeem yn sliep modus. Eartiids waard de OS API brûkt as it mooglik wie om de timer te betsjinjen, dy't gjin rekken holden mei problematyske situaasjes dy't de monotony fan 'e tiid brekke, lykas hardwareproblemen, it brûken fan virtualisaasje, of flaters yn it bestjoeringssysteem.
  • In nij diel fan 'e API is ferpleatst nei de kategory stabile, ynklusyf de metoaden en ymplemintaasjes fan eigenskippen binne stabilisearre:
    • Arc::new_cyclic
    • Rc::new_cyclic
    • slice :: EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_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
    • brûk :: abs_diff
    • Display foar io :: ErrorKind
    • Fan foar ExitCode
    • Net foar ! (type "nea")
    • _Op_Assign<$t>
    • arch :: is_aarch64_feature_detected!
  • It tredde nivo fan stipe is ymplementearre foar de mips64-openwrt-linux-musl * en armv7-unknown-linux-uclibceabi (softfloat) platfoarms. It tredde nivo omfettet basisstipe, mar sûnder automatisearre testen, publisearjen fan offisjele builds, of kontrolearjen oft de koade boud wurde kin.
  • De kompilator is oerskeakele om LLVM 14 te brûken.

Derneist kinne jo opmerke:

  • Stipe tafoege foar it bootstrapping fan 'e rustc-kompiler mei help fan de rustc_codegen_gcc-backend, wêrtroch jo de libgccjit-bibleteek fan it GCC-projekt kinne brûke as in koadegenerator yn rustc, wêrtroch rustc stipe foar arsjitektuer en optimisaasjes dy't beskikber binne yn GCC. Kompilatorpromoasje betsjut de mooglikheid om in GCC-basearre koadegenerator te brûken yn rustc om de rustc-kompiler sels te bouwen. Oan 'e praktyske kant lit dizze funksje jo rustprogramma's bouwe foar arsjitektueren dy't net earder yn rustc waarden stipe.
  • De frijlitting fan 'e uutils coreutils 0.0.13 toolkit is beskikber, wêryn in analoog fan it GNU Coreutils-pakket, opnij skreaun yn 'e Rust-taal, wurdt ûntwikkele. Coreutils komt mei mear as hûndert nutsbedriuwen, ynklusyf sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostnamme, id, ln, en ls. It doel fan it projekt is om in cross-platfoarm alternative ymplemintaasje fan Coreutils te meitsjen, yn steat om te rinnen op Windows, Redox en Fuchsia platfoarms, en ek distribúsje ûnder de permissive MIT-lisinsje, ynstee fan de GPL copyleft-lisinsje.

    De nije ferzje hat ferbettere ymplemintaasjes fan in protte nutsbedriuwen, ynklusyf gâns ferbettere komptabiliteit fan de cp, dd, df, split en tr nutsbedriuwen mei harren tsjinhingers út de GNU projekt. Online dokumintaasje levere. De klapparser wurdt brûkt om kommandorigelarguminten te parsearjen, wat de útfier foar de flagge "--help" hat ferbettere en stipe tafoege foar ôfkoartings fan lange kommando's (jo kinne bygelyks "ls -col" opjaan ynstee fan "ls -color" ”).

Boarne: opennet.ru

Add a comment