Rust 1.73 Rhyddhau Iaith Rhaglennu

Mae rhyddhau iaith raglennu pwrpas cyffredinol Rust 1.73, a sefydlwyd gan brosiect Mozilla, ond sydd bellach wedi'i datblygu dan nawdd y sefydliad dielw annibynnol Rust Foundation, wedi'i gyhoeddi. Mae'r iaith yn canolbwyntio ar ddiogelwch cof ac yn darparu'r modd i gyflawni gwaith tebyg iawn tra'n osgoi defnyddio casglwr sbwriel ac amser rhedeg (mae amser rhedeg yn cael ei leihau i gychwyn a chynnal a chadw sylfaenol y llyfrgell safonol).

Mae dulliau trin cof Rust yn arbed y datblygwr rhag gwallau wrth drin awgrymiadau ac yn amddiffyn rhag problemau sy'n codi oherwydd trin cof lefel isel, megis cyrchu man cof ar ôl iddo gael ei ryddhau, dadgyfeirio awgrymiadau nwl, gor-redeg byffer, ac ati. Er mwyn dosbarthu llyfrgelloedd, darparu adeiladu a rheoli dibyniaethau, mae'r prosiect yn datblygu rheolwr pecyn Cargo. Cefnogir ystorfa crates.io ar gyfer cynnal llyfrgelloedd.

Darperir diogelwch cof yn Rust ar amser casglu trwy wirio cyfeiriadau, cadw golwg ar berchnogaeth gwrthrychau, cadw golwg ar oes gwrthrychau (scopes), ac asesu cywirdeb mynediad cof wrth weithredu cod. Mae Rust hefyd yn darparu amddiffyniad rhag gorlifiadau cyfanrif, yn gofyn am ymgychwyn gorfodol o werthoedd amrywiol cyn ei ddefnyddio, yn trin gwallau yn well yn y llyfrgell safonol, yn cymhwyso'r cysyniad o gyfeiriadau a newidynnau digyfnewid yn ddiofyn, yn cynnig teipio statig cryf i leihau gwallau rhesymegol.

Prif arloesiadau:

  • Mae fformat y negeseuon a gyhoeddwyd gan y triniwr chwalfa rhaglen rhagosodedig (panig) wedi'i ailgynllunio. Y testun a nodir yn y macro "panic!" bellach yn cael ei ddangos ar linell ar wahân heb ddyfynodau, gan wneud y neges yn haws i'w darllen a dileu dryswch pan fydd dyfyniadau nythu yn bresennol neu wedi'u rhannu ar draws llinellau lluosog. fn main() { let file = "ferris.txt"; panig! ("oh na! {ffeil:?} heb ei ddarganfod!"); } Roedd edefyn 'prif' wedi mynd i banig ar 'o na! "ferris.txt" heb ei ganfod!', src/main.rs:3:5 Thread 'main' wedi mynd i banig yn src/main.rs:3:5: o na! "ferris.txt" heb ei ddarganfod!

    Mae allbwn y negeseuon a ddangosir pan fydd y macros “assert_eq” a “assert_ne” yn cael eu sbarduno hefyd wedi'i ail-weithio. fn main() { assert_eq!("🦀", "🐟", "nid pysgodyn mo ferris"); } Roedd edefyn 'prif' wedi mynd i banig ar 'methwyd yr haeriad: `(chwith == dde)` chwith: `" 🦀 "`, dde: `" 🐟 "`: nid pysgodyn yw ferris', src/main.rs: 2 :5 Thread 'prif' wedi mynd i banig yn src/main.rs:2:5: honiad `chwith == dde` wedi methu: nid pysgodyn ar y chwith yw ferris: “🦀” dde: “🐟”

  • Yn unol â RFC 3184, mae'r gallu i drin allweddi storio LocalKey thread-local (thread_local) yn uniongyrchol wedi'i ychwanegu > a LocalKey > trwy ddefnyddio dulliau get(), set(), take() a disodli(), yn lle defnyddio cau "with(|mewnol|...)", sy'n dileu'r angen i berfformio cod cychwynnol ychwanegol ar gyfer y gwerthoedd rhagosodedig a bennir ar gyfer edafedd newydd wrth ddefnyddio'r macro “thread_local!” edefyn_lleol! { PETHAU statig: Cell > = Cell::newydd(Vec::newydd()); } fn f() {// oedd THINGS.with(|i| i.set(vec![32, 1, 2])); // daeth THINGS.set(vec![3, 1, 2]); // ... // was let v = THINGS.with(|i| i.take()); // came let v: Vec = PETHAU.cymer(); }
  • Mae cyfran newydd o'r API wedi'i symud i'r categori stabl, gan gynnwys dulliau a gweithrediad nodweddion wedi'u sefydlogi:
    • {cyfanrif} heb ei lofnodi::div_ceil
    • {cyfanrif} heb ei lofnodi::next_multiple_of
    • {cyfanrif} heb ei lofnodi:: checked_next_multiple_of
    • std::ffi::FromBytesUntilNulError
    • std::os::unix::fs::chown
    • std::os::unix::fs::fchown
    • std::os::unix::fs::lfchown
    • Allwedd Lleol :: >::cael
    • Allwedd Lleol :: >::set
    • Allwedd Lleol :: >::cymryd
    • Allwedd Lleol :: >:: disodli
    • Allwedd Lleol :: >::gyda_benthyg
    • Allwedd Lleol :: >::gyda_benthyg_mut
    • Allwedd Lleol :: >::set
    • Allwedd Lleol :: >::cymryd
    • Allwedd Lleol :: >:: disodli
  • Defnyddir y nodwedd “const”, sy'n pennu'r posibilrwydd o'i ddefnyddio mewn unrhyw gyd-destun yn lle cysonion, yn y swyddogaethau:
    • rc::Gwan::newydd
    • cysoni::Gwan::newydd
    • NonNull::as_ref
  • Mae'r casglwr yn darparu cofnod o wybodaeth fersiwn yn yr adran “.comment”, tebyg i GCC a Clang.
  • Mae'r drydedd lefel o gefnogaeth wedi'i rhoi ar waith ar gyfer y llwyfannau aarch64-unknown-teeos, csky-unknown-linux-gnuabiv2, riscv64-linux-android, riscv64gc-unknown-hermit, x86_64-unikraft-linux-musl a x86_64-unknown-linux -ohos. Mae'r drydedd lefel yn cynnwys cymorth sylfaenol, ond heb brofi awtomataidd, cyhoeddi adeiladau swyddogol, na gwirio a ellir adeiladu'r cod.
  • Mae'r ail lefel o gefnogaeth ar gyfer y llwyfan targed wasm32-wasi-preview1-threads wedi'i rhoi ar waith. Mae'r ail lefel o gefnogaeth yn cynnwys gwarant cynulliad.

Ffynhonnell: opennet.ru

Ychwanegu sylw