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'r trinwr panig diofyn wedi ailgynllunio'r negeseuon y mae'n eu dychwelyd. Mae'r testun a bennir yn y macro "panig!" bellach yn cael ei arddangos ar linell ar wahân heb ddyfynodau, gan wneud y neges yn haws i'w darllen a dileu dryswch pan ddefnyddir dyfynodau nythu neu wrth ymestyn dros linellau lluosog. fn main() { let file = "ferris.txt"; panic!("oh na! {file:?} not found!"); } Edau 'main' panigiodd yn 'oh na! "ferris.txt" not found!', src/main.rs:3:5 Edau 'main' panigiodd yn src/main.rs:3:5: o na! "ferris.txt" not found!

    Mae allbwn y negeseuon a ddangosir pan fydd y macros "assert_eq" ac "assert_ne" yn cael eu sbarduno hefyd wedi'i ailweithio. fn main() { assert_eq!("🦀", "🐟", "nid yw ferris yn bysgodyn"); } Edau 'main' wedi panigio yn 'methodd assertion: `(chwith == dde)` left: `»🦀»`, right: `»🐟»`: nid yw ferris yn bysgodyn', src/main.rs:2:5 Edau 'main' wedi panigio yn src/main.rs:2:5: methodd assertion `chwith == dde`: nid yw ferris yn bysgodyn left: "🦀" right: "🐟"

  • Yn unol ag RFC 3184, mae'r gallu i drin allweddi edau-leol (thread_local) y storfa LocalKey yn uniongyrchol wedi'i ychwanegu. > ac Allwedd Lleol > drwy ddefnyddio'r dulliau get(), set(), take(), a replace(), yn lle defnyddio'r cau "with(|inner| ...)", sy'n osgoi gweithredu cod cychwyn ychwanegol ar gyfer y gwerthoedd diofyn a bennir ar gyfer edafedd newydd gan ddefnyddio'r macro "thread_local!". thread_local! { static THINGS: Cell > = Cell::new(Vec::new()); } fn f() { // oedd PETHAU.gyda(|i| i.set(vec![1, 2, 3])); // daeth yn PETHAU.set(vec![1, 2, 3]); // ... // gadewid i v = PETHAU.gyda(|i| i.take()); // daeth yn gadael i v: Vec = PETHAU.cymryd(); }
  • Mae cyfran newydd o'r API wedi'i symud i'r categori stabl, gan gynnwys dulliau a gweithrediad nodweddion wedi'u sefydlogi:
    • Heb ei lofnodi {gyfanrif}::div_ceil
    • Heb ei lofnodi {gyfanrif}::lluosrif_nesaf
    • Heb ei lofnodi {integral}::checked_next_multiple_of
    • std::ffi::FromBytesUntilNulError
    • std::os::unix::fs::chown
    • std::os::unix::fs::fchown
    • std::os::unix::fs::lfchown
    • AllweddLeol:: >::cael
    • AllweddLeol:: >::set
    • AllweddLeol:: >::cymryd
    • AllweddLeol:: >::disodli
    • AllweddLeol:: >::gyda_benthyca
    • AllweddLeol:: >::gyda_benthyca_mut
    • AllweddLeol:: >::set
    • AllweddLeol:: >::cymryd
    • AllweddLeol:: >::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
    • sync::Wan::new
    • NonNull::as_refer
  • Mae'r crynhoydd yn darparu'r gallu i gofnodi gwybodaeth fersiwn yn yr adran ".comment", yn debyg i GCC a Clang.
  • Mae cefnogaeth Lefel 3 wedi'i gweithredu 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 Lefel 3 yn darparu cefnogaeth sylfaenol, ond heb brofion awtomataidd, adeiladwaith swyddogol, na gwirio adeiladwaith.
  • Mae'r ail lefel o gefnogaeth ar gyfer y platfform targed wasm32-wasi-preview1-threads wedi'i weithredu. Mae'r ail lefel hon o gefnogaeth yn cynnwys gwarant adeiladu.

Ffynhonnell: opennet.ru

Ychwanegu sylw