Идоракунии хотираи автоматии Rust хатогиҳоро ҳангоми коркарди нишондиҳандаҳо бартараф мекунад ва аз мушкилоте, ки аз коркарди хотираи сатҳи паст ба вуҷуд меоянд, ба монанди дастрасӣ ба минтақаи хотира пас аз озод шудани он, истинодҳои нули нишоннамо, изофаи буфер ва ғайра муҳофизат мекунад. Менеҷери бастаҳо барои паҳн кардани китобхонаҳо, таъмини ҷамъбаст ва идоракунии вобастагӣ аз ҷониби лоиҳа таҳия карда мешавад.
асосӣ
- Бартараф кардашудаи дарозмуддат
камбуди ҳангоми гузаронидани табдилдиҳӣ байни ададҳои бутун ва ададҳои нуқтаи шинокунанда. Азбаски компилятори Rust LLVM-ро ҳамчун пуштибонӣ истифода мебарад, амалиёти табдилдиҳии намуд тавассути дастурҳои рамзи фосилавии LLVM, ба монандиfptoui , ки як хусусияти муҳим доранд - рафтори номуайян, агар арзиши натиҷавӣ ба намуди мақсаднок мувофиқат накунад. Масалан, ҳангоми табдил додани арзиши шинокунандаи 300 бо навъи f32 ба намуди бутуни u8, натиҷа пешгӯинашаванда аст ва метавонад дар системаҳои гуногун фарқ кунад. Мушкилот дар он аст, ки ин хусусият дар код пайдо мешавад, ки ҳамчун "хатарнок" қайд карда нашудааст.Аз Rust 1.45, рафтори фаромадани андоза ба таври қатъӣ танзим карда мешавад ва амалиёти табдилдиҳии "ҳамчун" изофаборро тафтиш мекунад ва арзиши табдилшавандаро ба арзиши ҳадди аксар ё ҳадди ақали навъи ҳадаф маҷбур мекунад (барои мисоли дар боло зикршуда, арзиши 300 ба 255 табдил дода мешавад). Барои хомӯш кардани чунин чекҳо, зангҳои иловагии API "{f64, f32}::to_int_unchecked" таъмин карда мешаванд, ки дар реҷаи хатарнок кор мекунанд.
fn cast(x: f32) -> u8 {
x ҳамчун u8
}fn main() {
бигзор too_big = 300.0;
бигзор too_small = -100.0;
бигзор nan = f32::NAN;бигзор x: f32 = 1.0;
бигзор y: u8 = хатарнок {x.to_int_unchecked () };println!("too_big_casted = {}", cast(too_big)); // баромад 255
println!("too_small_casted = {}", cast(too_mall)); // баромади 0
println!("нест_a_number_casted = {}", cast(nan)); // баромади 0
} - Истифода мӯътадил
макросҳои мурофиавӣ ифодаҳо, қолабҳо ва изҳорот ба функсия монанд. Пештар, чунин макросҳоро дар ҳама ҷо даъват кардан мумкин набуд, балки танҳо дар қисмҳои алоҳидаи код (ҳамчун занги алоҳида, ки бо дигар кодҳо пайваст нашудаанд) даъват карда мешаванд. Васеъ кардани тарзи даъват кардани макросҳо, ба монанди функсияҳо, яке аз талабот барои кор кардани чаҳорчӯбаи веб будмушак дар релизҳои устувори Rust. Пештар, ба даст овардани чандирии иловагӣ дар муайян кардани коркардкунандагон дар Rocket, имкон додани як хусусияти таҷрибавӣ бо номи "proc_macro_hygiene" -ро талаб мекард, ки дар версияҳои устувори Rust мавҷуд нест. Ин функсия ҳоло дар версияҳои устувори забон сохта шудааст. - Иҷозат дода мешавад, ки диапазонҳоро бо навъи "char" барои такрори арзишҳои диапазон истифода баранд (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):
барои ch дар 'a'..='z' {
чоп кунед!("{}", ch);
}
println!(); // "abcdefghijklmnopqrstuvwxyz" чоп мекунад - Қисми нави APIҳо ба категорияи устувор, аз ҷумла мӯътадил гузаронида шуд
Arc ::as_ptr,
BTreeMap::remove_entry,
Rc::as_ptr,
rc::Заиф ::as_ptr,
rc::Заиф ::from_raw,
rc::Заиф ::into_raw,
str :: strip_prefix,
str :: strip_suffix,
sync::Заиф ::as_ptr,
синхронизатсия :: Заиф ::from_raw,
sync :: Weak :: into_raw,
char::UNICODE_VERSION,
Span ::resolved_at,
Span::location_at,
Span ::mixed_site,
unix :: раванд :: CommandExt :: arg0. - Тартибдиҳандаи rustc барои барҳам додани хусусиятҳои гуногуни платформаи ҳадафҳо бо истифода аз парчами "target-feature", масалан, "-C target-feature=+avx2,+fma" дастгирии илова кардааст. Парчамҳои нав низ илова карда шуданд:
"force-unwind-tables" барои тавлиди ҷадвалҳои кушодани зангҳо, новобаста аз стратегияи коркарди садама; "embed-bitcode" барои назорат кардан, ки оё биткоди LLVM ба rlibs тавлидшуда дохил карда шудааст. Парчами "embed-bitcode" ба таври нобаёнӣ дар Cargo барои оптимизатсияи вақти сохтмон ва масрафи фазои диск фаъол карда шудааст. - Сатҳи сеюми дастгирӣ барои платформаҳои mipsel-sony-psp ва thumbv7a-uwp-windows-msvc таъмин карда шудааст. Сатҳи сеюм дастгирии асосиро дар бар мегирад, аммо бидуни санҷиши автоматӣ ва нашри сохторҳои расмӣ.
Илова бар ин, метавон қайд кард
Мақола аввалин силсилаест, ки ба намоиши усулҳое бахшида шудааст, ки дар барномасозии сатҳи паст ва таҳияи ОС талабот доранд.
Манбаъ: opennet.ru