Rhyddhau'r iaith raglennu Rust 1.75 a Unikernel Hermit 0.6.7

Mae rhyddhau iaith raglennu pwrpas cyffredinol Rust 1.75, 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:

  • Ychwanegwyd y gallu i ddefnyddio “async fn” a'r nodiant “->impl Trait” mewn nodweddion preifat. Er enghraifft, gan ddefnyddio “->impl Trait” gallwch ysgrifennu dull nodwedd sy'n dychwelyd iterator: trait Container { fn items(&self) -> impl Iterator; } impl Cynhwysydd ar gyfer MyContainer { fn items(&self) -> impl Iterator { self.items.iter().cloned() } }

    Gallwch hefyd greu nodweddion gan ddefnyddio "async fn": nodwedd HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // yn cael ei ehangu i: // fn fetch(&self, url: Url) -> impl Future; }

  • Ychwanegwyd API ar gyfer cyfrifo gwrthbwyso beit mewn perthynas ag awgrymiadau. Wrth weithio gydag awgrymiadau noeth (“*const T” a “*mut T”), efallai y bydd angen gweithrediadau i ychwanegu gwrthbwyso at y pwyntydd. Yn flaenorol, ar gyfer hyn roedd yn bosibl defnyddio lluniad fel "::add(1)", gan ychwanegu nifer y beitau sy'n cyfateb i faint "size_of::()". Mae'r API newydd yn symleiddio'r gweithrediad hwn ac yn ei gwneud hi'n bosibl trin gwrthbwyso beit heb fwrw'r mathau yn gyntaf i "* const u8" neu "* mut u8".
    • pwyntydd::beit_add
    • pwyntydd::byte_offset
    • pwyntydd::byte_offset_from
    • pwyntydd::byte_sub
    • pwyntydd:: lapio_byte_add
    • pwyntydd:: lapio_byte_offset
    • pwyntydd:: lapio_byte_sub
  • Gwaith parhaus i wella perfformiad y casglwr rustc. Ychwanegwyd yr optimizer BOLT, sy'n rhedeg yn y cam ôl-ddolen ac yn defnyddio gwybodaeth o broffil gweithredu a baratowyd ymlaen llaw. Mae defnyddio BOLT yn eich galluogi i gyflymu gweithrediad y casglwr tua 2% trwy newid cynllun cod y llyfrgell librustc_driver.so ar gyfer defnydd mwy effeithlon o storfa'r prosesydd.

    Yn cynnwys adeiladu'r casglwr rustc gyda'r opsiwn "-Ccodegen-units=1" i wella ansawdd optimeiddio yn LLVM. Mae'r profion a gynhaliwyd yn dangos cynnydd mewn perfformiad yn achos yr adeilad “-Ccodegen-units=1” tua 1.5%. Mae'r optimeiddiadau ychwanegol yn cael eu galluogi yn ddiofyn ar gyfer y platfform x86_64-unknown-linux-gnu yn unig.

    Profwyd yr optimeiddiadau a grybwyllwyd yn flaenorol gan Google i leihau amser adeiladu cydrannau platfform Android a ysgrifennwyd yn Rust. Roedd defnyddio “-C codegen-units=1” wrth adeiladu Android yn ein galluogi i leihau maint y pecyn cymorth 5.5% a chynyddu ei berfformiad 1.8%, tra bod amser adeiladu’r pecyn cymorth ei hun bron wedi dyblu.

    Trwy alluogi casglu sbwriel amser cyswllt (“--gc-sections”) daeth y cynnydd mewn perfformiad hyd at 1.9%, gan alluogi optimeiddio amser cyswllt (LTO) hyd at 7.7%, a optimeiddiadau ar sail proffil (PGO) hyd at 19.8%. Yn y rownd derfynol, cymhwyswyd optimeiddiadau gan ddefnyddio cyfleustodau BOLT, a ganiataodd y cynnydd mewn cyflymder adeiladu i 24.7%, ond cynyddodd maint y pecyn cymorth 10.9%.

    Rhyddhau'r iaith raglennu Rust 1.75 a Unikernel Hermit 0.6.7

  • Mae cyfran newydd o'r API wedi'i symud i'r categori stabl, gan gynnwys dulliau a gweithrediad nodweddion wedi'u sefydlogi:
    • Atomig*:: o_ptr
    • Amseroedd Ffeil
    • FfeilTimesExt
    • Ffeil:: set_modified
    • Ffeil::set_times
    • IPAddr::i_canonical
    • Ipv6Addr::i_canonical
    • Opsiwn:: as_slice
    • Opsiwn:: as_mut_slice
    • pwyntydd::beit_add
    • pwyntydd::byte_offset
    • pwyntydd::byte_offset_from
    • pwyntydd::byte_sub
    • pwyntydd:: lapio_byte_add
    • pwyntydd:: lapio_byte_offset
    • pwyntydd:: lapio_byte_sub
  • Defnyddir y nodwedd “const”, sy'n pennu'r posibilrwydd o'i ddefnyddio mewn unrhyw gyd-destun yn lle cysonion, yn y swyddogaethau:
    • Ipv6Addr::i_ipv4_mapped
    • EfallaiUninit:: rhagdybio_init_read
    • EfallaiUninit::zeroed
    • mem::gwahaniaethwr
    • mem::zeroed
  • Mae'r drydedd lefel o gefnogaeth wedi'i rhoi ar waith ar gyfer y llwyfannau csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd a mipsel-unknown-netbsd. Mae'r drydedd lefel yn cynnwys cefnogaeth sylfaenol, ond heb brofi awtomataidd, cyhoeddi adeiladau swyddogol, na gwirio a ellir adeiladu'r cod.

Yn ogystal, gallwn nodi fersiwn newydd o'r prosiect Hermit, sy'n datblygu cnewyllyn arbenigol (unikernel), wedi'i ysgrifennu yn yr iaith Rust, gan ddarparu offer ar gyfer adeiladu cymwysiadau hunangynhwysol a all redeg ar ben hypervisor neu galedwedd noeth heb haenau ychwanegol. a heb system weithredu. Pan gaiff ei adeiladu, mae'r cymhwysiad wedi'i gysylltu'n statig â llyfrgell, sy'n gweithredu'r holl swyddogaethau angenrheidiol yn annibynnol, heb fod yn gysylltiedig â chnewyllyn yr AO a llyfrgelloedd system. Mae cod y prosiect yn cael ei ddosbarthu o dan drwyddedau Apache 2.0 a MIT. Cefnogir Cynulliad ar gyfer gweithredu ar ei ben ei hun o geisiadau a ysgrifennwyd yn Rust, Go, Fortran, C a C++. Mae'r prosiect hefyd yn datblygu ei lwythwr cychwyn ei hun sy'n eich galluogi i lansio Hermit gan ddefnyddio QEMU a KVM.

Ffynhonnell: opennet.ru

Ychwanegu sylw