Rust 1.65 Варақаи забони барномасозӣ

Нашри забони барномасозии Rust 1.65, ки аз ҷониби лоиҳаи Mozilla асос ёфтааст, аммо ҳоло таҳти сарпарастии созмони мустақили ғайритиҷоратии Rust Foundation таҳия шудааст, нашр шуд. Забон ба бехатарии хотира тамаркуз мекунад ва воситаҳоро барои ноил шудан ба параллелизми баланди кор ҳангоми канорагирӣ аз истифодаи коллектори партовҳо ва вақти корӣ таъмин мекунад (вақти кор то оғозкунии асосӣ ва нигоҳдории китобхонаи стандартӣ кам карда мешавад).

Усулҳои коркарди хотираи Rust таҳиякунандаро аз хатогиҳо ҳангоми коркарди нишонаҳо наҷот медиҳанд ва аз мушкилоте, ки дар натиҷаи коркарди хотираи сатҳи паст ба вуҷуд меоянд, ба монанди дастрасӣ ба минтақаи хотира пас аз озод шудани он, барҳам додани ишораҳои нул, изофаи буфер ва ғайра муҳофизат мекунад. Барои паҳн кардани китобхонаҳо, таъмин кардани сохтан ва идоракунии вобастагӣ, лоиҳа менеҷери бастаи боркашониро таҳия мекунад. Анбори crates.io барои хостинги китобхонаҳо дастгирӣ карда мешавад.

Бехатарии хотира дар Rust дар вақти тартибдиҳӣ тавассути санҷиши истинод, нигоҳ доштани моликияти объект, нигоҳ доштани мӯҳлати умри объект (миқёс) ва арзёбии дурустии дастрасии хотира ҳангоми иҷрои код таъмин карда мешавад. Rust инчунин муҳофизатро аз фаромадани ададҳо таъмин мекунад, пеш аз истифода оғозкунии ҳатмии арзишҳои тағирёбандаро талаб мекунад, хатогиҳоро дар китобхонаи стандартӣ беҳтар идора мекунад, консепсияи истинодҳо ва тағирёбандаҳоро ба таври нобаёнӣ татбиқ мекунад, чопкунии қавии статикиро барои кам кардани хатогиҳои мантиқӣ пешниҳод мекунад.

Навовариҳои асосӣ:

  • Дастгирии иловашуда барои намудҳои алоқаманди умумӣ (GAT, Generic Associated Types), ки имкон медиҳад, ки тахаллусҳои навъи бо навъи дигар алоқаманд эҷод карда шаванд ва ба шумо имкон медиҳанд, ки конструкторҳои типро бо хислатҳо пайваст кунед. trait Foo {навъи Бар<'x>; }
  • Ифодаи "бигзор ... else" амалӣ карда шуд, ки ба шумо имкон медиҳад, ки ҳолати мувофиқати намунаро мустақиман дар дохили ифодаи "бигзор" тафтиш кунед ва дар сурати мувофиқат накунад, рамзи худсарона иҷро кунед. бигзор Ok(count) = u64::from_str(count_str) else { ваҳм!("Адри бутунро таҳлил кардан мумкин нест: '{count_str}'"); };
  • Ба истифодаи изҳороти танаффус иҷозат диҳед, то аз блокҳои номбаршуда пеш аз мӯҳлат хориҷ шавед, бо истифода аз номи блок (тамга) барои муайян кардани блоки қатъшаванда. бигзор натиҷа = 'блок: { do_thing (); агар condition_not_met () { шикастани 'блоки 1; } чизеро_кунед(); агар condition_not_met () { шикастани 'блоки 2; } анҷом додани_охирин (); 3 };
  • Барои Linux, қобилияти ҷудогона нигоҳ доштани маълумоти ислоҳи ислоҳ (split-debuginfo), ки қаблан танҳо барои платформаи macOS дастрас буд, илова карда шудааст. Ҳангоми муайян кардани опсияи "-Csplit-debuginfo=unpacked", маълумоти debuginfo дар формати DWARF дар якчанд файлҳои объекти алоҳида бо тамдиди ".dwo" захира карда мешавад. Муайян кардани "-Csplit-debuginfo=packed" бастаи ягонаро дар формати ".dwp" эҷод мекунад, ки тамоми маълумоти debuginfo барои лоиҳаро дар бар мегирад. Барои ворид кардани debuginfo бевосита ба бахши .debug_* объектҳои ELF, шумо метавонед опсияи "-Csplit-debuginfo=off" -ро истифода баред.
  • Қисмати нави API ба категорияи устувор гузаронида шуд, аз ҷумла усулҳо ва татбиқи хислатҳо устувор карда шуданд:
    • std::backtrace::Backtrace
    • Пайваст ::as_ref
    • std::io::read_to_string
    • <*const T>::cast_mut
    • <*mut T>::cast_const
  • Аттрибути "const", ки имкони истифодаи онро дар ҳама гуна контекст ба ҷои доимӣ муайян мекунад, дар функсияҳои <*const T&>::offset_from ва <*mut T>::offset_from истифода мешавад.
  • Дар доираи марҳилаи ниҳоии интиқоли татбиқи протоколи LSP (Language Server Protocol) ба rust-analyzer, татбиқи кӯҳнаи сервери Rust Language Server (RLS) бо сервери ноустувор иваз карда шуд, ки огоҳӣ бо пешниҳоди гузаштан ба бо истифодаи анализатори занг.
  • Ҳангоми тартибдиҳӣ, дастгирии ҷойгиркунии дохилии коди фосилавии MIR фаъол карда мешавад, ки ин тартиб додани бастаҳои маъмулии қуттиҳоро 3-10% метезонад.
  • Барои суръат бахшидани сохтмонҳои ба нақша гирифташуда, менеҷери бастаи боркаш ҷудо кардани корҳоеро, ки дар навбат интизоранд, таъмин мекунад.

Илова бар ин, шумо метавонед мусоҳибаро дар бораи истифодаи забони Rust дар Volvo барои таҳияи ҷузъҳои системаҳои иттилоотии автомобилӣ қайд кунед. Нақшаи дубора навиштани рамзи мавҷуда ва санҷидашуда дар Rust нест, аммо барои коди нав, Rust яке аз вариантҳои афзалиятнок барои беҳтар кардани сифат бо хароҷоти камтар аст. Дар иттиҳодияҳои автомобилсозии AUTOSAR (Auttomotive Open System Architecture) ва SAE (Ҷамъияти муҳандисони мошинсозӣ) гурӯҳҳои кории марбут ба истифодаи забони руст низ таъсис дода шудаанд.

Илова бар ин, Дэвид Клейдермахер, ноиби президенти муҳандисии Google, дар бораи тарҷумаи коде, ки дар платформаи Android барои идоракунии калидҳои рамзгузорӣ ба Rust истифода мешавад ва инчунин истифодаи Rust дар татбиқи DNS тавассути протоколи HTTPS дар стек сухан гуфт. барои чипҳои UWB (Ultra-Wideband) ва дар чаҳорчӯбаи виртуализатсия (Android Virtualization Framework), ки бо чипи Tensor G2 алоқаманданд. Стекҳои нав барои Bluetooth ва Wi-Fi, ки дар Rust аз нав навишта шудаанд, инчунин барои Android таҳия карда мешаванд. Стратегияи умумӣ тадриҷан таҳкими амният аст, аввал тавассути табдил додани ҷузъҳои осебпазир ва муҳимтарини нармафзор ба Rust ва сипас васеъ кардани зерсистемаҳои дигари алоқаманд. Соли гузашта забони Rust ба рӯйхати забонҳое дохил карда шуд, ки барои таҳияи платформаи Android иҷозат дода шудааст.

Манбаъ: opennet.ru

Илова Эзоҳ