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
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.