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

нашр шудааст барориши 1.45 забони барномасозии система зангин, аз ҷониби лоиҳаи Mozilla таъсис дода шудааст. Забон ба бехатарии хотира тамаркуз мекунад, идоракунии автоматии хотираро таъмин мекунад ва асбобҳоро барои ноил шудан ба параллелизми вазифаҳои баланд бидуни истифодаи коллектори партовҳо ва runtime.

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

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

  • Бартараф кардашудаи дарозмуддат камбуди ҳангоми гузаронидани табдилдиҳӣ байни ададҳои бутун ва ададҳои нуқтаи шинокунанда. Азбаски компилятори 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 таъмин карда шудааст. Сатҳи сеюм дастгирии асосиро дар бар мегирад, аммо бидуни санҷиши автоматӣ ва нашри сохторҳои расмӣ.

Илова бар ин, метавон қайд кард Ҳикояи дар бораи сохтани соддатарин Барномаҳои бо забони Rust, оғоз кардани истифодаи пурборкунандаи система ва ба ҷои системаи амалиётӣ барои боркунии мустақил омода аст.
Мақола аввалин силсилаест, ки ба намоиши усулҳое бахшида шудааст, ки дар барномасозии сатҳи паст ва таҳияи ОС талабот доранд.

Манбаъ: opennet.ru

Илова Эзоҳ