Rust 1.64 Programlingvo-Eldono

La eldono de la ĝeneraluzebla programlingvo Rust 1.64, fondita de la projekto Mozilla, sed nun disvolvita sub la aŭspicioj de la sendependa neprofitcela organizaĵo Rust Foundation, estis publikigita. La lingvo temigas memorsekurecon kaj disponigas la rimedojn por atingi altan laborparalelecon evitante la uzon de rubkolektilo kaj rultempo (rultempo estas reduktita al baza inicialigo kaj prizorgado de la norma biblioteko).

La memormanipulaj metodoj de Rust savas la ellaboranton de eraroj dum manipulado de montriloj kaj protektas kontraŭ problemoj kiuj ekestas pro malaltnivela memortraktado, kiel ekzemple alirado de memorareo post kiam ĝi estis liberigita, dereferencing nulmontriloj, bufrotranspaso, ktp. Por distribui bibliotekojn, provizi konstruaĵojn kaj administri dependecojn, la projekto disvolvas la Cargo-pakaĵmanaĝeron. La deponejo crates.io estas subtenata por gastigado de bibliotekoj.

Memorsekureco estas disponigita en Rust ĉe kompiltempo tra referenckontrolado, konservante trakon de objektoposedo, konservante trakon de objektovivdaŭroj (kampoj), kaj taksante la ĝustecon de memoraliro dum kodekzekuto. Rusto ankaŭ provizas protekton kontraŭ entjeraj superfluoj, postulas devigan inicialigon de variaj valoroj antaŭ uzo, pli bone pritraktas erarojn en la norma biblioteko, aplikas la koncepton de neŝanĝeblaj referencoj kaj variabloj defaŭlte, ofertas fortan senmovan tajpadon por minimumigi logikajn erarojn.

Ĉefaj novigoj:

  • La postuloj por la Linukso-medio en la kompililo, la Cargo-pakaĵmanaĝero kaj la libstd-norma biblioteko estis pliigitaj - la minimumaj postuloj por Glibc estis levitaj de versio 2.11 ĝis 2.17, kaj la Linukso-kerno de versio 2.6.32 ĝis 3.2. La limigoj ankaŭ validas por Rust-aplikaĵaj ekzekutaĵoj konstruitaj kun libstd. La distribuaj iloj RHEL 7, SLES 12-SP5, Debian 8 kaj Ubuntu 14.04 plenumas la novajn postulojn. Subteno por RHEL 6, SLES 11-SP4, Debian 7 kaj Ubuntu 12.04 estos nuligita. Uzantoj, kiuj uzas Rust-konstruitajn ruleblajn rulaĵojn en medioj kun pli malnova Linukso-kerno, estas instigitaj ĝisdatigi siajn sistemojn, resti sur pli malnovaj eldonoj de la kompililo aŭ konservi sian propran libstd-forkon kun tavoloj por konservi kongruecon.

    Inter la kialoj por ĉesigi subtenon por pli malnovaj Linuksaj sistemoj estas limigitaj rimedoj por daŭre konservi kongruon kun pli malnovaj medioj. Subteno por heredaĵa Glibc postulas la uzon de heredaĵaj iloj dum kontrolado en kontinua integriga sistemo, spite al kreskantaj versiopostuloj en LLVM kaj inter-kompilaj utilecoj. La pliiĝo en kernaj versiopostuloj ŝuldiĝas al la kapablo uzi novajn sistemvokojn en libstd sen la bezono konservi tavolojn por certigi kongruecon kun pli malnovaj kernoj.

  • La trajto IntoFuture estis stabiligita, kiu similas IntoIterator, sed diferencas de ĉi-lasta uzante ".await" anstataŭe de "por ... en ..." bukloj. Se kombinita kun IntoFuture, la ŝlosilvorto ".await" povas atendi ne nur Estontecan trajton, sed ankaŭ ajnajn aliajn tipojn, kiuj povas esti konvertitaj al Estonteco.
  • La rust-analizilo estas inkluzivita en la kolekto de utilecoj provizitaj per Rust-eldonoj. La ilo ankaŭ haveblas por instalado uzante rustup (rustup-komponento aldoni rust-analizilon).
  • La administranto de Cargo-pakaĵo inkluzivas laborspacan heredon por forigi duobligon de komunaj kampaj valoroj inter pakaĵoj, kiel Rust-versioj kaj deponaj URLoj. Ankaŭ aldonis subtenon por konstruado por pluraj celplatformoj samtempe (vi nun povas specifi pli ol unu parametron en la opcio "--celo").
  • Nova parto de la API estis movita al la kategorio de stalo, inkluzive de la metodoj kaj efektivigoj de trajtoj estis stabiligitaj:
    • estonteco::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*::superfluaj_abs
    • num::NonZeroI*::saturating_abs
    • num::NonZeroI*::unsigned_abs
    • num::NonZeroI*::wrapping_abs
    • num::NonZeroU*::checked_add
    • num::NonZeroU*::kontrolita_sekva_povo_de_du
    • num::NonZeroU*::saturating_add
    • os::unix::process::CommandExt::process_group
    • os::windows::fs::FileTypeExt::is_symlink_dir
    • os::windows::fs::FileTypeExt::is_symlink_file
  • C-kongruaj tipoj, antaŭe stabiligitaj en la std::ffi-modulo, estis aldonitaj al la kerno kaj la alloc-biblioteko:
    • core::ffi::CStr
    • core::ffi::FromBytesWithNulError
    • alloc::ffi::CString
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulError
  • C-tipoj antaŭe stabiligitaj en la std::os::raw modulo estis aldonitaj al la kerno::ffi kaj std::ffi-moduloj (ekzemple, c_uint kaj c_ulong tipoj estis proponitaj por la uint kaj ulong C tipoj):
    • ffi::c_char
    • ffi::c_duobla
    • ffi::c_float
    • ffi::c_int
    • ffi::c_long
    • ffi::c_longlong
    • ffi::c_schar
    • ffi::c_short
    • ffi::c_uchar
    • ffi::c_uint
    • ffi::c_ulong
    • ffi::c_ulonglong
    • ffi::c_ushort
  • Malaltnivelaj prizorgantoj estis stabiligitaj por uzo kun la Poll-mekanismo (en la estonteco estas planite disponigi simpligitan API kiu ne postulas la uzon de malaltnivelaj strukturoj kiel ekzemple Pull and Pin):

    • estonteco::poll_fn
    • tasko::preta!
  • La atributo "const", kiu determinas la eblecon uzi ĝin en iu ajn kunteksto anstataŭ konstantoj, estas uzata en la funkcio slice::from_raw_parts.
  • Por pli kompakte stoki datumojn, la memoraranĝo de la strukturoj Ipv4Addr, Ipv6Addr, SocketAddrV4 kaj SocketAddrV6 estis ŝanĝita. Povas esti kongrua problemo kun unuopaj pakaĵoj, kiuj uzas std::mem::transmute por malaltnivela manipulado de strukturoj.
  • La konstruo de la rusta kompililo por la Vindoza platformo uzas PGO-optimumigojn (profil-gviditan optimumigo), kio ebligis pliigi la rendimenton de koda kompilo je 10-20%.
  • La kompililo efektivigis novan averton pri neuzataj kampoj en certaj strukturoj.

Aldone, vi povas noti la statusraporton pri la evoluo de alternativa efektivigo de la Rust-lingva kompililo, preparita de la projekto gccrs (GCC Rust) kaj aprobita por inkludo en la GCC. Post integriĝo de la fasado, la normaj GCC-iloj povas esti uzataj por kompili programojn en la Rust-lingvo sen la bezono instali la rustc-kompililon, konstruitan per LLVM-evoluoj. Dum evoluo estas survoje, kaj krom ajnaj neantaŭviditaj problemoj, la Rust-fasaĵo estos integrita en la GCC 13-eldono planita por majo venontjare. La GCC 13-efektivigo de Rust estos beta-versio, ankoraŭ ne ebligita defaŭlte.

fonto: opennet.ru

Aldoni komenton