Rust 1.38 Rhyddhau Iaith Rhaglennu

Cyhoeddwyd rhyddhau iaith rhaglennu system Rhwd 1.38, a sefydlwyd gan brosiect Mozilla. Mae'r iaith yn canolbwyntio ar ddiogelwch cof, yn darparu rheolaeth cof awtomatig, ac yn darparu modd i gyflawni tasgau tebyg iawn heb ddefnyddio casglwr sbwriel neu amser rhedeg.

Mae rheolaeth cof awtomatig Rust yn rhyddhau'r datblygwr rhag trin pwyntydd ac yn amddiffyn rhag problemau sy'n deillio o drin cof lefel isel, megis mynediad cof ôl-rhad ac am ddim, cyfeiriadau pwyntydd nwl, gor-redeg byffer, ac ati. Mae rheolwr pecyn yn cael ei ddatblygu i ddosbarthu llyfrgelloedd, sicrhau cydosod a rheoli dibyniaethau gan y prosiect. Tâl, sy'n eich galluogi i gael y llyfrgelloedd sydd eu hangen ar gyfer y rhaglen mewn un clic. Cefnogir ystorfa i gynnal llyfrgelloedd cewyll.io.

Y prif arloesiadau:

  • Ychwanegwyd modd casglu wedi'i biblinellu (wedi'i biblinellu), lle mae'r gwaith o adeiladu pecyn crât dibynnol yn dechrau cyn gynted ag y bydd y metadata dibyniaeth ar gael, heb aros i'w grynhoi gael ei gwblhau. Wrth lunio pecyn, nid oes angen i'r dibyniaethau gael eu cydosod yn llawn, dim ond diffinio'r metadata, sy'n cynnwys rhestrau o fathau, dibyniaethau, ac elfennau wedi'u hallforio. Sicrheir bod metadata ar gael yn gynnar yn y broses grynhoi, felly bellach gellir llunio pecynnau cysylltiedig yn llawer cynharach. Wrth adeiladu pecynnau sengl, nid yw'r modd arfaethedig yn effeithio ar berfformiad, ond os yw'r adeiladwaith yn cwmpasu pecynnau â dibyniaethau canghennog, gellir lleihau'r amser adeiladu cyffredinol 10-20%;
  • Yn sicrhau canfod defnydd anghywir o ffwythiannau std::mem::uninitialized и std::mem::zeroed. Er enghraifft, mae std::mem::uninitialized yn gyfleus ar gyfer creu araeau yn gyflym, ond mae'n camarwain y casglwr oherwydd mae'n ymddangos ei fod wedi'i gychwyn, ond mewn gwirionedd mae'r gwerth yn parhau i fod yn anghyfarwydd. Mae'r ffwythiant mem :: aninitialized eisoes wedi'i nodi fel un anghymeradwy ac argymhellir defnyddio math canolradd yn lle EfallaiUnit. Fel ar gyfer mem::zeroed, gall y swyddogaeth hon achosi problemau gyda mathau na allant dderbyn gwerthoedd sero.

    Er mwyn helpu i nodi ymddygiad heb ei ddiffinio, mae'r datganiad newydd yn ychwanegu siec lint i'r casglwr sy'n canfod rhai problemau gyda mem::uninitialized neu mem::zeroed. Er enghraifft, rydych nawr yn cael gwall wrth geisio defnyddio mem::uninitialized neu mem::zeroed gyda mathau &T a Box‹T›, sy'n cynrychioli gwrthrychau pwyntydd na allant dderbyn gwerthoedd null;

  • Mae'r briodwedd “#[dibrisiedig]” wedi'i ehangu i ganiatáu i becynnau crât gael eu marcio'n ddarfodedig a'u hamserlennu i'w dileu yn y dyfodol. O Rust 1.38, gellir defnyddio'r nodwedd hon hefyd ar gyfer macros;
  • Ychwanegwyd y gallu i ddefnyddio'r briodwedd “#[global_allocator]” mewn is-fodiwlau;
  • Nodwedd ychwanegol std::unrhyw::type_name, sy'n eich galluogi i ddarganfod enw'r math, a all fod yn ddefnyddiol at ddibenion dadfygio. Er enghraifft, yn ystod gweithredu'r rhaglen gallwch ddarganfod pa fath o swyddogaeth oedd enw'r swyddogaeth:

    fn gen_value‹T: Diofyn>() -› T {
    println!("Cychwyn enghraifft o {}", std ::any ::type_name ::‹T›());
    Rhagosodedig::default()
    }

    fn prif () {
    gadewch _: i32 = gen_value(); Bydd # " i32 " yn cael ei argraffu
    gadewch _: Llinyn = gen_value(); Bydd # yn argraffu "aloc::string::String"
    }

  • Swyddogaethau estynedig y llyfrgell safonol:
    • slice:: Gall {concat, connect, join} nawr gymryd y gwerth &[T] yn ychwanegol at &T;
    • Mae "*const T" a "*mut T" bellach yn gweithredu marciwr:: Unpin;
    • Mae "Arc‹[T]›" a "Rc‹[T]›" bellach yn gweithredu FromIterator‹T›;
    • iter::{Step By, Peekable, Take} gweithredu DoubleEndedIterator nawr.
    • ascii::Mae EscapeDefault yn gweithredu Clonio ac Arddangos.
  • Mae cyfran newydd o APIs wedi'i drosglwyddo i'r categori sefydlog, gan gynnwys dulliau sydd wedi'u sefydlogi
    • ‹*const T›::cast, ‹ *mut T›::cast,
    • Hyd:: as_secs_f{32|64},
    • Hyd:: div_duration_f{32|64},
    • Hyd:: div_f{32|64},
    • Hyd:: o_secs_f{32|64},
    • Hyd::mul_f{32|64},
    • gweithrediadau adran gyda gweddill
      div_euclid a rem_euclid ar gyfer pob cyntefig cyfanrif;

  • Ychwanegwyd cefnogaeth ar gyfer nodi'r opsiwn “--features” sawl gwaith i alluogi gwahanol nodweddion yn y rheolwr pecyn cargo;
  • Mae'r casglwr yn darparu traean lefel cefnogaeth ar gyfer llwyfannau targed aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc targedau, armv7-unknown-linux -gnueabi, armv7-anhysbys-linux-musleabi, hecsagon-anhysbys-linux-musl a riscv32i-anhysbys-none-elf. Mae'r drydedd lefel yn cynnwys cymorth sylfaenol, ond heb brofi awtomataidd a chyhoeddi adeiladau swyddogol.

Ffynhonnell: opennet.ru

Ychwanegu sylw