根据 Rust 官方博客 4 月 4 日发布的公告,Rust 中面向 WebAssembly 的目标配置即将迎来一项变更,可能导致现有项目出现兼容性问题。公告指出,Rust 中所有 WebAssembly 目标此前均通过向 wasm-ld 传递 --allow-undefined 标志进行链接,而这一标志即将被移除。
移除 WebAssembly 目标中 --allow-undefined 标志的工作正在 rust-lang/rust#149868 中推进。该变更预计近期登陆 nightly 构建版本,并将随 Rust 1.96 于 2026 年 5 月 28 日正式发布。公告解释称,Rust 中所有 WebAssembly 二进制文件均通过 wasm-ld 进行链接生成,其作用类似于 ld、lld 和 mold 等链接器。自 Rust 首次引入 WebAssembly 目标支持以来,--allow-undefined 标志便一直被传递给 wasm-ld。
然而,公告指出,在所有 WebAssembly 目标上统一传递 --allow-undefined,会导致 rustc 在 WebAssembly 平台与其他平台之间产生行为差异。--allow-undefined 的主要风险在于:构建过程中的配置错误或操作失误,可能导致生成存在缺陷的 WebAssembly 模块,而不是触发编译错误。公告列举了以下几种典型问题场景:
若 mylibrary_init 被误写为 mylibraryinit,最终生成的二进制文件将导入 mylibraryinit 符号,而非调用已链接的 mylibrary_init C 符号。
若 mylibrary 在构建最终应用时误未被编译和链接,则 mylibrary_init 符号将以导入方式处理,而不会触发链接器报出"符号未定义"的错误。
若使用 wasm-bindgen 或 wasm-tools component new 等外部工具处理 WebAssembly 模块,这些工具往往会给出与原始源代码缺乏关联的错误提示,难以追溯问题根源。
类似 Uncaught TypeError: Failed to resolve module specifier "env". Relative references must start with either "/", "./", or "../" 的 Web 错误,可能意味着 "env" 意外泄漏至最终模块中,而真正的错误根源是未定义符号问题,而非缺少 "env" 相关定义。
在所有原生平台上,未定义符号默认被视为错误。因此,通过传递 --allow-undefined,rustc 在 WebAssembly 目标上引入了出人意料的行为。公告表示,此次变更的目标正是消除这一异常,使 WebAssembly 的行为更接近原生平台。
不过,公告最后指出,理论上此次变更预计不会造成大范围的破坏。如果最终生成的 WebAssembly 二进制文件导入了意外符号,该二进制文件在目标运行环境中很可能本就无法正常运行,因为该环境可能并未提供相应的符号定义。因此,大多数情况下,此次变更不会对用户造成影响,反而能提供更清晰的错误诊断信息。
Q&A
Q1:Rust 移除 --allow-undefined 标志会在什么时候生效?
A:该变更预计近期进入 Rust 的 nightly 构建版本,并将随 Rust 1.96 版本于 2026 年 5 月 28 日正式对外发布。开发者可以提前关注 nightly 版本的变化,及时测试自己的项目是否受到影响。
Q2:移除 --allow-undefined 后,现有的 WebAssembly 项目会受到什么影响?
A:大多数项目预计不会受到明显影响。如果项目中存在未定义符号,此前可能只是生成有缺陷的模块而不报错,变更后将直接触发链接错误,反而有助于更早发现问题。只有那些依赖未定义符号导入行为的项目才可能出现兼容性问题。
Q3:为什么 Rust 要移除 WebAssembly 目标中的 --allow-undefined 标志?
A:主要原因是该标志导致 WebAssembly 平台与其他原生平台的行为不一致。在原生平台上,未定义符号默认会触发错误,而 --allow-undefined 绕过了这一机制,容易掩盖构建过程中的配置错误,导致生成存在问题的模块,且错误信息难以追溯。移除该标志可使 WebAssembly 行为与原生平台保持一致,并提供更清晰的错误诊断。
好文章,需要你的鼓励
Replit与RevenueCat达成合作,将订阅变现工具直接集成至Replit平台。用户只需通过自然语言提示(如"添加订阅"),即可完成应用内购和订阅配置,无需离开平台。RevenueCat管理超8万款应用的订阅业务,每月处理约10亿美元交易。此次合作旨在让"氛围编程"用户在构建应用的同时即可实现商业变现,月收入未达2500美元前免费使用,超出后收取1%费用。
LiVER是由北京大学、北京邮电大学等机构联合提出的视频生成框架,核心创新是将物理渲染技术与AI视频生成结合,通过Blender引擎计算漫反射、粗糙GGX和光泽GGX三种光照图像构成"场景代理",引导视频扩散模型生成光影物理准确的视频。框架包含渲染器智能体、轻量化编码器适配器和三阶段训练策略,支持对光照、场景布局和摄像机轨迹的独立精确控制。配套构建的LiVERSet数据集含约11000段标注视频,实验显示该方法在视频质量和控制精度上均优于现有方法。
所有人都说AI需要护栏,但真正在构建它的人寥寥无几。SkipLabs创始人Julien Verlaguet深耕这一问题已逾一年,他发现市面上多数"护栏"不过是提示词包装。为此,他打造了专为后端服务设计的AI编程智能体Skipper,基于健全的TypeScript类型系统与响应式运行时,实现增量式代码生成与测试,内部基准测试通过率超90%。他认为,编程语言的"人类可读性时代"正走向终结,面向智能体的精确工具链才是未来。
这项由蒙特利尔学习算法研究所(Mila)与麦吉尔大学联合发布的研究(arXiv:2604.07776,2026年4月)提出了AGENT-AS-ANNOTATORS框架,通过模仿人类数据标注的三种角色分工,系统化生成高质量网页智能体训练轨迹。以Gemini 3 Pro为教师模型,仅用2322条精选轨迹对90亿参数的Qwen3.5-9B模型进行监督微调,在WebArena基准上达到41.5%成功率,超越GPT-4o和Claude 3.5 Sonnet,并在从未见过的企业平台WorkArena L1上提升18.2个百分点,验证了"数据质量远比数量重要"这一核心结论。