Rust 1.64 Programming Language Release

De algemiene programmeertaal Rust 1.64, oprjochte troch it Mozilla-projekt mar no ûntwikkele ûnder auspysjes fan de ûnôfhinklike non-profit organisaasje Rust Foundation, is frijjûn. De taal rjochtet him op ûnthâld feilichheid en jout de middels te berikken hege baan parallelism wylst it foarkommen fan it brûken fan in garbage collector en runtime (runtime wurdt redusearre ta basis inisjalisaasje en ûnderhâld fan de standert bibleteek).

De metoaden foar ûnthâldbehanneling fan Rust besparje de ûntwikkelder fan flaters by it manipulearjen fan oanwizers en beskermje tsjin problemen dy't ûntsteane troch ûnthâldôfhanneling op leech nivo, lykas tagong krije ta in ûnthâldgebiet nei't it befrijd is, it ferwizen fan nul-oanwizers, buffer-oerrin, ensfh. Om bibleteken te fersprieden, builds te leverjen en ôfhinklikens te behearjen, ûntwikkelet it projekt de Cargo-pakketbehearder. It crates.io repository wurdt stipe foar hosting fan bibleteken.

Unthâld feilichheid wurdt foarsjoen yn Rust op it gearstallen tiid troch referinsje kontrôle, byhâlden fan foarwerp eigendom, byhâlden fan foarwerp lifetimes (omfang), en beoardielje de korrektheid fan ûnthâld tagong by koade útfiering. Rust leveret ek beskerming tsjin oerstreamingen fan heule getal, fereasket ferplichte inisjalisaasje fan fariabele wearden foar gebrûk, behannelet flaters better yn 'e standertbibleteek, tapast standert it konsept fan ûnferoarlike referinsjes en fariabelen, biedt sterke statyske typen om logyske flaters te minimalisearjen.

Wichtichste ynnovaasjes:

  • De easken foar de Linux-omjouwing yn 'e kompilator, de Cargo-pakketbehearder en de libstd-standertbibleteek binne ferhege - de minimale easken foar Glibc binne ferhege fan ferzje 2.11 nei 2.17, en de Linux-kernel fan ferzje 2.6.32 nei 3.2. De beheiningen jilde ek foar útfierbere Rust-applikaasjes boud mei libstd. De distribúsjekits RHEL 7, SLES 12-SP5, Debian 8 en Ubuntu 14.04 foldogge oan de nije easken. Stipe foar RHEL 6, SLES 11-SP4, Debian 7 en Ubuntu 12.04 sil wurde beëinige. Brûkers dy't Rust-boude útfierbere bestannen brûke yn omjouwings mei in âldere Linux-kernel wurde oanmoedige om har systemen te ferbetterjen, op âldere releases fan 'e kompilator te bliuwen, of har eigen libstd-gabel te behâlden mei lagen om kompatibiliteit te behâlden.

    Under de redenen foar it beëinigjen fan stipe foar âldere Linux-systemen binne beheinde boarnen om troch te gean mei it behâld fan kompatibiliteit mei âldere omjouwings. Stipe foar legacy Glibc fereasket it gebrûk fan legacy-ark by it kontrolearjen fan in trochgeande yntegraasjesysteem, yn it gesicht fan tanimmende ferzjeeasken yn LLVM en cross-compilation-helpprogramma's. De ferheging fan easken foar kernelferzje is te tankjen oan de mooglikheid om nije systeemoproppen yn libstd te brûken sûnder de needsaak om lagen te behâlden om kompatibiliteit te garandearjen mei âldere kernels.

  • De IntoFuture-eigenskip is stabilisearre, dy't liket op IntoIterator, mar ferskilt fan de lêste troch it brûken fan ".await" ynstee fan "foar ... yn ..."-lussen. As kombinearre mei IntoFuture, kin it kaaiwurd ".await" net allinich in Future-eigenskip ferwachtsje, mar ek alle oare soarten dy't kinne wurde omboud ta in Future.
  • It hulpprogramma foar rustanalyzer is opnaam yn 'e kolleksje fan nutsfoarsjenningen dy't mei Rust-releases wurde levere. It hulpprogramma is ek beskikber foar ynstallaasje mei help fan rustup (rustup-komponint tafoegje rust-analyzer).
  • De Cargo-pakketbehearder omfettet wurkromte-erfenis om duplikaasje fan mienskiplike fjildwearden tusken pakketten te eliminearjen, lykas Rust-ferzjes en URL's fan repository. Ek tafoege stipe foar it bouwen foar ferskate doelplatfoarms tagelyk (jo kinne no mear as ien parameter opjaan yn 'e opsje "--target").
  • In nij diel fan 'e API is ferpleatst nei de kategory stabile, ynklusyf de metoaden en ymplemintaasjes fan eigenskippen binne stabilisearre:
    • takomst :: IntoFuture
    • num::NonZero*::checked_mul
    • num::NonZero*::checked_pow
    • num::NonZero*::saturating_mul
    • num::NonZero*::saturating_pow
    • num::NonZeroI*::abs
    • num::NonZeroI*::checked_abs
    • num::NonZeroI*::overflowing_abs
    • num::NonZeroI*::saturating_abs
    • num::NonZeroI*::unsigned_abs
    • num::NonZeroI*::wrapping_abs
    • num::NonZeroU*::checked_add
    • num::NonZeroU*::checked_next_power_of_two
    • num::NonZeroU*::saturating_add
    • os::unix::proces::CommandExt::proces_group
    • os::windows::fs::FileTypeExt::is_symlink_dir
    • os::windows::fs::FileTypeExt::is_symlink_file
  • C-kompatibele typen, earder stabilisearre yn 'e std :: ffi-module, binne tafoege oan 'e kearn en de alloc-bibleteek:
    • kearn ::ffi ::CStr
    • core::ffi::FromBytesWithNulError
    • alloc::ffi::CString
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulError
  • C-typen dy't earder stabilisearre binne yn 'e std::os::raw-module binne tafoege oan 'e kearn::ffi- en std::ffi-modules (bygelyks binne c_uint- en c_ulong-typen foarsteld foar de uint- en ulong C-typen):
    • ffi ::c_char
    • ffi ::c_dûbel
    • ffi::c_float
    • ffi::c_int
    • ffi ::c_lang
    • ffi::c_lang
    • ffi::c_schar
    • ffi::c_koart
    • ffi ::c_uchar
    • ffi::c_uint
    • ffi ::c_ulong
    • ffi ::c_ulonglong
    • ffi::c_short
  • Handlers op leech nivo binne stabilisearre foar gebrûk mei it Poll-meganisme (yn 'e takomst is it plan om in ferienfâldige API te leverjen dy't it gebrûk fan struktueren op leech nivo lykas Pull and Pin net fereasket):

    • takomst :: poll_fn
    • taak :: klear!
  • It attribút "const", dat de mooglikheid bepaalt om it yn elke kontekst te brûken ynstee fan konstanten, wurdt brûkt yn 'e funksje slice :: from_raw_parts.
  • Om gegevens kompakter op te slaan, is de ûnthâldopmaak fan de Ipv4Addr, Ipv6Addr, SocketAddrV4 en SocketAddrV6 struktueren feroare. D'r kin in kompatibiliteitsprobleem wêze mei pakketten mei ien krat dy't std :: mem :: transmute brûke foar manipulaasje op leech nivo fan struktueren.
  • De bou fan 'e rustkompilator foar it Windows-platfoarm brûkt PGO-optimisaasjes (profyl-begeliede optimisaasje), dy't it mooglik makken om koade-kompilaasjeprestaasjes te ferheegjen mei 10-20%.
  • De gearstaller hat in nije warskôging ymplementearre oer net brûkte fjilden yn bepaalde struktueren.

Derneist kinne jo it statusrapport notearje oer de ûntwikkeling fan in alternative ymplemintaasje fan 'e Rust-taalkompiler, taret troch it gccrs-projekt (GCC Rust) en goedkard foar opname yn' e GCC. Nei it yntegrearjen fan 'e frontend kinne de standert GCC-ark brûkt wurde om programma's yn' e Rust-taal te kompilearjen sûnder de needsaak om de rustc-kompiler te ynstallearjen, boud mei LLVM-ûntwikkelingen. Salang't de ûntwikkeling op koers is, en sûnder ûnfoarsjoene problemen, sil de Rust-frontend yntegreare wurde yn 'e GCC 13-release pland foar maaie takom jier. De GCC 13-ymplemintaasje fan Rust sil yn beta-status wêze, noch net standert ynskeakele.

Boarne: opennet.ru

Add a comment