Rust 1.59 программалоо тилин чыгаруу, монтаждык кошумчаларды колдоо менен

Mozilla долбоору тарабынан негизделген, бирок азыр Rust Foundation көз карандысыз коммерциялык эмес уюмунун демөөрчүлүгү астында иштелип чыккан Rust 1.59 жалпы максаттуу программалоо тилинин релизи жарыяланды. Бул тил эстутумдун коопсуздугуна көңүл бурат жана таштанды жыйгычты жана иштөө убактысын колдонуудан качуу менен жогорку жумуш параллелизмине жетүү үчүн каражаттарды камсыз кылат (иштөө убактысы стандарттык китепкананы негизги инициализацияга жана тейлөөгө чейин кыскарган).

Rust'тун эстутум менен иштөө ыкмалары иштеп чыгуучуну көрсөткүчтөрдү манипуляциялоодо каталардан куткарат жана эстутумдун төмөнкү деңгээлдеги иштөөсүнөн улам келип чыккан көйгөйлөрдөн коргойт, мисалы, эстутумдун аймагына ал бошотулгандан кийин жетүү, нөл көрсөткүчтөрдү шилтемеден чыгаруу, буфердин ашып кетиши ж.б. Китепканаларды жайылтуу, курууну камсыз кылуу жана көз карандылыкты башкаруу үчүн долбоор Cargo пакетинин менеджерин иштеп чыгат. crates.io репозиторий китепканаларды хостинг үчүн колдоого алынат.

Эстутумдун коопсуздугу Rust программасында компиляция убагында маалымдама текшерүү, объектке ээлик кылуу, объекттин иштөө мөөнөттөрүн (кошумчаларын) эсепке алуу жана кодду аткаруу учурунда эстутумга жетүүнүн тууралыгын баалоо аркылуу камсыз кылынат. Rust ошондой эле бүтүн сандардын ашып кетишинен коргоону камсыз кылат, колдонуудан мурун өзгөрмө маанилерин милдеттүү түрдө инициализациялоону талап кылат, стандарттык китепканада каталарды жакшыраак иштетет, өзгөрүлгүс шилтемелер жана өзгөрмөлөр концепциясын демейки боюнча колдонот, логикалык каталарды азайтуу үчүн күчтүү статикалык терүүнү сунуштайт.

Негизги инновациялар:

  • Ассемблер тилинин кошумчаларын колдонууга болот, алар төмөнкү деңгээлде аткарылышын контролдоону талап кылган тиркемелерде суроо-талапка ээ же атайын машина көрсөтмөлөрүн колдоно алышат. Курама кыстармалар "asm!" макростору аркылуу кошулат. жана "global_asm!" Руста сапты алмаштыруу үчүн колдонулганга окшош регистрлерди атоо үчүн сап форматтоо синтаксисин колдонуу. Компилятор x86, x86-64, ARM, AArch64 жана RISC-V архитектуралары үчүн монтаждоо көрсөтмөлөрүн колдойт. Кыстаруу мисалы: std::arch::asm колдонуңуз; // Жылдырууларды колдонуу менен xти 6га көбөйтүү жана let mut xти кошуу: u64 = 4; кооптуу { asm!( "mov {tmp}, {x}", "shl {tmp}, 1", "shl {x}, 2", "add {x}, {tmp}", x = inout(reg ) x, tmp = out(reg) _, ); } assert_eq!(x, 4 * 6);
  • Деструктуризацияланган (параллель) тапшырмалар үчүн кошумча колдоо, аларда туюнтумдун сол тарабында бир нече белгилер, тилкелер же структуралар көрсөтүлгөн. Мисалы: болсун (а, б, в, г, д); (a, b) = (1, 2); [c, .., d, _] = [1, 2, 3, 4, 5]; Struct { e, .. } = Struct { e: 5, f: 3 }; assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);
  • const генериктери үчүн демейки маанилерди көрсөтүү мүмкүнчүлүгү берилген: struct ArrayStorage {arr: [T; N], } имп ArrayStorage { fn new(a: T, b: T) -> ArrayStorage { ArrayStorage {arr: [a, b], } } }
  • Жүк пакетинин менеджери компилятордогу каталардан улам иштетилген көз карандылыкта жараксыз структураларды колдонуу жөнүндө эскертүүлөрдү берет (мисалы, катадан улам таңгакталган структуралардын талааларын коопсуз блокторго алууга уруксат берилген). Мындай конструкциялар мындан ары Rustтун келечектеги версиясында колдоого алынбайт.
  • Cargo жана rustc өзүнчө утилитаны чакырбастан, мүчүлүштүктөрдү оңдоо маалыматтарынан (strip = "debuginfo") жана символдордон (стрип = "символдор") ажыратылган аткарылуучу файлдарды түзүү үчүн орнотулган жөндөмгө ээ. Тазалоо жөндөөсү Cargo.toml сайтындагы "стрип" параметри аркылуу ишке ашырылат: [profile.release] тилке = "debuginfo", "символдор"
  • Кошумча компиляция демейки боюнча өчүрүлгөн. Мунун себеби компилятордогу катаны убактылуу чечүү деп айтылат, ал бузулууларга жана сериядан чыгаруу каталарына алып келет. Мүчүлүштүктөрдү оңдоо мурунтан эле даярдалган жана кийинки релизге киргизилет. Кошумча компиляцияны кайтаруу үчүн RUSTC_FORCE_INCREMENTAL=1 чөйрө өзгөрмөсүн колдонсоңуз болот.
  • API'нин жаңы бөлүгү туруктуу категорияга жылдырылды, анын ичинде сапаттардын ыкмалары жана ишке ашырылышы турукташтырылды:
    • std::thread::available_parallelism
    • Натыйжа::көчүрүлгөн
    • Натыйжа::клондолгон
    • arch::asm!
    • arch::global_asm!
    • ops::ControlFlow::is_break
    • ops::ControlFlow::is_continue
    • u8 үчүн TryFrom
    • char::TryFromCharError (Clone, Debug, Display, PartialEq, Copy, Eq, Error)
    • iter::zip
    • NonZeroU8::экинин_күчү
    • NonZeroU16::экинин_күчү
    • NonZeroU32::экинин_күчү
    • NonZeroU64::экинин_күчү
    • NonZeroU128::экинин_күчү
    • ToLowercase структурасы үчүн DoubleEndedIterator
    • ToUppercase структурасы үчүн DoubleEndedIterator
    • TryFrom<&mut [T]> үчүн [T; N]
    • UnwindSafe бир жолу түзүмү үчүн
    • RefUnwindSafe бир жолу
    • armv8 neon колдоо функциялары aarch64 үчүн компиляторго орнотулган
  • Аны константалардын ордуна каалаган контекстте колдонуу мүмкүнчүлүгүн аныктаган "const" атрибуту функцияларда колдонулат:
    • mem::MaybeUninit::as_ptr
    • mem::MaybeUnit::assume_init
    • mem::MaybeUnit::assume_init_ref
    • ffi::CStr::from_bytes_with_nul_checked

Source: opennet.ru

Комментарий кошуу