Апублікаваны рэліз мовы праграмавання Rust 1.98, заснаванага праектам Mozilla, але цяпер які развіваецца пад заступніцтвам незалежнай некамерцыйнай арганізацыі Rust Foundation. Мова сфакусаваная на бяспечнай працы з памяццю і дае сродкі для дасягнення высокага паралелізму выканання заданняў, пры гэтым абыходзячыся без выкарыстання зборшчыка смецця і runtime (runtime зводзіцца да базавай ініцыялізацыі і суправаджэння стандартнай бібліятэкі).
Метады працы з памяццю ў Rust накіраваны на выключэнне памылак пры маніпуляванні паказальнікамі і абарону ад праблем, якія ўзнікаюць з-за нізкаўзроўневай працы з памяццю, такіх як зварот да вобласці памяці пасля яе вызвалення, разнайменаванне нулявых паказальнікаў, выхад за межы буфера і да т.п. Для распаўсюджвання бібліятэк, забеспячэнні зборкі і кіраванні залежнасцямі праектам развіваецца пакетны мэнэджар Cargo. Для размяшчэння бібліятэк падтрымліваецца рэпазітар crates.io.
Бяспечная праца з памяццю забяспечваецца ў Rust падчас кампіляцыі праз праверку спасылак, адсочванне валодання аб'ектамі, улік часу жыцця аб'ектаў (вобласці бачнасці) і адзнаку карэктнасці доступу да памяці падчас выканання кода. Rust таксама дае сродкі для абароны ад цэлалікіх перапаўненняў, патрабуе абавязковай ініцыялізацыі значэнняў зменных перад выкарыстаннем, лепш апрацоўвае памылкі ў стандартнай бібліятэцы, ужывае канцэпцыю нязменнасці (immutable) спасылак і зменных па змаўчанні, прапануе моцную статычную тыпізацыю для мінімізацыі лагічных памылак.
Асноўныя навіны:
- Для тыпаў з якая плавае коскі f32 і f64 рэалізаваны алгебраічныя метады для складання, адніманні, множанні, дзяленні і знаходжанні астатку, якія рэалізуюць аптымізацыю, падобную на опцыю "-ffast-math" у кампілятарах C/C++. Падобныя метады дапушчаюць змену парадку аперацый, калі гэта неабходна для аптымізацый, такіх як вектарызацыя цыклаў. Напрыклад, пры вылічэнні "a + b + c + d" пры выкарыстанні звычайнага складання кампілятар заўсёды выканае вылічэнне ў адным парадку "((a + b) + c) + d", а пры выкарыстанні метаду algebraic_add можа згрупаваць выраз як "(a + b) + (c + d)" і выканаць "(a + b)" і "c". Коштам ужывання алгебраічных метадаў з'яўляецца недэтэрмінаванасць вынікаў вылічэнні, якія могуць мяняцца ў межах хібнасці.
- Для ўсіх прымітыўных цэлалікавых тыпаў рэалізаваны ўбудаваны метад "format_into" для пераўтварэння лікаў у радкі, які можа прымяняцца замест пакета itoa. У якасці параметру перадаецца буфер NumBuffer , памер якога гарантавана дастатковы для запісу любога значэння выкарыстоўванага тыпу ў дзесятковым выглядзе. На выхадзе вяртаецца адфарматаваны радок &str, час жыцця якога прывязаны да буфера.
- Узаемадзеянне паміж абвязкай ManuallyDrop і разумным паказальнікам Box зараз не прыводзіць да нявызначаных паводзін.
- У разрад стабільных пераведзена новая порцыя API, у тым ліку стабілізаваны метады і рэалізацыі тыпажоў:
- str::substr_range
- [T]::subslice_range
- core::fmt::NumBuffer
- <{integer}>::format_into
- Send/Sync for std::process::CommandArgs
- {fN}::algebraic_add
- {fN}::algebraic_sub
- {fN}::algebraic_mul
- {fN}::algebraic_div
- {fN}::algebraic_rem
- NonZero<{integer}>::from_str_radix
- String::from_utf16le
- String::from_utf16le_lossy
- String::from_utf16be
- String::from_utf16be_lossy
- [T]::strip_circumfix
- str::strip_circumfix
- Atomic ::from_mut
- Atomic ::get_mut_slice
- Atomic ::from_mut_slice
- std::range::legacy
- Мэтавыя платформы thumbv7a-none-eabi, thumbv7a-none-eabihf, thumbv7r-none-eabi, thumbv7r-none-eabihf і thumbv8r-none-eabihf перакладзены на другі ўзровень падтрымкі, які мае на ўвазе гарантыю збору.
- Дададзена падтрымка платформаў powerpc64-unknown-linux-gnuelfv2 і aarch64-unknown-linux-pauthtest, для якіх забяспечаны трэці ўзровень падтрымкі. Трэці ўзровень ахоплівае базавую падтрымку, але без аўтаматызаванага тэсціравання, публікацыі афіцыйных зборак і праверкі магчымасці зборкі кода.
Дадаткова можна адзначыць кампраметацыю папулярнага crate-пакета arrayref, які налічвае больш за 53 млн загрузак за апошнія 90 дзён і які ўжываецца ў якасці залежнасці ў 403 пакетаў. Атакуючыя размясцілі ў рэпазітары crates.io новыя пакеты proc-macro1, proc-macro-en, aovine, arone, aronenao і tinymember, якія змяшчаюць шкоднасны код. Пасля гэтага ў рэпазітары былі апублікаваны новыя выпускі пакетаў arrayref 0.3.10, internment 0.8.7 і append-only-vec 0.1.9 у якія ў якасці залежнасці быў дададзены шкоднасны пакет proc-macro1. Шкодная версія пакета arrayref была размешчана 20 жніўня ў 10:15 (MSK) і праіснавала да 11:41, пасля чаго была выдалена адміністратарамі crates.io.
З суправаджаючым arrayref пакуль не ўдалося звязацца для высвятлення сітуацыі, але мяркуецца, што ягоныя ўліковыя дадзеныя былі перахопленыя зламыснікамі. У пакеце proc-macro1 шкодная змена прысутнічала ў зборачным скрыпце і ажыццяўляла загрузку выкананага файла з вонкавага. сервера. Загружаны файл у Unix-сістэмах захоўваўся як /tmp/rust-setup, а ў Windows - %TEMP%rust-setup.ps1 або %TEMP%rust-setup-launch.vbs.
Крыніца: opennet.ru
