Ua paʻi ʻia ka hoʻokuʻu ʻia ʻana o ka ʻōlelo hoʻolālā kumu nui ʻo Rust 1.64, i hoʻokumu ʻia e ka papahana Mozilla, akā i kēia manawa ua hoʻomohala ʻia ma lalo o ka mana o ka hui kūʻokoʻa waiwai ʻole ʻo Rust Foundation. Hoʻopili ʻia ka ʻōlelo i ka palekana hoʻomanaʻo a hāʻawi i nā ala e hoʻokō ai i ka parallelism kiʻekiʻe i ka hoʻokō ʻana i ka hana, ʻoiai e pale ana i ka hoʻohana ʻana i ka ʻōpala a me ka manawa holo (ua hoʻemi ʻia ka manawa holo i ka hoʻomaka kumu a me ka mālama ʻana i ka waihona maʻamau).
Hoʻokuʻu ʻia nā ʻenehana hoʻomanaʻo hoʻomanaʻo a Rust i ka mea hoʻomohala mai nā hewa manipulation pointer a pale i nā pilikia e kū mai ana mai ka hoʻohana ʻana i ka hoʻomanaʻo haʻahaʻa haʻahaʻa, e like me ke komo ʻana ma hope o ka loaʻa ʻole ʻana, nā kuhi kuhikuhi null, overruns buffer, a me nā mea like. No ka hāʻawi ʻana i nā hale waihona puke, e hōʻoia i ka hui ʻana a me ka mālama ʻana i nā hilinaʻi, ke kūkulu nei ka papahana i ka luna pūʻolo Cargo. Kākoʻo ʻia ka waihona crates.io no ka mālama ʻana i nā hale waihona puke.
Hoʻoikaika ʻia ka palekana hoʻomanaʻo ma Rust i ka manawa hōʻuluʻulu ma o ka nānā ʻana, ka nānā ʻana i ka mea nona ka mea, ka noʻonoʻo ʻana i ke ola o ka mea (scoping), a me ka loiloi hoʻomanaʻo i ka wā holo. Hāʻawi pū ʻo Rust i ka pale ʻana i ka integer overflows, pono e hoʻomaka mua ʻia nā waiwai hoʻololi ma mua o ka hoʻohana ʻana, ʻoi aku ka maikaʻi o ka lawelawe hewa ʻana i ka waihona maʻamau, hoʻohana i ka manaʻo o nā kuhikuhi immutable a me nā loli ma ke ʻano maʻamau, a hāʻawi i ka paʻi static ikaika e hōʻemi i nā hewa loiloi.
Nā hana hou nui:
- Повышены требования к окружению 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, но отличается от последнего использованием «.await» вместо циклов «for … in …». В сочетании с IntoFuture ключевое слово «.await» может ожидать не только типаж Future, но и любые другие типы, которые можно сконвертировать в Future.
- Утилита rust-analyzer включена в состав коллекции утилит, поставляемой в выпусках Rust. Утилита также доступа для установки при помощи rustup (rustup component add rust-analyzer).
- В пакетном менеджере Cargo реализована возможность наследования рабочей области для исключения дублирования между пакетами типовых значений полей, таких как версии Rust и URL репозиториев. Также добавлена поддержка сборки сразу для нескольких целевых платформ (в опции «—target» теперь можно указывать более одного параметра).
- Ua hoʻoili ʻia kahi ʻāpana hou o ka API i ka ʻāpana paʻa, me nā ʻano a me nā hoʻokō o nā ʻano:
- future::IntoFuture
- num::NonZero*::checked_mul
- num::NonZero*::checked_pow
- num::NonZero*::saturating_mul
- num::NonZero*::saturating_pow
- num::NonZeroI*::abs
- num::NonZeroI*::checked_abs
- num::NonZeroI*::overflowing_abs
- num::NonZeroI*::saturating_abs
- num::NonZeroI*::unsigned_abs
- num::NonZeroI*::wrapping_abs
- num::NonZeroU*::checked_add
- num::NonZeroU*::checked_next_power_of_two
- num::NonZeroU*::saturating_add
- os::unix::process::CommandExt::process_group
- os::windows::fs::FileTypeExt::is_symlink_dir
- os::windows::fs::FileTypeExt::is_symlink_file
- В основной состав (core) и библиотеку alloc добавлены Си-совместимые типы, ранее стабилизированные в модуле std::ffi:
- core::ffi::CStr
- core::ffi::FromBytesWithNulError
- alloc::ffi::CString
- alloc::ffi::FromVecWithNulError
- alloc::ffi::IntoStringError
- alloc::ffi::NulError
- В модули core::ffi и std::ffi добавлены Си-типы, ранее стабилизированные в модуле std::os::raw (например, для Си-типов uint и ulong предложены типы 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
- Стабилизированы низкоуровневые обработчики для использования с механизмом Poll (в будущем планируется предоставить упрощённый API, не требующих использования низкоуровневых структур типа Pull и Pin):
- future::poll_fn
- task::ready!
- Признак «const», определяющий возможность использования в любом контексте вместо констант, применён в функции slice::from_raw_parts.
- С целью более компактного хранения данных изменена раскладка памяти структур Ipv4Addr, Ipv6Addr, SocketAddrV4 и SocketAddrV6. Возможно нарушение совместимости с единичными crate-пакетами, которые используют std::mem::transmute для низкоуровневых манипуляций со структурами.
- В сборке компилятора rust для платформы Windows задействованы PGO-оптимизации (profile-guided optimization), позволившие поднять производительность компиляции кода на 10-20%.
- В компиляторе реализовано новое предупреждение о неиспользуемых полях в определённых структурах.
Дополнительно можно отметить отчёт о состоянии разработки альтернативной реализации компилятора языка Rust, подготовленной проектом gccrs (GCC Rust) и одобренной для включения в состав GCC. После интеграции фронтэнда штатный инструментарий GCC сможет использоваться для компиляции программ на языке Rust без необходимости установки компилятора rustc, построенного с использованием наработок LLVM. Пока разработка идёт по плану и если не возникнет непредвиденных проблем, фронтэнд для языка Rust будет интегрирован в состав выпуска GCC 13, намеченного на май следующего года. Реализация Rust в GCC 13 будет иметь статус бета-версии, пока не включаемой по умолчанию.
Source: opennet.ru