Mozilla долбоору тарабынан негизделген, бирок азыр Rust Foundation көз карандысыз коммерциялык эмес уюмунун демөөрчүлүгү астында иштелип чыккан Rust 1.64 жалпы максаттуу программалоо тилинин релизи жарыяланды. Бул тил эстутумдун коопсуздугуна көңүл бурат жана таштанды жыйгычты жана иштөө убактысын колдонуудан качуу менен жогорку жумуш параллелизмине жетүү үчүн каражаттарды камсыз кылат (иштөө убактысы стандарттык китепкананы негизги инициализацияга жана тейлөөгө чейин кыскарган).
Rust'тун эстутум менен иштөө ыкмалары иштеп чыгуучуну көрсөткүчтөрдү манипуляциялоодо каталардан куткарат жана эстутумдун төмөнкү деңгээлдеги иштөөсүнөн улам келип чыккан көйгөйлөрдөн коргойт, мисалы, эстутумдун аймагына ал бошотулгандан кийин жетүү, нөл көрсөткүчтөрдү шилтемеден чыгаруу, буфердин ашып кетиши ж.б. Китепканаларды жайылтуу, курууну камсыз кылуу жана көз карандылыкты башкаруу үчүн долбоор Cargo пакетинин менеджерин иштеп чыгат. crates.io репозиторий китепканаларды хостинг үчүн колдоого алынат.
Эстутумдун коопсуздугу Rust программасында компиляция убагында маалымдама текшерүү, объектке ээлик кылуу, объекттин иштөө мөөнөттөрүн (кошумчаларын) эсепке алуу жана кодду аткаруу учурунда эстутумга жетүүнүн тууралыгын баалоо аркылуу камсыз кылынат. Rust ошондой эле бүтүн сандардын ашып кетишинен коргоону камсыз кылат, колдонуудан мурун өзгөрмө маанилерин милдеттүү түрдө инициализациялоону талап кылат, стандарттык китепканада каталарды жакшыраак иштетет, өзгөрүлгүс шилтемелер жана өзгөрмөлөр концепциясын демейки боюнча колдонот, логикалык каталарды азайтуу үчүн күчтүү статикалык терүүнү сунуштайт.
Негизги инновациялар:
- Айлана-чөйрөгө карата талаптардын жогорулашы Linux в компиляторе, пакетном менеджере Cargo и стандартной библиотеке libstd — минимальные требования к Glibc подняты с версии 2.11 до 2.17, а ядра Linux c версии 2.6.32 до 3.2. Ограничения также распространяются на исполняемые файлы Rust-приложений, собранных с libstd. Новым требованиям соответствуют дистрибутивы RHEL 7, SLES 12-SP5, Debian 8 жана Ubuntu 14.04. Будет прекращена поддержка RHEL 6, SLES 11-SP4, Debian 7 жана Ubuntu 12.04. Пользователям, которые используют собранные инструментарием Rust исполняемые файлы в окружениях со старым ядром Linux, предложено обновить свои системы, оставаться на старых выпусках компилятора или самостоятельно поддерживать своё ответвление libstd с прослойками для сохранения совместимости.
Среди причин прекращения поддержки старых Linux-систем упоминаются ограниченные ресурсы по продолжению сопровождения совместимости со старыми окружениями. Поддержка старых Glibc требует использования старого инструментария при проверке в системе непрерывной интеграции, в условиях повышения требований к версиям в LLVM и утилитах кросс-компиляции. Повышение требований к версии ядра связано с возможностью использования в libstd новых системных вызовов без необходимости поддержания прослоек для обеспечения совместимости со старыми ядрами.
- IntoFuture өзгөчөлүгү турукташтырылган, ал IntoIteratorго окшош, бирок экинчисинен "for ... in ..." циклдарынын ордуна ".await" колдонуу менен айырмаланат. IntoFuture менен бириктирилгенде, ".await" ачкыч сөзү Future өзгөчөлүгүн гана эмес, Келечекке айландырыла турган башка түрлөрүн да күтө алат.
- Rust-анализатордун утилитасы Rust релиздери менен камсыздалган утилиталардын жыйнагына кирет. Утилита rustup аркылуу орнотуу үчүн да жеткиликтүү (rustup компоненти дат-анализаторду кошуу).
- Жүк пакетинин менеджери Rust версиялары жана репозиторий URL даректери сыяктуу пакеттердин ортосундагы жалпы талаа маанилеринин кайталанышын жок кылуу үчүн жумушчу мейкиндигин мурастоосун камтыйт. Ошондой эле бир эле учурда бир нече максаттуу платформаларды курууга колдоо кошулду (сиз азыр “--target” опциясында бирден ашык параметрди көрсөтө аласыз).
- API'нин жаңы бөлүгү туруктуу категорияга жылдырылды, анын ичинде сапаттардын ыкмалары жана ишке ашырылышы турукташтырылды:
- келечек::IntoFuture
- num::NonZero*::checked_mul
- num::NonZero*::checked_pow
- num::NonZero*::saturating_mul
- num::NonZero*::каныктыруучу_пов
- num::NonZeroI*::abs
- num::NonZeroI*::checked_abs
- num::NonZeroI*::overflowing_abs
- num::NonZeroI*::каныктыруучу_абс
- num::NonZeroI*::unsigned_abs
- num::NonZeroI*::wrapping_abs
- num::NonZeroU*::checked_add
- num::NonZeroU*::экиден_кийинки_күчтү текшерилет
- num::NonZeroU*::suturating_add
- os::unix::process::CommandExt::process_group
- os::windows::fs::FileTypeExt::is_symlink_dir
- os::windows::fs::FileTypeExt::is_symlink_file
- Мурда std::ffi модулунда стабилдештирилген C-шайкеш типтер өзөккө жана alloc китепканасына кошулган:
- core::ffi::CStr
- core::ffi::FromBytesWithNulError
- alloc::ffi::CString
- alloc::ffi::FromVecWithNulError
- alloc::ffi::IntoStringError
- alloc::ffi::NulError
- std::os::raw модулунда мурда стабилдештирилген C түрлөрү негизги ::ffi жана std::ffi модулдарына кошулган (мисалы, uint жана ulong C түрлөрү үчүн c_uint жана c_ulong түрлөрү сунушталган):
- ffi::c_char
- ffi::c_double
- ffi::c_float
- ffi::c_int
- ffi::c_long
- ffi::c_longlong
- ffi::c_schar
- ffi::c_short
- ffi::c_uchar
- ffi::c_uint
- ffi::c_ulong
- ffi::c_ulonglong
- ffi::c_ushort
- Сурамжылоо механизми менен колдонуу үчүн төмөнкү деңгээлдеги иштеткичтер турукташтырылган (келечекте Pull жана Pin сыяктуу төмөнкү деңгээлдеги структураларды колдонууну талап кылбаган жөнөкөйлөштүрүлгөн API менен камсыз кылуу пландаштырылууда):
- future::poll_fn
- тапшырма::даяр!
- Аны константалардын ордуна каалаган контекстте колдонуу мүмкүнчүлүгүн аныктаган “const” атрибуту slice::from_raw_parts функциясында колдонулат.
- Маалыматтарды компакттуураак сактоо үчүн, Ipv4Addr, Ipv6Addr, SocketAddrV4 жана SocketAddrV6 түзүмдөрүнүн эс тутумунун схемасы өзгөртүлдү. Төмөнкү деңгээлдеги структураларды башкаруу үчүн std::mem::transmute колдонгон жалгыз куту пакеттери менен шайкеш келүү маселеси болушу мүмкүн.
- В сборке компилятора rust для платформы Windows задействованы PGO-оптимизации (profile-guided optimization), позволившие поднять производительность компиляции кода на 10-20%.
- Компилятор белгилүү структураларда колдонулбаган талаалар жөнүндө жаңы эскертүү киргизди.
Кошумчалай кетсек, сиз gccrs долбоору (GCC Rust) тарабынан даярдалган жана GCCге киргизүү үчүн бекитилген Rust тилинин компиляторунун альтернативалуу ишке ашырылышын иштеп чыгуу боюнча статус отчетун белгилей аласыз. Фронтту интеграциялагандан кийин, стандарттык GCC куралдары LLVM иштеп чыгуулары менен курулган rustc компиляторун орнотуунун зарылдыгы жок Rust тилиндеги программаларды компиляциялоо үчүн колдонулушу мүмкүн. Өнүгүү жолунда жүрүп, күтүлбөгөн көйгөйлөргө жол бербестен, Rust фронту келерки жылдын май айына пландаштырылган GCC 13 релизине интеграцияланат. Rust GCC 13 ишке ашыруу бета статусунда болот, демейки боюнча азырынча иштетиле элек.
Source: opennet.ru
