Rust 1.58 Rilaxx tal-Lingwa ta' Programmazzjoni

Ġie ppubblikat ir-rilaxx tal-lingwa ta 'programmar għal skopijiet ġenerali Rust 1.58, imwaqqfa mill-proġett Mozilla, iżda issa żviluppat taħt l-awspiċi tal-organizzazzjoni indipendenti mingħajr skop ta' qligħ Rust Foundation. Il-lingwa tiffoka fuq is-sigurtà tal-memorja, tipprovdi ġestjoni awtomatika tal-memorja, u tipprovdi l-mezzi biex tikseb paralleliżmu għoli tal-kompitu mingħajr ma tuża kollettur taż-żibel jew runtime (runtime huwa mnaqqas għal inizjalizzazzjoni bażika u manutenzjoni tal-librerija standard).

Il-ġestjoni awtomatika tal-memorja ta 'Rut telimina l-iżbalji meta timmanipula pointers u tipproteġi kontra problemi li jirriżultaw minn manipulazzjoni tal-memorja ta' livell baxx, bħall-aċċess għal reġjun tal-memorja wara li jkun ġie meħlus, dereferences null pointer, buffer overruns, eċċ. Biex iqassam il-libreriji, jiżgura l-assemblaġġ u jimmaniġġja d-dipendenzi, il-proġett qed jiżviluppa l-maniġer tal-pakkett tat-Tagħbija. Ir-repożitorju crates.io huwa appoġġjat għall-hosting tal-libreriji.

Innovazzjonijiet ewlenin:

  • Fil-blokok tal-ifformattjar tal-linja, minbarra l-abbiltà li qabel kienet disponibbli li tissostitwixxi varjabbli elenkati b'mod espliċitu wara linja b'numru u isem, il-kapaċità li tissostitwixxi identifikaturi arbitrarji billi żżid l-espressjoni "{identifikatur}" mal-linja hija implimentata. Per eżempju: // Kostruzzjonijiet appoġġjati qabel: println!("Hello, {}!", get_person()); println!("Hello, {0}!", get_person()); println!("Hello, {persuna}!", person = get_person()); // issa tista' tispeċifika let person = get_person(); println!("Hello, {persuna}!");

    L-identifikaturi jistgħu wkoll jiġu speċifikati direttament fl-għażliet tal-ifformattjar. let (wisa ', preċiżjoni) = get_format (); għal (isem, punteġġ) f'get_scores() { println!("{isem}: {score:width$.precision$}"); }

    Is-sostituzzjoni l-ġdida taħdem fil-makro kollha li jappoġġaw id-definizzjoni tal-format ta 'string, bl-eċċezzjoni tal-"makro!" fil-verżjonijiet tal-2015 u l-2018 tal-lingwa Rust, li fihom il-paniku!("{ident}") huwa ttrattat bħala string regolari (f'Rut 2021 is-sostituzzjoni taħdem).

  • L-imġiba tal-istruttura tal-kmand std::process:: fuq il-pjattaforma tal-Windows ġiet mibdula sabiex meta tesegwixxi kmandi, għal raġunijiet ta' sigurtà, ma tibqax tfittex fajls eżekutibbli fid-direttorju attwali. Id-direttorju attwali huwa eskluż minħabba li jista' jintuża biex jesegwixxi kodiċi malizzjuż jekk il-programmi jitmexxew f'direttorji mhux affidabbli (CVE-2021-3013). Il-loġika ta 'skoperta eżekutibbli l-ġdida tinvolvi t-tiftix fid-direttorji Rust, id-direttorju tal-applikazzjoni, id-direttorju tas-sistema Windows, u d-direttorji speċifikati fil-varjabbli tal-ambjent PATH.
  • Il-librerija standard espandiet in-numru ta 'funzjonijiet immarkati "#[must_use]" biex toħroġ twissija jekk il-valur tar-ritorn jiġi injorat, li jgħin biex jiġu identifikati żbalji kkawżati billi wieħed jassumi li funzjoni se tbiddel il-valuri aktar milli tirritorna valur ġdid.
  • Porzjon ġdid tal-API ġie mċaqlaq għall-kategorija ta 'stabbli, inklużi l-metodi u l-implimentazzjonijiet tal-karatteristiċi ġew stabbilizzati:
    • Metadata::is_symlink
    • Path::is_symlink
    • {integer}::saturating_div
    • Option::unwrap_unchecked
    • Riżultat::unwrap_unchecked
    • Riżultat::unwrap_err_unchecked
  • L-attribut "const", li jiddetermina l-possibbiltà li jintuża fi kwalunkwe kuntest minflok kostanti, jintuża fil-funzjonijiet:
    • Tul::ġdid
    • Duration::checked_add
    • Duration::saturating_add
    • Duration::checked_sub
    • Duration::saturating_sub
    • Duration::checked_mul
    • Duration::saturating_mul
    • Duration::checked_div
  • Dereferencing permess ta' "*const T" pointers f'kuntesti "const".
  • Fil-maniġer tal-pakkett tal-merkanzija, il-qasam rust_version ġie miżjud mal-metadata tal-pakkett, u l-għażla "--message-format" ġiet miżjuda mal-kmand "install tal-merkanzija".
  • Il-kompilatur jimplimenta appoġġ għall-mekkaniżmu ta 'protezzjoni CFI (Integrità tal-Fluss ta' Kontroll), li jżid kontrolli qabel kull sejħa indiretta biex jiskopri xi forom ta 'mġieba mhux definita li tista' potenzjalment twassal għal ksur tal-ordni ta 'eżekuzzjoni normali (fluss ta' kontroll) bħala riżultat tal- użu ta 'exploits li jibdlu pointers maħżuna fil-memorja fuq funzjonijiet.
  • Il-kompilatur żied appoġġ għall-verżjonijiet 5 u 6 tal-format ta 'tqabbil tal-kopertura LLVM, użat biex jevalwa l-kopertura tal-kodiċi waqt l-ittestjar.
  • Fil-kompilatur, ir-rekwiżiti għall-verżjoni minima ta 'LLVM huma mgħollija għal LLVM 12.
  • It-tielet livell ta 'appoġġ għall-pjattaforma x86_64-unknown-none ġie implimentat. It-tielet livell jinvolvi appoġġ bażiku, iżda mingħajr ittestjar awtomatizzat, pubblikazzjoni ta 'bini uffiċjali, jew verifika jekk il-kodiċi jistax jinbena.

Barra minn hekk, nistgħu ninnotaw il-pubblikazzjoni minn Microsoft tar-rilaxx tal-libreriji Rust għall-Windows 0.30, li jippermettulek tuża l-lingwa Rust biex tiżviluppa applikazzjonijiet għall-OS Windows. Is-sett jinkludi żewġ pakketti ċestuni (windows u windows-sys), li permezz tagħhom tista 'taċċessa l-API Win fil-programmi Rust. Il-kodiċi għall-appoġġ tal-API huwa ġġenerat b'mod dinamiku minn metadejta li tiddeskrivi l-API, li tippermettilek timplimenta appoġġ mhux biss għal sejħiet Win API eżistenti, iżda għal sejħiet li se jidhru fil-futur. Il-verżjoni l-ġdida żżid l-appoġġ għall-pjattaforma fil-mira UWP (Universal Windows Platform) u timplimenta t-tipi Handle u Debug.

Sors: opennet.ru

Żid kumment