Rust 1.75 жана unikernel Hermit 0.6.7 программалоо тилинин чыгарылышы

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

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

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

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

  • Жеке сапаттарда “async fn” жана “->impl Trait” белгилөө колдонуу мүмкүнчүлүгү кошулду. Мисалы, “->impl Trait” колдонуу менен сиз итераторду кайтарган белги ыкмасын жаза аласыз: trait Container { fn items(&self) -> impl Iterator; } impl MyContainer үчүн контейнер { fn items(&self) -> impl Iterator { self.items.iter().cloned() } }

    Сиз ошондой эле "async fn" аркылуу сапаттарды түзө аласыз: trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // кеңейтилет: // fn fetch(&self, url: Url) -> impl Future; }

  • Көрсөткүчтөргө салыштырмалуу байт офсеттерин эсептөө үчүн API кошулду. Жылаңач көрсөткүчтөр менен иштегенде («*const T» жана «*mut T») көрсөткүчкө офсетти кошуу үчүн операциялар талап кылынышы мүмкүн. Буга чейин бул үчүн “::add(1)” сыяктуу конструкцияны колдонууга мүмкүн болчу, “size_of::()” өлчөмүнө туура келген байттардын санын кошуу. Жаңы API бул операцияны жөнөкөйлөштүрөт жана "*const u8" же "*mut u8" түрүн чыгарбастан байт офсеттерин башкарууга мүмкүндүк берет.
    • көрсөткүч ::byte_add
    • көрсөткүч::byte_offset
    • көрсөткүч::byte_offset_from
    • көрсөткүч ::byte_sub
    • көрсөткүч::wrapping_byte_add
    • көрсөткүч::wrapping_byte_offset
    • көрсөткүч::wrapping_byte_sub
  • Rustc компиляторунун өндүрүмдүүлүгүн жогорулатуу боюнча иштерди улантуу. Шилтемеден кийинки этапта иштеген жана алдын ала даярдалган аткаруу профилиндеги маалыматты колдонгон BOLT оптимизатору кошулду. BOLT колдонуу процессордун кэшин эффективдүү пайдалануу үчүн librustc_driver.so китепкана кодунун макетін өзгөртүү менен компилятордун аткарылышын болжол менен 2% тездетүүгө мүмкүндүк берет.

    LLVMдеги оптималдаштыруунун сапатын жакшыртуу үчүн "-Ccodegen-units=1" опциясы менен rustc компиляторун куруу камтылган. Аткарылган тесттер "-Ccodegen-units = 1" курууда өндүрүмдүүлүктүн болжол менен 1.5% га жогорулагандыгын көрсөтүп турат. Кошулган оптималдаштыруулар демейки боюнча x86_64-unknown-linux-gnu платформасы үчүн гана иштетилет.

    Мурда айтылган оптималдаштыруулар Google тарабынан Rust менен жазылган Android платформасынын компоненттерин куруу убактысын кыскартуу үчүн сыналган. Androidди курууда “-C codegen-units=1” колдонуу бизге инструменттердин көлөмүн 5.5% га кыскартууга жана анын өндүрүмдүүлүгүн 1.8% га жогорулатууга мүмкүндүк берди, ал эми инструменттер топтомун куруу убактысы дээрлик эки эсеге көбөйдү.

    Шилтеме убагында таштанды чогултууну иштетүү («--gc-бөлүмдөр») аткарууну 1.9% га чейин жогорулатты, шилтеме убактысын оптималдаштырууну (LTO) 7.7% га чейин жана профилдик оптималдаштырууну (PGO) 19.8% га чейин камсыз кылды. Финалда BOLT утилитасынын жардамы менен оптималдаштыруу колдонулду, бул куруу ылдамдыгын 24.7% га чейин жогорулатууга мүмкүндүк берди, бирок инструменттердин көлөмү 10.9% га көбөйдү.

    Rust 1.75 жана unikernel Hermit 0.6.7 программалоо тилинин чыгарылышы

  • API'нин жаңы бөлүгү туруктуу категорияга жылдырылды, анын ичинде сапаттардын ыкмалары жана ишке ашырылышы турукташтырылды:
    • Atomic*::from_ptr
    • FileTimes
    • FileTimesExt
    • File::set_modified
    • File::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Option::as_slice
    • Опция::as_mut_slice
    • көрсөткүч ::byte_add
    • көрсөткүч::byte_offset
    • көрсөткүч::byte_offset_from
    • көрсөткүч ::byte_sub
    • көрсөткүч::wrapping_byte_add
    • көрсөткүч::wrapping_byte_offset
    • көрсөткүч::wrapping_byte_sub
  • Аны константалардын ордуна каалаган контекстте колдонуу мүмкүнчүлүгүн аныктаган "const" атрибуту функцияларда колдонулат:
    • Ipv6Addr::to_ipv4_mapped
    • MaybeUnit::assume_init_read
    • MaybeUninit :: нөл
    • mem::discriminant
    • mem::нөл
  • Колдоонун үчүнчү деңгээли csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd жана mipsel-unknown-netbsd платформалары үчүн ишке ашырылган. Үчүнчү деңгээл негизги колдоону камтыйт, бирок автоматташтырылган тестирлөөсүз, расмий түзүмдөрдү жарыялоосуз же кодду курууга болорун текшерүүсүз.

Кошумчалай кетсек, Hermit долбоорунун жаңы версиясын белгилей кетсек болот, ал Rust тилинде жазылган адистештирилген ядрону (уникернель) иштеп чыгат, гипервизордун үстүндө же кошумча катмарлары жок жылаңач жабдыктын үстүндө иштей турган өз алдынча тиркемелерди куруу үчүн куралдар менен камсыз кылат. жана операциялык системасы жок. Курулганда, тиркеме OS ядросуна жана системалык китепканаларга байланбастан, бардык керектүү функцияларды өз алдынча ишке ашырган китепкана менен статикалык түрдө байланышкан. Долбоордун коду Apache 2.0 жана MIT лицензиялары боюнча таратылат. Assembly Rust, Go, Fortran, C жана C++ тилдеринде жазылган тиркемелерди өз алдынча аткаруу үчүн колдоого алынат. Долбоор ошондой эле QEMU жана KVM аркылуу Hermitти ишке киргизүүгө мүмкүндүк берген өзүнүн жүктөгүчтү иштеп чыгууда.

Source: opennet.ru

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