Нашри забони барномасозии Rust 1.78, ки аз ҷониби лоиҳаи Mozilla асос ёфтааст, аммо ҳоло таҳти сарпарастии созмони мустақили ғайритиҷоратии Rust Foundation таҳия шудааст, нашр шуд. Забон ба бехатарии хотира тамаркуз мекунад ва воситаҳоро барои ноил шудан ба параллелизми баланди кор ҳангоми канорагирӣ аз истифодаи коллектори партовҳо ва вақти корӣ таъмин мекунад (вақти кор то оғозкунии асосӣ ва нигоҳдории китобхонаи стандартӣ кам карда мешавад).
Усулҳои коркарди хотираи Rust таҳиякунандаро аз хатогиҳо ҳангоми коркарди нишонаҳо наҷот медиҳанд ва аз мушкилоте, ки дар натиҷаи коркарди хотираи сатҳи паст ба вуҷуд меоянд, ба монанди дастрасӣ ба минтақаи хотира пас аз озод шудани он, барҳам додани ишораҳои нул, изофаи буфер ва ғайра муҳофизат мекунад. Барои паҳн кардани китобхонаҳо, таъмин кардани сохтан ва идоракунии вобастагӣ, лоиҳа менеҷери бастаи боркашониро таҳия мекунад. Анбори crates.io барои хостинги китобхонаҳо дастгирӣ карда мешавад.
Бехатарии хотира дар Rust дар вақти тартибдиҳӣ тавассути санҷиши истинод, нигоҳ доштани моликияти объект, нигоҳ доштани мӯҳлати умри объект (миқёс) ва арзёбии дурустии дастрасии хотира ҳангоми иҷрои код таъмин карда мешавад. Rust инчунин муҳофизатро аз фаромадани ададҳо таъмин мекунад, пеш аз истифода оғозкунии ҳатмии арзишҳои тағирёбандаро талаб мекунад, хатогиҳоро дар китобхонаи стандартӣ беҳтар идора мекунад, консепсияи истинодҳо ва тағирёбандаҳоро ба таври нобаёнӣ татбиқ мекунад, чопкунии қавии статикиро барои кам кардани хатогиҳои мантиқӣ пешниҳод мекунад.
Навовариҳои асосӣ:
- Фазои номи аттрибутӣ "#[диагностикӣ]" пешниҳод шудааст, ки воситаи таъсиррасониро ба паёмҳои хатогиҳои аз ҷониби компилятор тавлидшуда таъмин мекунад. Аввалин дар фазои нав атрибути "#[диагностик::on_unimlemented]" мебошад, ки метавонад барои танзим кардани паёмҳои хатогиҳои дар вазъияте партофташуда истифода шавад, ки шумо бояд хислатеро истифода баред, ки барои навъи он амалӣ карда нашудааст. #[diagnostic::on_unimlemented( message = "Паёми ман барои `ImportantTrait<{A}>` барои `{Self}` амалӣ карда нашудааст", label = "Лабели ман", not = "Эзоҳ 1", not = "Эзоҳ 2" )] хислати ImportantTrait {} fn use_my_trait(_: impl ImportantTrait ) {} fn main() {use_my_trait(String::new()); } хато[E32]: Паёми ман барои `ImportantTrait ` барои `String` —> src/main.rs:0277:32 | 12 | use_my_trait (Стринг :: нав ()); | ———— ^^^^^^^^^^^^^ Лабкаам | | | талаб аз ҷониби як банд ҷорӣ бо ин даъват | = кӯмак: хислати `ImportantTrait ` барои `String` = қайд: Эзоҳ 18 = қайд: Эзоҳ 12 амалӣ карда нашудааст
- Санҷишҳои қаблан тасдиқшуда, ки ба функсияҳои хатарнок истифода мешаванд, акнун метавонанд то тавлиди код ба таъхир гузошта шаванд, ки ин санҷишҳо бидуни зарурати сохтани китобхонаи стандартӣ дар реҷаи "#[cfg(debug_assertions)]" анҷом дода шаванд. Барои ба кор андохтани чекҳо, ҳоло имкон медиҳад, ки тасдиқҳои ислоҳӣ барои санҷиш ё ислоҳи сохтани коди шумо кифоя аст.
- Рафтори функсияҳо дар китобхонаи стандартӣ, ки ба ҳамбастагии нишондиҳандаҳо ва буридаҳо таъсир мерасонанд, ҳоло дар вақти кор пешгӯишаванда аст ва аз маълумоти воридотӣ вобаста аст. Нишондиҳандаи функсионалии::align_offset, ки офсетро барои мувофиқ кардани нишоннамо ҳисоб мекунад, акнун танҳо дар сурати ноком шудани амалиёт usize::MAX -ро бармегардонад. Функсияҳои slice::align_to ва slice::align_to_mut ҳарду, ки буридаҳоро ба намояндагӣ бо буридаи миёнаи мувофиқ ва буридаҳои ибтидоӣ ва ниҳоӣ табдил медиҳанд, ҳоло ҳамеша қисми калонтарини миёнаро бармегардонанд.
- Инхо ба категорияи устувор гузаронда шуданд:
- impl Хонда шуд барои &Stdin
- Иҷозат диҳед, ки як умри ғайристатикӣ (ғайристатикӣ) барои баъзе татбиқи std::error::Хато алоқаманд.
- Амалисозии импл ?Арзиши андоза иҷозат дода мешавад.
- impl Аз барои io::Хато
- Функсияи Barrier::new() устувор карда шудааст, то ки бо атрибути "const" дар ҳама гуна контекст ба ҷои доимӣ истифода шавад.
- Барои платформаҳои мақсаднок x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm ва i686winnuvp- ҳоло ҳадди аққал версияи Windows 10-ро талаб мекунад.
- Сатҳи сеюми дастгирӣ барои платформаҳои wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf ва loongarch64-unknown-linux-musl амалӣ карда шудааст. Сатҳи сеюм дастгирии асосиро дар бар мегирад, аммо бидуни санҷиши автоматикунонидашуда, нашри сохторҳои расмӣ ё тафтиши он, ки оё код сохта мешавад.
- Сатҳи дуюми дастгирӣ барои платформаи мақсадноки Add wasm32-wasip1 амалӣ карда шуд. Сатҳи дуюми дастгирӣ кафолати васлкуниро дар бар мегирад.
- Платформаи wasm32-wasi-preview1-threads ба wasm32-wasip1-threads иваз карда шуд.
- Компилятор ба истифодаи LLVM 18 иваз карда шудааст. Ҳангоми истифодаи LLVM 18 барои меъмории x86-32 ва x86-64, ABI, ки бо намудҳои u128 ва i128 алоқаманд аст, иваз карда шуд.
- Дар менеҷери паймони боркаш, версияи 4 файлҳои қулф (lockfile v4) устувор карда шудааст.
- Боркаш як кэши устувори ҷаҳонӣ бо маълумот дар бораи истифодаи охирини додаҳо дорад. Кэш дар $CARGO_HOME/.global-cache бо истифода аз SQLite ҷойгир карда мешавад ва ба таври худкор барои инъикоси тағйироти охирин ба индекс, файли crate, каталоги код, git clone ва checkout git навсозӣ мешавад.
Илова бар ин, забони барномасозии Borgo кӯшиш мекунад, ки нисбат ба забони Go ифодакунандатар бошад, аммо нисбат ба забони Rust камтар мураккаб бошад. Борго беҳтарин хусусиятҳои Go ва Rust-ро муттаҳид намуда, камбудиҳои ҳар як забонро ҷуброн мекунад. Масалан, Go оддӣ ва содда аст, аммо хусусиятҳои пешрафтаи бехатарии навъи навъиро таъмин намекунад. Забони Rust асбобҳоро барои барномасозии бехатар таъмин мекунад, аммо аз ҳад зиёд мураккаб аст. Лоиҳа аз ҷониби Марко Сампеллегрини, муаллифи Дастури оддӣ Ҳаскелл ва таҳиягари системаи муттаҳидсозии муттасили Quad CI таҳия карда мешавад.

Борго чопкунии статикӣ, намудҳои ба монанди Go ва синтаксиси Rust-ро истифода мебарад. Нуқтаҳои вергул дар охири сатрҳо дар рамзи Борго ихтиёрӣ мебошанд. Рамзи Borgo ба намояндагии Go тартиб дода шудааст, ки бо бастаҳои мавҷудаи Go комилан мувофиқ аст. Рамзи компилятор дар Rust навишта шудааст ва таҳти иҷозатномаи ISC паҳн карда мешавад. fmt enum NetworkState -ро истифода баред { Loading, Failed(int), Success(T), } struct Response { унвон: сатр, давомнокӣ: int, } fn main() { let res = Ҷавоб { унвон: "Салом ҷаҳон", давомнокӣ: 0, } бигзор давлат = NetworkState.Success(res) бигзор msg = мутобиқат ҳолати { NetworkState.Loading => "ҳанӯз бор карда мешавад", NetworkState.Failed(код) => fmt.Sprintf("Рамзи хатогиро гирифт: %d", код), NetworkState.Success (res) => res.title, } fmt.Println(msg) }
Манбаъ: opennet.ru
