LINUX.ORG.RU

Rust 1.96.0

 


0

5

Опубликован релиз Rust 1.96.0 — очередной стабильной версии языка программирования Rust. Обновление вышло 28 мая 2026 года; установить его можно стандартной командой rustup update stable. Главными изменениями стали новые типы диапазонов в core::range, стабилизация макросов для проверки соответствия шаблонам, ужесточение поведения WebAssembly-сборок и исправления двух уязвимостей в Cargo.

Основные изменения

  • Новые типы диапазонов core::range::Range*. В стандартной библиотеке стабилизированы новые варианты диапазонов: core::range::Range, RangeFrom, RangeInclusive и связанные с ними итераторы. В отличие от старых типов из core::ops, новые диапазоны не реализуют Iterator напрямую, а преобразуются в итератор через IntoIterator. Благодаря этому такие диапазоны могут быть Copy, что удобно, например, при хранении диапазона как поля структуры. Синтаксис вроде 0..1 пока создаёт старые типы диапазонов, но в будущей редакции языка его планируют перевести на новые типы.

  • Добавлены assert_matches! и debug_assert_matches!. Новые макросы позволяют проверять, что значение соответствует заданному шаблону. По смыслу это похоже на assert!(matches!(...)), но при ошибке выводится Debug-представление значения, что упрощает диагностику. В prelude макросы не добавили, чтобы не конфликтовать с популярными сторонними crate’ами, поэтому их нужно импортировать явно из core или std.

  • Изменено поведение WebAssembly-целей. Rust больше не передаёт линкеру --allow-undefined для WebAssembly-сборок. Теперь неопределённые символы при линковке считаются ошибкой, а не превращаются автоматически в импорты из модуля "env". Это должно раньше выявлять ошибки сборки и неправильные имена символов. Старое поведение при необходимости можно вернуть через RUSTFLAGS=-Clink-arg=--allow-undefined или явно указать импортируемый wasm-модуль через #[link(wasm_import_module = "env")].

  • Cargo получил исправления безопасности. В Rust 1.96.0 закрыты две уязвимости, затрагивающие пользователей сторонних registry. CVE-2026-5223 связана с обработкой symlink внутри tar-архивов crate: вредоносный пакет из стороннего registry мог перезаписать кэш другого пакета из того же registry. Начиная с Rust 1.96.0 Cargo отвергает crate-архивы с symlink. CVE-2026-5222 связана с нормализацией URL sparse registry и в редких условиях могла привести к отправке Cargo-токена на вредоносный registry. Пользователи crates.io, по заявлению команды Rust, этими проблемами не затронуты.

  • Изменения в языке. В релиз вошли несколько точечных исправлений и расширений: разрешена передача expr-метапеременных макросов в cfg, скорректировано приведение never-type в выражениях-кортежах, исправлены редкие случаи неверных подсказок вывода типов для аргументов функций, добавлена поддержка векторных регистров s390x в inline assembly, а также снова разрешено использовать константы типа ManuallyDrop как шаблоны — это исправляет регрессию, появившуюся в Rust 1.94.0.

  • Изменения в компиляторе и платформах. Для Linux-целей на LoongArch включена поддержка link relaxation — оптимизации линковки, позволяющей упростить некоторые переходы и обращения после размещения кода. Для riscv64gc-unknown-fuchsia обновлена базовая конфигурация до профиля RVA22 с поддержкой векторных расширений.

  • Обновления стандартной библиотеки. Добавлена поддержка итерации по диапазонам NonZero-целых чисел. Также исправлена отложенная обработка адресов хоста в SGX через ToSocketAddr, а в документации и внутренних контрактах уточнено определение памяти, «допустимой для чтения/записи»: нулевой указатель исключён из общего определения, а исключения указываются отдельно для конкретных методов.

  • Стабилизированные API. Среди стабилизированных интерфейсов — assert_matches!, debug_assert_matches!, реализации From<T> для AssertUnwindSafe<T>, LazyCell<T, F> и LazyLock<T, F>, а также новые типы и итераторы диапазонов из core::range, включая Range, RangeFrom, RangeToInclusive и их итераторы.

  • Cargo: изменения для зависимостей и документации. Теперь зависимость может одновременно указывать Git-репозиторий и альтернативный registry: локально будет использоваться Git-версия, а при публикации — версия из registry, аналогично поведению с crates.io. Также добавлена поддержка target.'cfg(..)'.rustdocflags в конфигурации Cargo.

  • Rustdoc стал аккуратнее обрабатывать документацию. Заметки о deprecated API теперь рендерятся как обычная документация, без прежней специальной обработки через white-space: pre-wrap. Кроме того, rustdoc больше не выдаёт lint missing_doc_code_examples для элементов внутри impl, а в боковой панели документации методы и ассоциированные функции разделяются отдельно.

  • Возможные несовместимости. В релизе есть несколько изменений, которые могут проявиться на нетипичном коде: исправлена раскладка некоторых #[repr(Int)] enum в крайних случаях, запрещены некоторые бесполезные unsize-приведения в Pin<Foo>, WebAssembly-сборки теперь падают при неопределённых символах, случайно стабилизированный атрибут #![reexport_test_harness_main] снова закрыт feature gate’ом, удалён параметр -Csoft-float, а минимальная версия внешнего LLVM повышена до 21. Для AVR изменён тип c_double на f32, поскольку на этих целях C double по умолчанию является 32-битным.

>>> Источник

★★★★★

Проверено: cetjs2 ()

чё такие gRustny комментарии

разрешена передача expr-метапеременных макросов в cfg
скорректировано приведение never-type в выражениях-кортежах
снова разрешено использовать константы типа ManuallyDrop как шаблоны

эксперты поясните

Bad_ptr ★★★★★
()
Последнее исправление: Bad_ptr (всего исправлений: 1)

На опеннете заметка про релиз раста сопровождается следующей интересной заметкой:

Дополнительно можно отметить публикацию (PDF) результатов анализа пригодности языка Rust для разработки прошивок для микроконтроллеров и встраиваемых систем с ограниченными ресурсами. Исследование проведено компанией STMicroelectronics при участии нескольких европейских университетов. Двум изолированным командам разработчиков была поставлена задача по реализации одной и той же прошивки для микроконтроллеров STM32U585AI с ядром Arm Cortex-M33. Первая команда создавала прошивку на Си, а вторая на Rust.

Тестирование выполненной работы не выявило заметных преимуществ в использовании языка Си вместо Rust при разработке прошивок для микроконтроллеров при сравнении потребления памяти и производительности. Более того, задействование написанного на Rust системного runtime от открытого проекта Ariel OS позволило добиться потребления памяти в проекте на Rust ниже, чем в реализации на языке Си, использующей традиционный стек для разработки прошивок на базе библиотеки newlib.

Размер результирующей прошивки составил 84100 байт в проекте на Rust и 76744 байта в проекте на Си (на 10% меньше), но потребление оперативной памяти в прошивке на Rust оказалось значительно ниже - 24640 байтов против 42608 байтов. Что касается производительности, то при тестировании начальных прототипов, разработанных за 6 недель, реализация на Rust в два раза опережала, реализацию на Си, но обе реализации значительно отставали от расчётной максимальной производительности. После 4 недель, выделенных на оптимизацию, обе реализации достигли примерно одинакового результата, близкого к расчётному максимуму. 

Этот Ariel OS - прикольная штука. Позволяет писать код для микроконтроллеров на расте почти без бойлерплейта, как на микропитоне. Правда поддерживает только 32 бит архитектуры, но более древние сейчас не имеет смысла использовать.

yvv1 ★★
()
Последнее исправление: yvv1 (всего исправлений: 1)

«Страшную весть принёс я в твой дом, Надежда. Зови детей⁠⁠...»

Smacker ★★★★★
()

А где «СТАБИЛЬНОСТЬ»????

Где стандарт, на который можно опираться а не ловить какие-то «Изменения в языке» или «снова разрешено использовать константы типа ManuallyDrop как шаблоны» от версии к версии?

Если я вписал "-std=c99", то буду уверен, что оно скомпилится и в 2010м году и в 2030м. А тут?

Это и проблема раста - нет стабильной версии, которая могла бы претендовать на стандарт ISO (просто тупо не меняйте поведение уже написанного, расширяйте, а не меняйте)

drfaust ★★★★★
()
Последнее исправление: drfaust (всего исправлений: 1)
Ответ на: комментарий от drfaust

Ты ничего не понимаешь. А как ты будешь в 2156-м собирать свою прогу с самыми свежими версиями 167393 тысяч зависимостей из крейтсов? Тоже им флаг -стд=ц69 поставишь хаха

BruteForce ★★★★
()

добавлена поддержка векторных регистров s390x в inline assembly

s390x — это 64-битная версия архитектуры IBM z/Architecture, которая используется в мейнфреймах IBM (например, zSeries, Linux on IBM Z).

Векторные регистры в этом контексте — это регистры, появившиеся с расширением z/Architecture vector facility (также известным как «SIMD facility» для z13 и новее).

Saakx
()

очередной стабильной версии Если она очередная, то не значит что там было все стабильно, скорее пофиксили, а план разработок должен быть поставлен давно. Хотя мало ли чего ещё могли добавлять, но не суть. Обычно у всего свой предел.

REDDERa
()

Эх, пошли всякие костыли из-за обратной совместимости. Язык заматерел. Это грустно.

vbr ★★★★★
()

И безопасность стала ещё безопаснее, надёжность стала ещё надёжнее, а стабильность - ещё стабильнее... ;))

«Виват!..»??.. ;)))

Somebody ★★★★
()
Ответ на: комментарий от bernd

Опять сказки об абстрактно-безопасном расте.

Еще раз: раст защищает только от ошибок памяти. Только. От. Ошибок. Памяти.

От логических ошибок не защищает ничего, кроме верифицируемых языков с возможностью формального математического доказательства корректности алгоритмов.

liksys ★★★★
()
Последнее исправление: liksys (всего исправлений: 1)
Ответ на: комментарий от liksys

сысле? мне каждый второй любитель руста рассказывает какой он безопасный и защищенный. правда я не уверен, что они на нем хоть 1 коммерческое приложение написали и поддерживают его код.

bernd ★★★★★
()
Ответ на: комментарий от bernd

сысле? мне каждый второй любитель руста рассказывает какой он безопасный и защищенный. правда я не уверен, что они на нем хоть 1 коммерческое приложение написали и поддерживают его код.

Так надо же понимать, что он «безопасный и защищенный» ровно до тех пор, пока они на нём ничего серьёзного не написали... ;P ;)))

Somebody ★★★★
()
Последнее исправление: Somebody (всего исправлений: 1)
Ответ на: комментарий от bernd

Любители раста говорят об ошибках памяти, а ты их слушаешь жопой, а потом бежишь высмеивать то, что изначально сам неправильно понял.

правда я не уверен, что они на нем хоть 1 коммерческое приложение написали и поддерживают его код

RustDesk, например.

liksys ★★★★
()
Ответ на: комментарий от bernd

мне каждый второй любитель руста рассказывае

Ты просто врунишка и фантазёр.

yvv1 ★★
()
Ответ на: комментарий от yvv1

Научить встройщиков stm32 расту? Миссия невыполнима, у них от упоминания с++ в микроконтроллерах припадки начинаются.

Lusine
()

Идеально. Все остальные статьи о недоязыке для говнокодеров должны быть только таким бездарным нейрослопом 👍

Lrrr ★★★★★
()
Ответ на: комментарий от Lusine

Да пофиг у кого что там начинается. Факт тот, что есть куча электронщиков любителей, которые программировать как правило не умеют, но имеют кучу офигительных идей в головах. У них недаром микропитон супер популярен. А раст даёт не только минимум бойлерплейта, но и минимум оверхеда по сравнению с сями. Сплошной профит короче.

yvv1 ★★
()
Ответ на: комментарий от yvv1

Полно людей с идеями в голове, типа доставок пенсий роботами-прыгунами в отдаленные районы. А вот людей, способных поставить задачу, разбить ее на проработанные этапы, написать ТЗ и реализовать его в железе исчезающе мало.

Lusine
()
Ответ на: комментарий от yvv1

А замена питона на раст, для людей не умеющих программировать, вместо сплошного профита даст неиллюзорный геморрой.

Lusine
()
Ответ на: комментарий от Lusine

Да никакого гемороя с растом нет, это всё миф. Неиллюзорный геморой это кодить всё на сях из дурацкого принципа.

yvv1 ★★
()
Ответ на: комментарий от yvv1

Когда у чела 10 лет опыта программирования встройки, это не дурацкий принцип. Зачем ему теперь идти но новым граблям, но уже с раст? И где Keil или IFR работающие с раст?

Lusine
()
Ответ на: комментарий от Lusine

Жесть какая, ничего что это языки о разном и для разного? Они используются вместе, а не вместо.

А для людей, не умеющих программировать и сам питон принесет неиллюзорный геморрой.

LightDiver ★★★★★
()
Ответ на: комментарий от Lusine

Если у человека 10 лет опыта, он легко увидит пользу инструментов и как их использвать. Тут с парой то лет опыта хочется автоматизации и возникает понимание как и куда.

Rust активно проникает в embedded, но пока не заменил C/C++ в критически важных сертифицированных системах (хотя квалифицированный компилятор Rust для ISO 26262 и IEC 61508 уже существует).

Просто надо понимать, что ты используешь, где используешь и почему используешь.

LightDiver ★★★★★
()
Ответ на: комментарий от Lusine

Такие вещи, как микропитон или раст с продвинутыми sdk типа Ariel OS, делают embedded разработку более доступной для масс, и это очень хорошо. А дундуки пусть так и пердят в дудуку над своей «илитной» сишечкой, никто не запрещает.

yvv1 ★★
()
Последнее исправление: yvv1 (всего исправлений: 1)
Ответ на: комментарий от yvv1

Дункукам за пердеж на сишечке неплохо платят, а на массы традиционно всем похрен, поэтому раста в промке еще лет 15 точно не будет.

Lusine
()

@yvv1 @LightDiver если вы вдруг не в курсе, то разговаривать с @Lusine никакого смысла нет: это первостатейный ламер и болтун, не имеющий никакого понятия не только о языках программирования, но и о линуксах вообще. Это как минимум пустая трата времени.

liksys ★★★★
()
Ответ на: комментарий от liksys

Вот же какой ты противный и злопамятный, фу.

Lusine
()
Ответ на: комментарий от yvv1

При этом идея и минимально-работающий прототип зачастую гораздо ценнее, чем идеально вылизанная реализация. Потому что вылизать - всегда успеется, особенно силами наемных сотрудников. А вот придумать и запустить жизнеспособную идею - это дорогого стоит.

liksys ★★★★
()
Ответ на: комментарий от LightDiver

Раст сегодня, это АДА вчера, вся сертифицированная-пересертифицированная и военами и космонавтиками, тоже хайпт раздули до небес, что вся такая супернадежная и серебрянная пуля для встройки ответственных применений. Однако после того, как долбанулась ракетка за 500 млн. под ее управлением все во главе с NASA как-то резко заткнулись и отползли обтекать в кусты, про нее теперь не слышно вообще.

Lusine
()
Ответ на: комментарий от Lusine

Да что ж ты такое несешь то? А ты вообще про АДА и и Раст слышал от соседа, который тебе напел или сам работал?

LightDiver ★★★★★
()
Ответ на: комментарий от LightDiver

Он еще по стеблю боба на луна лазил. А Баба-Яга на метле с турбиной летала в средние века.

Lusine
()
Ответ на: комментарий от LightDiver

Авария ракеты-носителя «Ариан-5». Ракета разрушилась на 40-й секунде полёта из-за неверной работы бортового программного обеспечения на языке АДА.

Этот запуск стал одной из самых дорогостоящих компьютерных ошибок — оценки только материальных потерь варьируются от 360 до 500 млн долларов по курсу 96 года.

Lusine
()
Ответ на: комментарий от Lusine

Авария ракеты-носителя «Ариан-5»

Скормил ИИшке, лениво гуглить:

Вы упомянули Ada в предыдущем вопросе, и здесь связь прямая. ПО навигационной системы было написано на Ada.

Ada был не виноват. Виноваты инженеры, которые отключили его защиту.

    Как работает Ada: Язык спроектирован так, чтобы ловить такие ошибки. Если бы код был написан "правильно", при попытке загнать большое число в маленькую переменную компилятор Ada или среда выполнения (runtime) выбросили бы исключение Constraint_Error, и программа бы безопасно завершила этот блок.

    Что сделали люди: Инженеры, анализируя надежность, решили, что все проверки защиты (exception handling) для этого блока не нужны и их можно отключить, чтобы сэкономить процессорное время (загрузка процессора была под 80%). Они исходили из постулата: «Этот блок физически не может вызвать переполнение, мы это доказали для Ариан-4».

Ирония судьбы: Защиту отключили в том самом блоке, который больше всего в ней нуждался. Если бы проверку оставили, процессор зафиксировал бы ошибку, просто перезагрузил бы навигационный модуль (без отправки мусора на шину управления), и ракета продолжила бы полёт на резервном оборудовании.
LightDiver ★★★★★
()
Ответ на: комментарий от LightDiver

лениво гуглить

Вот до чего «ИИ» доводит. :(
https://ru.wikipedia.org/wiki/Авария_ракеты-носителя_«Ариан-5»:

Возникшая ошибка в программном модуле ИСО произошла во время конвертации 64-битного вещественного числа в 16-битное знаковое целое, и при этом случилось арифметическое переполнение последней. Эта переменная (E_BH, англ. Bias Horizontal, горизонтальное смещение) показывала горизонтальное смещение инерционной платформы и была связана с горизонтальной скоростью ракеты[10]. В программном модуле, вызвавшем ошибку, было семь переменных, из которых четыре были защищены. Строка программного кода, при выполнении которого произошла ошибка, выглядит следующим образом[11]:

P_M_DERIVE(T_ALG.E_BH) := UC_16S_EN_16NS(
                                  TDB.T_ENTIER_16S(
                                      (1.0 / C_M_LSB_BH) * G_M_INFO_DERIVE(T_ALG.E_BH)
                                  )
                              );

Особенностью задействования данного модуля являлось то, что система «Ариан-5» имела другой порядок выполнения предполётных действий, отличающийся от «Ариан-4». Данная разница была настолько большой, что работа сбойного программного модуля после старта не была нужна, но модуль использовался повторно без каких-либо модификаций.

Комиссии удалось быстро найти ошибку[к. 2] из-за наличия данных измерений, имитационных сред и документации. Метеорологические данные исключали влияние погоды, телеметрия позволила определить реальные данные траектории полёта. Это позволило сузить область потенциальных дефектов и на основании полученной информации провести имитационное моделирование, которое точно воспроизвело цепь событий, приведших ракету к аварии[4].

dataman ★★★★★
()
Ответ на: комментарий от dataman

Ну? Все верно. Дебилы разработчики запихали ненужный модуль куда не надо. Отключили все чекинги. Но виноват язык.

И да, раст тут тоже не поможет - в нем тоже можно ансейф и отключить все вручную при желании.

LightDiver ★★★★★
()
Последнее исправление: LightDiver (всего исправлений: 1)
Ответ на: комментарий от LightDiver

Бред собачий.

"Вскоре после старта ошибочный программный модуль попытался просчитать значение, исходя из горизонтальной скорости ракеты. Так как это значение было значительно больше, чем то, которое было у «Ариан-4», то возникла ошибка.

В дальнейшем эти данные были прочитаны бортовым компьютером, который на их основании дал команду соплам твердотопливного ускорителя и главному двигателю. Данная команда требовала полного отклонения сопел, а это вызвало то, что ракета вышла на запредельную траекторию.

На новой траектории ракета начала разрушаться и это запустило её самоуничтожение."

http://arc.aiaa.org/doi/pdf/10.2514/6.2000-3574

Lusine
()
Ответ на: комментарий от dataman

Нет! Если бы они не отключили защиту целенаправленно.

UC_16S_EN_16NS

Вот это что значит? Правильно можно написать и отключив защиту. Дело не в правильности.

Вот представь, у тебя распиловочный станок - пилорама. В нем защита от отрубания рук. При замыкании цепи диск мгновенно уходит вниз. Есть такие защиты. И тут от тебя приходит претензия: Мы тут отключили вашу тупую защиту и нашему распиловщику отрубило руку!

Замечаешь нелепость ситуации?

LightDiver ★★★★★
()
Ответ на: комментарий от LightDiver

Хостади, да всем насрать. Главное люди запомнили, что супернадежная и сертифицированная насквозь АДА запустила за счет налогоплательщиков файерверк стоимостью $500 млн.

Lusine
()
Ответ на: комментарий от dataman

А ты видишь разницу между:

  1. Защиту можно иногда отключить, что изредка может привести к проблеме

  2. Никаких защит, проблемы будут почти всегда

Вот я вспоминаю как я писал на си - текло всегда. Падало через раз. И как на раст - за все врмя уронить программу я умудрился всего один раз, когда забил на проверку и оставил общую заглушку. Причем заметь, даже при падении раст не привеет к утечке, размотав весь стек обратно.

LightDiver ★★★★★
()
Последнее исправление: LightDiver (всего исправлений: 2)
Ответ на: комментарий от Lusine

Я так понимаю, в машинах ты не пристегиваешься?

LightDiver ★★★★★
()
Ответ на: комментарий от drfaust

Там есть editions, но толку, если все только в самом свежем.

galanthus
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.