重新考虑添加 WebAssembly (WASM) API
#7745 已经关闭,没有详细说明原因。从 WebAssembly.org 来看: > WebAssembly(缩写为 WASM)是一种基于堆栈的虚拟机的二进制指令格式。WASM 旨在作为一种可移植的编译目标语言,可在 Web 上部署用于客户端和服务器应用程序。 > WebAssembly 描述了一个内存安全、沙箱化的 执行环境 […] > WebAssembly 还支持 非 Web 嵌入。 Rust+WASM vs Lua vs LuaJIT 性能基准 WASM 已经被其他游戏引擎用作脚本平台。优点: - 可以让人们使用自己喜欢的语言编写模块 - 可以改善安全状况(特别是在 SSCSM 方面) - 使用低级/高性能语言的模块可以更高效 - WASM 运行时正在积极维护,不像 LuaJIT 那样。 Lua 是一个初学者友好、快速和人性化的脚本语言。但是,为了维护大型代码库,不得不在动态类型语言中工作会带来负担。我已经维护了 100KLOC 的 MineClone2 代码库,并部分地因为意外崩溃而退出(以及社区如何处理它们)。对 MineClone2 bug tracker 的查看表明,许多崩溃都是类型错误或 nil 值错误。存在静态类型和静态分析的语言,可以防止这两种错误类型。Lua 可能仍然是大多数模块的最佳选择,特别是对初学者来说,但我认为社区同意,Minetest 还需要更多高成本的游戏,因为这是游戏引擎的主要用途。WASM 将提供选择。为了兼容性,Lua 内建必须“模拟”Lua API 的部分,这些部分以前由 C++ 提供,通过调用新的 WASM API。用不同语言编写的模块可能只能与同一语言编写的模块进行互操作,除非模块作者花费额外的努力来为他们的工作提供跨语言 API。在 #7745 中,Babel 被提议作为解决方案。在某些情况下,用不同语言编写的某些模块甚至可能不兼容彼此使用。ContentDB 可能需要托管使用编译语言的模块的二进制包。
内容来源: luanti-org/luanti