Rust 1.65 Programlingvo-Eldono

La eldono de la ĝeneraluzebla programlingvo Rust 1.65, 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:

  • Aldonita subteno por senmarkaj rilataj tipoj (GAT, Generic Associated Types), kiuj ebligas krei tipajn kaŝnomojn asociitajn kun alia tipo kaj permesas vin asocii tipkonstruktilojn kun trajtoj. trajto Foo { tipo Bar; }
  • La esprimo "let ... else" estis efektivigita, permesante al vi kontroli la ŝablonon kongruan kondiĉon rekte ene de la "let" esprimo kaj efektivigi arbitran kodon se la ŝablono ne kongruas. let Ok (kalkulo) = u64::from_str(count_str) else { panic!("Ne povas analizi entjeron: '{count_str}'"); };
  • Permesu la uzon de rompo-deklaro por eliri nomitajn blokojn trofrue, uzante la bloknomon (etikedo) por identigi la blokon finigotan. lasu rezulton = 'bloki: { faru_(); if condition_ne_met() { break ‘bloko 1; } faru_sekvan_aferon(); if condition_ne_met() { break ‘bloko 2; } faru_lasta_aferon(); 3};
  • Por Linukso, la kapablo aparte konservi sencimigan informon (split-debuginfo), antaŭe disponebla nur por la macOS-platformo, estis aldonita. Kiam oni specifigas la opcion "-Csplit-debuginfo=unpacked", elbuginfo-datumoj en DWARF-formato estos konservitaj en plurajn apartajn objektodosierojn kun ".dwo" etendo. Specifante "-Csplit-debuginfo=packed" kreos ununuran pakaĵon en ".dwp" formato kiu inkluzivas ĉiujn sencimigajn datumojn por la projekto. Por integri debuginfo rekte en la sekcion .debug_* de ELF-objektoj, vi povas uzi la opcion "-Csplit-debuginfo=off".
  • Nova parto de la API estis movita al la kategorio de stalo, inkluzive de la metodoj kaj efektivigoj de trajtoj estis stabiligitaj:
    • std::backtrace::Backtrace
    • Bound::as_ref
    • std::io::read_to_string
    • ::cast_mut
    • ::cast_const
  • La atributo “const”, kiu determinas la eblecon uzi ĝin en iu ajn kunteksto anstataŭ konstantoj, estas uzata en la funkcioj ::offset_from kaj ::offset_from
  • Kiel parto de la fina etapo de translokigo de la efektivigo de la protokolo LSP (Language Server Protocol) al rust-analizilo, la malmoderna efektivigo de Rust Language Server (RLS) estis anstataŭigita per ĝermservilo kiu eligas averton kun sugesto ŝanĝi al. uzante rust-analizilon.
  • Dum kompilo, subteno por enlinia deplojo de MIR-intera kodo estas ebligita, kiu plirapidigas la kompilon de tipaj kestaj pakaĵoj je 3-10%.
  • Por akceli planitajn konstruojn, la Cargo-pakaĵmanaĝero disponigas ordigon de laboroj atendantaj ekzekuton en la atendovico.

Aldone, vi povas noti la intervjuon pri la uzo de la Rust-lingvo ĉe Volvo por evoluigi komponentojn de aŭtomobilaj informsistemoj. Ne estas planoj reverki ekzistantan kaj provitan kodon en Rust, sed por nova kodo, Rust estas unu el la preferataj elektoj por plibonigi kvaliton je pli malaltaj kostoj. Laborgrupoj rilataj al la uzo de la Rust-lingvo ankaŭ estis kreitaj en la aŭtomobilaj asocioj AUTOSAR (AUTomotive Open System ARchitecture) kaj SAE (Society of Automotive Engineers).

Krome, David Kleidermacher, la vicprezidanto de inĝenieristiko de Google, parolis pri la traduko de la kodo uzata en la Android-platformo por administri ĉifrajn ŝlosilojn en Rust, kaj ankaŭ pri la uzo de Rust en la efektivigo de la protokolo DNS super HTTPS en la stako. por UWB-fritoj (Ultra-Wideband) kaj en la virtualiga kadro (Android Virtualization Framework) asociita kun la Tensor G2-peceto. Novaj stakoj por Bluetooth kaj Wi-Fi, reverkitaj en Rust, ankaŭ estas evoluigitaj por Android. La ĝenerala strategio estas iom post iom plifortigi sekurecon, unue konvertante la plej vundeblajn kaj esencajn programajn komponantojn al Rust, kaj poste ekspansiiĝante al aliaj rilataj subsistemoj. Pasintjare, la Rust-lingvo estis inkluzivita en la listo de lingvoj permesitaj por disvolvi la Android-platformon.

fonto: opennet.ru

Aldoni komenton