Ukukhishwa kwe-Rust 1.81: Izithiyo Zokuhlanganiswa Kwe-Rust Core Linux

Ulimi lokuhlela lwenhloso evamile i-Rust 1.81, olwasungulwa iphrojekthi ye-Mozilla kodwa manje oluthuthukiswe ngaphansi kwenhlangano ezimele engenzi nzuzo i-Rust Foundation, lukhululiwe. Ulimi lugxile ekuphepheni kwenkumbulo futhi luhlinzeka ngezindlela zokuzuza ukufana kwemisebenzi ephezulu kuyilapho ugwema ukusetshenziswa komqoqi kadoti nesikhathi sokusebenza (isikhathi sokusebenza sincishiselwa ekuqaliseni okuyisisekelo nasekunakekeleni umtapo wolwazi ojwayelekile).

Izindlela zokuphatha inkumbulo kaRust zisindisa unjiniyela emaphutheni lapho eshintsha izikhombi futhi avikele ezinkingeni eziphakama ngenxa yokuphatha inkumbulo esezingeni eliphansi, njengokufinyelela indawo yenkumbulo ngemva kokuba ikhululiwe, ukuhoxisa izikhombi ezingenalutho, ukugcwala kwebhafa, njll. Ukuze kusatshalaliswe imitapo yolwazi, ukuhlinzeka ngokwakha nokuphatha okuncikile, iphrojekthi ithuthukisa umphathi wephakheji ye-Cargo. Inqolobane ye-crates.io isekelwe ekusingatheni imitapo yolwazi.

Ukuphepha kwenkumbulo kunikezwa ku-Rust ngesikhathi sokuhlanganiswa ngokuhlolwa kwereferensi, ukulandelela ubunikazi bento, ukulandelela isikhathi sokuphila kwento (izikophu), nokuhlola ukulunga kokufinyelela inkumbulo ngesikhathi sokwenziwa kwekhodi. I-Rust iphinde inikeze isivikelo ekuchichimeni okuphelele, idinga ukuqaliswa okuyisibopho kwamanani ahlukahlukene ngaphambi kokusetshenziswa, iphatha amaphutha kangcono kulabhulali evamile, isebenzisa umqondo wezithenjwa ezingaguquleki nokuguquguqukayo ngokuzenzakalelayo, inikeza ukuthayipha okuqinile okuqinile ukuze kuncishiswe amaphutha anengqondo.

Okuqanjiwe okuyinhloko:

  • Umnyombo::iphutha::Isici sephutha, esichaza izincazelo zamaphutha ezibonisiwe, simisiwe. Ushintsho lukuvumela ukuthi usebenzise isici sephutha esisodwa kumalabhulali ahlukahlukene, kungakhathaliseki indawo ezungezile, okuhlanganisa nakumalabhulali angaboshelwe kulabhulali evamile, usebenzisa isibaluli se-“#![no_std]”.
  • Imisebenzi yokuhlunga ezinzile futhi engazinzile kulabhulali ejwayelekile iguqulelwe ukuze isebenzise ama-algorithms amasha abonisa ukusebenza okuphezulu nezikhathi eziphansi zokuhlanganisa. Ekusetshenzisweni kwama-algorithms amasha okuhlunga, kuyenzeka ukuthi kutholwe izinhlobo ze-Ord ezichazwe ngokungalungile futhi kukhishwe iphutha (ukwethuka) ezimeni ezinjalo esikhundleni sedatha eqoqwe ngokungahleliwe.
  • I-Linter isebenzisa izinga elisha lokuhlola elithi “lindela” (“#[lindela(lint)]”), elikuvumela ukuthi uqinisekise ukuthi ukuhlola kuqediwe futhi ubonise isexwayiso uma ukuhlola kungaqediwe (ngenxa yephutha ekusetshenzisweni. noma ukukhubaza isheke). Isibonelo, lapho uthutha i-codebase ukuze usebenzise ukuhlola kwe-Clippy's undocumented_unsafe_blocks, ungacacisa "#[expect(clippy::undocumented_unsafe_blocks)]" ukuze uqinisekise ukuthi wonke amabhulokhi angaphephile abhaliwe ngesikhathi soshintsho. U-Clippy uphinde asebenzise i-clippy::allow_attributes and clippy::vumela_attributes_ngaphandle_kokuhlola_isizathu, okwenza kube lula ukufaka izibaluli "#[vumela]" esikhundleni ngokuthi "#[expect(lint)]".
  • Ikhono lokubhala isizathu sokushintsha amazinga okuhlola (i-lint) linikeziwe, linikeza abathuthukisi abasha ulwazi mayelana nezizathu zokwengeza isheke elithile, okukhiphayo njengomlayezo wokuhlanganisa. Isibonelo: #![phika(clippy::float_arithmetic, isizathu = “akukho usekelo lwe-hardware float”)]
  • Ingxenye entsha ye-API iyiswe esigabeni sokuzinza, okuhlanganisa izindlela nokusetshenziswa kwezimpawu kuzinzile:
    • ingqikithi::iphutha
    • ukusikisela::assert_akuhloliwe
    • fs::ikhona
    • I-AtomicBool::landa_hhayi
    • Ubude besikhathi::abs_diff
    • IoSlice ::advance
    • IoSlice::advance_slices
    • IoSliceMut ::advance
    • IoSliceMut ::advance_slices
    • I-PanicHookInfo
    • I-PanicInfo::umlayezo
    • I-PanicMessage

    Isibaluli esithi "const", esinquma ukuthi kungenzeka yini ukusisebenzisa kunoma yimuphi umongo esikhundleni sama-constants, sisetshenziswa emisebenzini:

    • char::from_u32_akuhloliwe (umsebenzi)
    • char::from_u32_akuhloliwe (indlela)
    • CStr::count_bytes
    • CStr::from_ptr

    Uhlobo std::panic::PanicInfo luqanjwe kabusha ukuze std::panic::PanicHookInfo (ukusebenza kwegama elidala kugcinwa, kodwa enguqulweni elandelayo ukusetshenziswa kwalo kuzoholela esixwayiso). Kulesi simo, ingqikithi::uvalo::I-PanicInfo izohlala injengoba injalo, kodwa izothuthukiswa njengohlobo oluhlukile. Ukwehlukanisa izinhlobo kuzokuvumela ukuthi usebenzise izindlela ezahlukahlukene kuzo eziqondene nokusebenza kumongo we-snd kanye no-no_std.

  • Kuqediwe ukudlulela ku-C-unwind ABI ('extern "C-unwind"), ehlukile ku-ABI ngaphandle kwesijobelelo esithi "-unwind" ('extern "C"') ngokugcina ukuziphatha okuphephile uma inqubo yokuhlehlisa ), iqalwa lapho uhlelo luyaphahlazeka noma okuhlukile kwesitayela se-C++ kuyaphonswa, kweqa umngcele we-ABI (isibonelo, uma okuhlukile okufakwe kukhodi ngolimi olulodwa lohlelo kuxegiswa ngokuthinta isitaki esihlotshaniswa nekhodi ngolunye ulimi lokuhlela). Selokhu kwakhululwa i-Rust 1.81, i-'extern "C"' ABI inikwe amandla ukuthi iphahlazeke ekuvuleni okungabonwa.
  • Izinga lesithathu lokusekelwa lisetshenziswe ezinkundleni i686-unknown-redox, xtensa-esp32-none-elf, xtensa-esp32s2-none-elf, xtensa-esp32s3-none-elf, xtensa-esp32-espidf, xtensa-esp32s2 -espidf, xtensa- esp32s3-espidf. Ileveli yesithathu ibandakanya ukwesekwa okuyisisekelo, kodwa ngaphandle kokuhlola okuzenzakalelayo, ukushicilela izakhiwo ezisemthethweni, noma ukuhlola ukuthi ikhodi ingakhiwa yini.
  • Izinga lesibili losekelo lwezingxenyekazi eziqondiwe ze-loongarch64-unknown-linux-musl kanye ne-arm64ec-pc-windows-msvc seluqalisiwe. Izinga lesibili losekelo libandakanya isiqinisekiso somhlangano.
  • Ukuze Linux-систем на платформе LoongArch предоставлен полный инструментарий и профилировщик.
  • Устранена уязвимость (CVE-2024-43402) в std::process::Command, проявляющаяся только на платформе Windows и устраняющая обходной путь эксплуатации ранее исправленной уязвимости BatBadBut, связанной с обработкой спецсимволов при использовании вызовов Command::arg и Command::args, рассчитанных на прямую передачу процессу аргументов, без их обработки командным интерпретатором. На деле при запуске bat- и cmd-сценариев запускался процесс cmd.exe, имеющий собственную логику разделения аргументов. Обход защиты основан на том, что Windows удаляет лидирующие пробелы и точки в путях, т.е. файл с расширением «.bat. .» обрабатывается как «.bat».

Кроме того, можно отметить уход Уэдсона Алмейда Фильо (Wedson Almeida Filho) с поста сопровождающего проект Rust for Linux, занимающийся внедрением в ядро Linux средств для разработки на языке Rust. После ухода Уэдсона у проекта остались ещё два сопровождающих — Мигель Охеда (Miguel Ojeda), автор и основной разработчик проекта Rust-for-Linux, и Алекс Гейнор (Alex Gaynor), бывший директор организации Python Software Foundation, переключившийся на продвижение Rust. Ушедший сопровождающий, который подключился к проекту 4 года назад, является сотрудником компании Microsoft и автором экспериментального драйвера с реализацией ФС EXT2, написанного на языке Rust. Последнее время работа Алмейда была сосредоточена на создании средств для разработки файловых систем на языке Rust. В этом году Алмейда внёс в репозиторий Rust-for-Linux 17 коммитов (для сравнения Мигель Охеда добавил 53 коммита).

В качестве причины ухода упоминается нехватка сил и энтузиазма, которые когда-то были для реагирования на некоторые бредни нетехнического характера (nontechnical nonsense). По мнению Алмейда, разработчики вынуждены тратить много сил на споры по несущественным вопросам, сводящим на нет более важную глобальную цель. Алмейда продолжает верить, что будущее ядер за использованием языков, обеспечивающих безопасную работу с памятью, и если сообщество разработчиков Linux не поймёт это, то Linux будет вытеснен каким-то другим ядром, как в своё время произошло с Unix.

Сторонники проекта Rust-for-Linux столкнулись с необходимостью преодолевать сопротивление со стороны маститых старых разработчиков ядра, которые не видят необходимости в изучении нового языка. В своём письме об отставке Алмейда в качестве примера приводит ссылку на дискуссию, которая состоялась во время выступления Алмейда и Кента Оверстрита (Kent Overstreet) на конференции «Linux Storage, Filesystem, Memory-Management, and BPF Summit» и была посвящена использованию Rust для разработки файловых систем. Деятельность по внедрению Rust раскритиковал Тед Цо (Ted Ts’o), автор файловых систем ext2/ext3/ext4, который сравнил инициативу Rust-for-Linux c попыткой заставить всех принять религию Rust.

Ephendula inhloso ka-Almeida yokwakha isembozo esizungeze izixhumanisi zesistimu yefayela ebhalwe ngo-C ukuze isetshenziswe kukhodi ye-Rust, u-Ted Tso waveza ukuthi ukusonga okunjalo kuzoholela ezinkingeni nakanjani, njengoba noma yiluphi ushintsho ku-C interface kanye nokwenza kabusha kuzodinga izinguquko Ukugqwala futhi akafuni ukuthatha umthwalo wemfanelo ongadingekile wokulungisa izinkinga kwikhodi ye-Rust nokuqapha isimo sokubopha kwe-Rust. Ikhodi C ihlezi ishintsha, futhi uma ukuguqulwa kwayo kwephula ukusebenza kohlaka lwe-Rust, kuzoholela ekuphazamisekeni kwawo wonke amasistimu wefayela ahlobene nalolu hlaka.

Тед также считает, что в обозримом будущем обвязка для Rust останется второстепенной и возникновение проблем в биндингах будет головной болью только для разработчиков Rust-for-Linux, а не для сообщества разработчиков файловых систем в ядре. Указано, что не все разработчики собираются изучать Rust и поэтому после внесения влияющих на другой код изменений, они смогут обновить только зависящий код на Си, но не смогут исправить Rust-обвязки, так как не знают Rust. К дискуссии также присоединился Джеймс Боттомли (James Bottomley), сопровождающий подсистему SCSI, который сказал, что чем больше семантики кодируется в обвязках, тем они становятся более ломкими с точки зрения обеспечения синхронизации.

Okwamanje, i-Google, eyabhala kabusha i-firmware ye-pvmfm ngonyaka odlule esetshenziswe ku imishini ebonakalayo, запускаемых в платформе Android, поделилась опытом постепенного включения кода на языке Rust в существующие прошивки, изначально написанные на C или C++. Показано, как можно существенно повысить защищённость прошивок, создавая идентичные по функциональности компоненты-замены, написанные на языке Rust. Основное внимание при внедрении Rust предлагается уделять использованию Rust для нового кода и кода, выполняющего функции, критические с точки зрения безопасности (например, код по обработке внешних данных, получаемых из не заслуживающих доверия источников). Для интеграции кода на Rust и C предлагается использовать прослойки (shim), транслирующие вызовы между API на Rust и C (C API экспортируется для использования в коде на Rust и наоборот), которые позволяют поэтапно переписывать элементы API на Rust.

Source: opennet.ru

Thenga ukusingathwa okuthembekile kwamasayithi anokuvikelwa kwe-DDoS, amaseva e-VPS VDS 🔥 Thenga ukusingathwa kwewebhusayithi okuthembekile ngokuvikelwa kwe-DDoS, amaseva e-VPS VDS | ProHoster