Dalja e Rust 1.81. Pengesat në avancimin e Rust në bërthamën Linux

ËshtĂ« publikuar versioni 1.81 i gjuhĂ«s sĂ« programimit tĂ« pĂ«rgjithshĂ«m Rust, fillimisht bazuar nĂ« projektin Mozilla, tani pĂ«rkrahur nga organizata jofitimprurĂ«se Rust Foundation. Gjuha fokusohet nĂ« sigurinĂ« e punĂ«s me memorien dhe ofron mjete pĂ«r tĂ« arritur paralelizĂ«m tĂ« lartĂ« nĂ« realizimin e detyrave, duke vepruar pa nevojĂ«n pĂ«r njĂ« mbledhĂ«s plehrash dhe runtime (runtime reduktohet nĂ« inicializimin e bazĂ«s dhe mbĂ«shtetje pĂ«r bibliotekĂ«n standarde).

Metodat e punës me kujtesën në Rust e çlirojnë zhvilluesin nga gabimet gjatë manipulimit me treguesit dhe e mbrojnë atë nga problemet që lindin për shkak të punës me kujtesën në nivel të ulët, si qasja në një zonë kujtese pas çlirimit të saj, dereferencimi i treguesve null, dalja jashtë kufijve të buffers etj. Për shpërndarjen e bibliothekave, sigurimin e ndërtimit dhe menaxhimin e varësive, projekti zhvillohet me menaxherin e paketave Cargo. Për mbështetje të bibliothekave, ekziston një repository crates.io.

Puna e sigurt me kujtesën sigurohet në Rust gjatë kompilimit përmes verifikimit të referencave, ndjekjes së pronësisë së objekteve, llogaritjes së kohëzgjatjes së jetës së objekteve (fushave të dukshmërisë) dhe vlerësimit të saktësisë së qasjes në kujtesë gjatë ekzekutimit të kodit. Rust gjithashtu ofron mjete për mbrojtjen nga tejkalimet e numrave të plotë, kërkon inicializimin e detyrueshëm të vlerave të variablave para përdorimit, trajton më mirë gabimet në bibliotekën standarde, aplikon konceptin e referencave dhe variablave të pandryshueshëm (immutable) si standard dhe ofron tipizimin e fortë statik për të minimizuar gabimet logjike.

Novitetet kryesore:

  • ËshtĂ« stabilizuar tipazhi core::error::Error, i cili pĂ«rcakton pĂ«rshkrimet e gabimeve. Ky ndryshim lejon pĂ«rdorimin e njĂ« tipazhi tĂ« vetĂ«m Error nĂ« biblioteka tĂ« ndryshme, pĂ«rveç mjedisit, duke pĂ«rfshirĂ« edhe bibliotekat qĂ« nuk lidhen me bibliotekĂ«n standarde, duke pĂ«rdorur atributin "#![no_std]".
  • Funksionet e qĂ«ndrueshme dhe jo tĂ« qĂ«ndrueshme tĂ« ŃĐŸŃ€Ń‚imi nĂ« bibliotekĂ«n standarde janĂ« pĂ«rkthyer nĂ« pĂ«rdorimin e algoritmeve tĂ« reja, qĂ« demonstrojnĂ« shpejtĂ«si mĂ« tĂ« lartĂ« dhe kohĂ« mĂ« tĂ« shkurtĂ«r kompilimi. NĂ« realizimin e algoritmeve tĂ« reja tĂ« ŃĐŸŃ€Ń‚imi, Ă«shtĂ« siguruar identifikimi i tipazheve tĂ« papĂ«rcaktuar Ord dhe raportimi nĂ« kĂ«to raste tĂ« gabimit (panic) nĂ« vend tĂ« tĂ« dhĂ«nave tĂ« grupuara rastĂ«sisht.
  • NĂ« linter Ă«shtĂ« realizuar njĂ« nivel i ri kontrolli "expect" ("#[expect(lint)]"), duke siguruar qĂ« kontrolli tĂ« realizohet dhe tĂ« japĂ« njĂ« paralajmĂ«rim, nĂ«se kontrolli nuk pĂ«rfundon (pĂ«r shkak tĂ« njĂ« gabimi nĂ« realizim ose ndalimi tĂ« kontrollit). PĂ«r shembull, kur konvertohet baza e kodit pĂ«r tĂ« pĂ«rdorur kontrollin undocumented_unsafe_blocks pĂ«rmes Clippy, mund tĂ« specifikohet "#[expect(clippy::undocumented_unsafe_blocks)]" pĂ«r t'u siguruar qĂ« gjatĂ« kalimit tĂ« gjithĂ« blloqet unsafe do tĂ« dokumentohen. NĂ« Clippy gjithashtu janĂ« realizuar kontrolli clippy::allow_attributes dhe clippy::allow_attributes_without_reason, qĂ« lehtĂ«sojnĂ« zĂ«vendĂ«simin e atributit "#[allow]" me "#[expect(lint)]".
  • ËshtĂ« ofruar mundĂ«sia pĂ«r tĂ« dokumentuar arsyen e zĂ«vendĂ«simit tĂ« niveleve tĂ« kontrollit (lint), qĂ« u jep zhvilluesve tĂ« rinj informacion mbi arsyet e shtimit tĂ« kontrolleve, tĂ« paraqitura si mesazh i kompilatorit. PĂ«r shembull: #![deny(clippy::float_arithmetic, reason = "no hardware float support")]
  • NjĂ« grup i ri API u kalua nĂ« kategorinĂ« e stabilizuar, pĂ«rfshirĂ« stabilizimin e metodave dhe implementimeve tĂ« trait-Ă«ve:
    • core::error
    • hint::assert_unchecked
    • fs::exists
    • AtomicBool::fetch_not
    • Duration::abs_diff
    • IoSlice::advance
    • IoSlice::advance_slices
    • IoSliceMut::advance
    • IoSliceMut::advance_slices
    • PanicHookInfo
    • PanicInfo::message
    • PanicMessage

    Atributi «const», që përcakton mundësinë e përdorimit në çdo kontekst në vend të konstantëve, aplikohet në funksione:

    • char::from_u32_unchecked (funksioni)
    • char::from_u32_unchecked (metoda)
    • CStr::count_bytes
    • CStr::from_ptr

    Tipi std::panic::PanicInfo është rinovuar në std::panic::PanicHookInfo (përdorimi i emrit të vjetër mbetet i ruajtur, por që nga versioni i ardhshëm, përdorimi i tij do të rezultojë në një paralajmërim). megjithatë, core::panic::PanicInfo do të mbetet i njëjtë, por do të zhvillohet si një tip i veçantë. Ndara e tipeve do të lejojë implementimin e metodave të ndryshme, specifike për ekzekutimin në kontekstet snd dhe no_std.

  • PĂ«rfundimi i kalimit nĂ« ABI C-unwind (‘extern «C-unwind»‘), i cili ndryshon nga ABI pa sufiksin ‘-unwind’ (‘extern «C»‘) duke ruajtur sjelljen e sigurt (safe), nĂ«se procesi i ‘unwinding’-ut, i iniciuar nĂ« rast tĂ« njĂ« ndalimi tĂ« tĂ«rĂ«sishĂ«m tĂ« programit ose nĂ« gjenerimin e njĂ« pĂ«rjashtimi nĂ« stilin C++, kalon kufirin e ABI (pĂ«r shembull, kur njĂ« pĂ«rjashtim, i ndodhur nĂ« kodin e njĂ« gjuhe tĂ« programimit, gjatĂ« ‘unwinding’ prek stekĂ«n e lidhur me kodin e njĂ« gjuhe tjetĂ«r programimi). QĂ« nga lĂ«shimi i Rust 1.81, ABI ‘extern «C»‘ aktivizon ndalimin e tĂ«rĂ«sishĂ«m nĂ« rastin e ‘unwinding’-ut tĂ« pa-captuar.
  • DĂ«gjohet niveli i tretĂ« i mbĂ«shtetjes pĂ«r platformat i686-unknown-redox, xtensa-esp32-none-elf, xtensa-esp32s2-none-elf, xtensa-esp32s3-none-elf, xtensa-esp32-espidf, xtensa-esp32s2-espidf, xtensa-esp32s3-espidf. Niveli i tretĂ« nĂ«nkupton mbĂ«shtetje bazike, por pa testim automatized, publikimin e ndĂ«rtimeve zyrtare dhe verifikimin e ndĂ«rtimit tĂ« kodit.
  • DĂ«gjohet niveli i dytĂ« i mbĂ«shtetjes pĂ«r platformat e synuara loongarch64-unknown-linux-musl dhe arm64ec-pc-windows-msvc. Niveli i dytĂ« i mbĂ«shtetjes nĂ«nkupton garancinĂ« e ndĂ«rtimit.
  • PĂ«r sistemet Linux nĂ« platformĂ«n LoongArch Ă«shtĂ« ofruar njĂ« set i plotĂ« mjetesh dhe profilues.
  • Vulnerabiliteti (CVE-2024-43402) nĂ« std::process::Command Ă«shtĂ« eliminuar, shfaqur vetĂ«m nĂ« platformĂ«n Windows dhe eliminon njĂ« rrugĂ« pĂ«r shfrytĂ«zimin e njĂ« vulnerabiliteti tĂ« mĂ«parshĂ«m, BatBadBut, i lidhur me pĂ«rpunimin e karaktereve speciale gjatĂ« thirrjeve tĂ« Command::arg dhe Command::args, tĂ« dizajnuara pĂ«r tĂ« kaluar argumentet direkt nĂ« proces, pa i trajtuar ato nga interpretoni i komandave. NĂ« praktikĂ«, kur ekzekutoheshin skenaret bat- dhe cmd, procesi cmd.exe, me logjikĂ«n e vet pĂ«r ndarjen e argumenteve, ishte aktivizuar. Koncepti i mbrojtjes bazohet nĂ« faktin se Windows i eliminon hapĂ«sirat dhe pikat e para nĂ« rrugĂ«, pra njĂ« skedar me zgjerimin «.bat. .» trajtohet si «.bat».

PĂ«rveç kĂ«saj, mund tĂ« theksohet gjatĂ« largimi i Wedson Almeida Filho nga roli i mbikĂ«qyrĂ«sit tĂ« projektit Rust for Linux, i cili merret me inkorporimin e mjeteve pĂ«r zhvillimin nĂ« gjuhĂ«n Rust nĂ« kernelin Linux. Pas largimit tĂ« Wedson, projekti ka ende dy mbikĂ«qyrĂ«s tĂ« tjerĂ« — Miguel Ojeda, autor dhe zhvillues kryesor i projektit Rust-for-Linux, dhe Alex Gaynor, ish-drejtor i organizatĂ«s Python Software Foundation, i cili Ă«shtĂ« fokusuar nĂ« promovimin e Rust. MbikĂ«qyrĂ«si i larguar, qĂ« u bashkua me projektin 4 vjet mĂ« parĂ«, Ă«shtĂ« punonjĂ«s i kompanisĂ« Microsoft dhe autor i njĂ« drejtuesi eksperimental me implementimin e FS EXT2, tĂ« shkruar nĂ« gjuhĂ«n Rust. KohĂ«t e fundit, puna e Almeida ishte pĂ«rqendruar nĂ« krijimin e mjeteve pĂ«r zhvillimin e sistemeve tĂ« skedave nĂ« gjuhĂ«n Rust. Vitin e kaluar Almeida kontribuoi nĂ« repositorin Rust-for-Linux me 17 komitĂ« (pĂ«r krahasim, Miguel Ojeda ka kontribuar me 53 komitĂ«).

Si arsye për largimin përmendet mungesa e forcës dhe entuziazmit, të cilat dikur ishin të nevojshme për të reaguar ndaj disa absurditeteve joteknike (nontechnical nonsense). Sipas Almeida, zhvilluesit janë të detyruar të shpenzojnë shumë energji në polemika mbi çështje jo thelbësore, që e minojnë një qëllim më të rëndësishëm global. Almeida vazhdon të besojë se e ardhmja e kernelit është përdorimi i gjuhëve që sigurojnë punë të sigurt me memorien, dhe nëse komuniteti i zhvilluesve të Linux nuk e kupton këtë, Linux do të zëvendësohet nga një kernel tjetër, siç ndodhi dikur me Unix.

Përkrahësit e projektit Rust-for-Linux u përballën me nevojën për të përballuar rezistencën nga zhvilluesit e njohur të vetërdhëkës, të cilët nuk shohin nevojën për të mësuar një gjuhë të re. Në letrën e tij të dorëheqjes, Almeida përmend si shembull një diskutim që ndodhi gjatë paraqitjes së tij dhe Kent Overstreet në konferencën "Linux Storage, Filesystem, Memory-Management, and BPF Summit", e cila ishte e dedikuar për përdorimin e Rust për zhvillimin e sistemeve të skedarëve. Aktivitetin e implementimit të Rust e kritikoi Ted Ts'o, autori i sistemeve të skedarëve ext2/ext3/ext4, i cili e krahasoi nismën Rust-for-Linux me përpjekjen për të bërë që të gjithë të pranojnë fenë e Rust.

Në përgjigje të qëllimit të Almeida-s për të krijuar një mbështetje mbi ndërfaqet e sistemit të skedarëve të shkruara në gjuhën C për t'i përdorur ato në kodin e gjuhës Rust, Ted Ts'o theksoi se një mbështetje e tillë do të shkaktonte probleme, pasi çdo ndryshim në ndërfaqet C dhe zhvillimi do të kërkonte ndryshimin e mbështetjes për Rust dhe ai nuk dëshiron të marrë mbi vete përgjegjësi të tepërta për të rregulluar problemet që lindin në kodin Rust dhe për të ndjekur statusin e mbështetjes Rust. Kodi në C vazhdon të zhvillohet dhe nëse ndryshimi i tij prish funksionin e mbështetjes për Rust, kjo do të çonte në prishjen e gjithë sistemeve të skedarëve të lidhura me këtë mbështetje.

Ted gjithashtu beson se nĂ« tĂ« ardhmen e afĂ«rt mbĂ«shtetja pĂ«r Rust do tĂ« mbetet e dorĂ«s sĂ« dytĂ« dhe shfaqja e problemeve nĂ« lidhjet do tĂ« jetĂ« njĂ« dhimbje koke vetĂ«m pĂ«r zhvilluesit e Rust-for-Linux, e jo pĂ«r komunitetin e zhvilluesve tĂ« sistemeve tĂ« skedarĂ«ve nĂ« kernel. ËshtĂ« theksuar se jo tĂ« gjithĂ« zhvilluesit kanĂ« nĂ« plan tĂ« mĂ«sojnĂ« Rust dhe prandaj, pas bĂ«rjes sĂ« ndryshimeve qĂ« ndikojnĂ« nĂ« kodin e tjetĂ«r, ata do tĂ« jenĂ« nĂ« gjendje tĂ« pĂ«rditĂ«sojnĂ« vetĂ«m kodin e varur nĂ« C, por nuk do tĂ« mund tĂ« rregullojnĂ« mbĂ«shtetjet Rust, sepse nuk dinĂ« Rust. NĂ« diskutim u bashkua gjithashtu James Bottomley, i cili mbikĂ«qyr sistemin e nĂ«nkomponentit SCSI, i cili tha se sa mĂ« shumĂ« semantika tĂ« koduar nĂ« mbĂ«shtetje, aq mĂ« tĂ« brishta ato bĂ«hen nĂ« aspektin e ruajtjes sĂ« sinkronizimit.

Ndërkohë, kompania Google, e cila vitin e kaluar e ripërshtati firmware pvmfm në gjuhën Rust, e përdorur në makina virtuale, të cilat drejtohen në platformën Android, ndau përvojën e integrimit gradual të kodit në Rust në firmware ekzistues, fillimisht të shkruar në C ose C++. Tregohet se si mund të rritet ndjeshëm siguria e firmware-z, duke krijuar komponentë zëvendësues identikë në funksionalitet, të shkruar në Rust. Theksi kryesor gjatë implementimit të Rust sugjerohet të vendoset në përdorimin e Rust për kodin e ri dhe për kodin që kryen funksione kritike për sigurinë (p.sh., kodi për përpunimin e të dhënave të jashtme, të marra nga burime të pasigurta). Për integrimin e kodit në Rust dhe C, sugjerohet të përdoren shim, që transletojnë thirrjet midis API-ve në Rust dhe C (API C eksportohet për përdorim në kodin në Rust dhe anasjelltas), që lejojnë të riprogramohen gradualisht elementët e API-së në Rust.

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster