Rust предупреждает о снятии флага —allow-undefined для wasm-ld в WebAssembly

by Пол Крилл

Editor at Large

Команда Rust предупреждает об изменении WebAssembly
news
7 апр. 2026 г. 3 мин.

Предстоящее удаление флага —allow-undefined для wasm-ld может привести к поломке существующих проектов.

Внимание, предупреждающий знак; восклицательный знак под лупой.

Credit: Тоей Анданте/Shutterstock

WebAssembly для Rust вскоре ждёт изменение, которое может привести к поломке существующих проектов, согласно сообщению от 4 апреля в официальном блоге Rust. В сообщении отмечается, что все цели WebAssembly в Rust связывались с использованием флага --allow-undefined для wasm-ld, но этот флаг будет удалён.

Удаление --allow-undefined для целей wasm выполняется в rust-lang/rust#149868. Ожидается, что это изменение скоро попадёт в ночные сборки и будет выпущено в Rust 1.96 2026-05-28. В сообщении поясняется, что все бинарные файлы WebAssembly в Rust создаются путём линковки с помощью wasm-ld, выполняющего схожую роль с ld, lld и mold. С момента первого появления целей WebAssembly в Rust флаг --allow-undefined передавался wasm-ld.

Однако, передавая --allow-undefined для всех целей WebAssembly, rustc вводит различающееся поведение между другими платформами и WebAssembly, говорится в сообщении. Основной риск --allow-undefined заключается в том, что из-за неправильной настройки или ошибок сборки могут быть созданы неработоспособные модули WebAssembly вместо ошибок компиляции. В сообщении приводятся следующие примеры проблемных ситуаций:

  • Если mylibrary_init по ошибке было набрано как mylibraryinit, то итоговый бинарный файл импортировал бы символ mylibraryinit вместо вызова связанного C-символа mylibrary_init.
  • Если mylibrary по ошибке не был скомпилирован и подключён к итоговому приложению, то символ mylibrary_init оказался бы импортированным вместо выдачи ошибки линковщика о том, что он не определён.
  • Если для обработки модуля WebAssembly используются внешние инструменты, такие как wasm-bindgen или wasm-tools component new, они, вероятно, выдадут сообщение об ошибке, которое не будет явно связано с исходным кодом, из которого были импортированы символы.
  • Веб-ошибки вида Uncaught TypeError: Failed to resolve module specifier "env". Relative references must start with either "/", "./", or "../". могут означать, что "env" неожиданно попал в конечный модуль, а настоящая ошибка — это ошибка неопределённого символа, а не отсутствие предоставленных элементов "env".

По умолчанию на всех нативных платформах неопределённые символы считаются ошибкой. Поэтому, передавая --allow-undefined, rustc вводит неожиданное поведение для целей WebAssembly. Цель изменения — убрать эту неожиданность, чтобы WebAssembly вел себя больше как нативные платформы, говорится в сообщении.

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

Языки программированияRustРазработка ПОWebAssembly


Пол Крилл

by
Пол Крилл

Editor at Large

  1. Подписаться на Пола Крилла в X

Пол Крилл — главный редактор InfoWorld. Пол освещает компьютерные технологии как новостной и специальный репортёр уже более 35 лет, включая 30 лет в InfoWorld. С 1990-х годов он специализируется на освещении инструментов и технологий разработки ПО и продолжает руководить новостным освещением InfoWorld платформ разработки ПО, включая Java и .NET, а также языков программирования, включая JavaScript, TypeScript, PHP, Python, Ruby, Rust и Go. Давно заслуживший доверие как репортёр, который ставит во главу угла точность, честность и интересы читателей, Пол востребован технологическими компаниями и отраслевыми организациями, которые хотят выйти на аудиторию InfoWorld из числа разработчиков ПО и других специалистов в сфере информационных технологий. Пол получил награду IDG «Лучшее освещение технологических новостей».

Ещё от этого автора

  • news

    Visual Studio Code 1.114 упрощает AI-чат

    Apr 6, 2026 3 mins

  • news

    Kotlin 2.3.20 гармонизируется с C, JavaScript/TypeScript

    Mar 27, 2026 3 mins

  • news

    Visual Studio Code предварительно показывает редактор настройки чата

    Mar 26, 2026 3 mins

  • news

    Swift 6.3 усиливает совместимость с C и Android SDK

    Mar 26, 2026 2 mins

  • news

    Инструмент ИИ Claude Code получает автоматический режим

    Mar 25, 2026 2 mins

  • news

    Выходит TypeScript 6.0

    Mar 25, 2026 3 mins

  • news

    Новая платформа JetBrains управляет ИИ-агентами для кодирования

    Mar 24, 2026 3 mins

  • news

    VS Code теперь обновляется еженедельно

    Mar 24, 2026 4 mins

Показать ещё

news

Команда Rust предупреждает об изменении WebAssembly

By Paul KrillApr 7, 20263 mins
Языки программированияRustWebAssembly
Image

news

Databricks запускает многоагентный ИИ AiChemy для поиска лекарств

By Anirban GhoshalApr 6, 20263 mins
Искусственный интеллектУправление даннымиБазы данных
Image

feature

27 вопросов, которые стоит задать при выборе LLM

By Peter WaynerApr 6, 202612 mins
Искусственный интеллектГенеративный ИИРазработка ПО
Image

video

Новый тип frozendict в Python

Apr 2, 20264 mins
Python
Image

video

Как повысить производительность приложения с помощью ленивого импорта Python 3.15

Mar 31, 20266 mins
Python
Image

video

Как запустить свой маленький локальный Claude Code (ну, почти!)

Mar 26, 20267 mins
Python
Image


Материал — перевод статьи с английского.

Оригинал: Rust team warns of WebAssembly change