Rust 1.47 Rhyddhau Iaith Rhaglennu

Mae datganiad 1.47 o iaith raglennu system Rust, a sefydlwyd gan brosiect Mozilla, wedi'i gyhoeddi. Mae'r iaith yn canolbwyntio ar ddiogelwch cof, yn darparu rheolaeth cof awtomatig, ac yn darparu'r modd i gyflawni tasgau cyfochrog uchel heb ddefnyddio casglwr sbwriel neu amser rhedeg (mae amser rhedeg yn cael ei leihau i gychwyn a chynnal a chadw sylfaenol y llyfrgell safonol).

Mae rheolaeth cof awtomatig Rust yn dileu gwallau wrth drin awgrymiadau ac yn amddiffyn rhag problemau sy'n deillio o drin cof lefel isel, megis cyrchu rhanbarth cof ar Γ΄l iddo gael ei ryddhau, dadgyfeiriadau pwyntydd nwl, gor-redeg byffer, ac ati. Er mwyn dosbarthu llyfrgelloedd, sicrhau cydosod a rheoli dibyniaethau, mae'r prosiect yn datblygu rheolwr pecyn Cargo. Cefnogir ystorfa crates.io ar gyfer cynnal llyfrgelloedd.

Prif arloesiadau:

  • Rhoi cymorth ar waith ar gyfer nodweddion araeau o faint mympwyol. Yn flaenorol, oherwydd yr anallu i ddiffinio swyddogaethau generig ar gyfer pob gwerth cyfanrif, roedd y llyfrgell safonol yn darparu cefnogaeth nodwedd adeiledig yn unig ar gyfer araeau hyd at 32 o elfennau mewn maint (diffiniwyd y nodweddion ar gyfer pob maint yn statig). Diolch i greu ymarferoldeb const generics, daeth yn bosibl diffinio swyddogaethau generig ar gyfer unrhyw faint arae, ond nid ydynt wedi'u cynnwys eto yn nodweddion sefydlog yr iaith, er eu bod yn cael eu gweithredu yn y casglwr ac yn cael eu defnyddio bellach yn y llyfrgell safonol. ar gyfer mathau arae o unrhyw faint.
    Er enghraifft, bydd y lluniad canlynol yn Rust 1.47 yn argraffu cynnwys arae, er yn flaenorol byddai wedi arwain at wall:

fn prif () {
gadewch xs = [0; 34];
println!("{:?}", xs);
}

  • Wedi darparu allbwn o olion byrrach (Γ΄l-olrhain), allbwn mewn sefyllfaoedd brys. Mae elfennau nad ydynt o ddiddordeb yn y rhan fwyaf o sefyllfaoedd, ond sy'n annibendod yr allbwn ac yn tynnu sylw oddi wrth brif achosion y broblem, yn cael eu heithrio o'r olion. I ddychwelyd olrhain llawn, gallwch ddefnyddio'r newidyn amgylchedd "RUST_BACKTRACE=full". Er enghraifft, ar gyfer y cod

fn prif () {
panig!();
}

Yn flaenorol, roedd yr olrhain yn allbwn mewn 23 cam, ond nawr bydd yn cael ei leihau i 3 cham, sy'n eich galluogi i ddeall y hanfod ar unwaith:

aeth yr edefyn 'prif' i banig ar 'explicit panic', src/main.rs:2:5
Γ΄l-Γ΄l pentwr:
0: std:: mynd i banig::begin_panic
yn /rustc/d…d75a/library/std/src/panicking.rs:497
1: maes chwarae::main
yn ./src/main.rs:2
2: craidd::ops:: swyddogaeth::FnOnce:: call_once
yn /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Mae'r casglwr rustc wedi'i ddiweddaru i adeiladu gan ddefnyddio LLVM 11 (mae Rust yn defnyddio LLVM fel backend ar gyfer cynhyrchu cod). Ar yr un pryd, cedwir y gallu i adeiladu gyda hen LLVM, hyd at fersiwn 8, ond yn ddiofyn (yn rust-lang/llvm-project) mae LLVM 11 bellach yn cael ei ddefnyddio. Disgwylir rhyddhau LLVM 11 yn y dyfodol. dyddiau.
  • Ar blatfform Windows, mae'r casglwr rustc yn darparu cefnogaeth ar gyfer galluogi gwiriadau cywirdeb llif rheoli (Control Flow Guard), wedi'i actifadu gan ddefnyddio'r faner β€œ-C control-flow-guard”. Ar lwyfannau eraill mae'r faner hon yn cael ei hanwybyddu am y tro.
  • Mae cyfran newydd o'r API wedi'i drosglwyddo i'r categori sefydlog, gan gynnwys Ident sefydlog:: new_raw, Range:: is_empty, RangeInclusive:: is_empty, Canlyniad:: as_deref, Canlyniad:: as_deref_mut, Vec::leak, pointer:: offset_from , f32:: TAU a f64::TAU.
  • Defnyddir y priodoledd β€œconst”, sy'n pennu'r posibilrwydd o'i ddefnyddio mewn unrhyw gyd-destun yn lle cysonion, yn y dulliau:
    • newydd i bob cyfanrif heblaw sero;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub a saturating_mul ar gyfer pob cyfanrif;
    • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_caseg fach, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace ac is_ascii_control ar gyfer torgoch ac u8 mathau.
  • Ar gyfer FreeBSD, defnyddir y pecyn cymorth o FreeBSD 11.4 (nid yw FreeBSD 10 yn cefnogi LLVM 11).

Cymerwyd o opennet.ru

Ffynhonnell: linux.org.ru

Ychwanegu sylw