Webassembly 多个模块?
Webassembly multiple modules?
假设我们有以下内容:
(module)
只是一个简单的模块,没有函数、局部变量、内存和所有花哨的东西。
现在如果我不想让我的模块过多怎么办?我的意思是 id 喜欢有两个模块,但我在尝试编译类似以下内容时显然会出错:
(module)
(module)
那么有没有办法给每个模块一个自己的内存或者id呢?或者有什么办法吗?它甚至有意义吗?我只是说因为一个模块真的可以变得很大。
我试图完成的是在两个模块之间进行通信,因为我相信防止模块变得太大是有意义的。我是 webassembly 的新手,所以也许我说的听起来很疯狂。
WebAssembly 模块类似于磁盘上的可执行文件:它们尚未加载到内存中。
WebAssembly 实例使模块栩栩如生。您可以多次实例化同一个模块,也可以实例化多个模块。实例化将加载模块、编译/验证它、初始化它的全局变量和内存(如果有的话)、填充导出,然后调用它的启动函数。
您的示例使用 s-expression 语法,但您没有指定如何执行 WebAssembly。 s-expression 本身只是文本,需要嵌入器才能 运行 编译结果!
在 JavaScript 中嵌入 the API 具有 WebAssembly.Module
和 WebAssembly.Instance
构造函数,以及 WebAssembly.compile
和 WebAssembly.instantiate
函数(两者都有效,WebAssembly.instantiate
更简单/更好)。您将实例构造函数/函数传递给导入对象。 WebAssembly 内存要么通过在二进制文件中声明内存部分(然后在实例化时自动创建内存),要么通过导入对象导出。
您甚至可以通过创建多个模块来执行动态链接,通过在它们之间共享内存来实例化它们,并让它们导入/导出彼此的函数。
在规范解释器中,您可以声明多个经过验证的模块,并且您有额外的帮助程序来检查它们。请参阅 this test 开头:
(module "[=10=]asm[=10=][=10=][=10=]")
(module "[=10=]asm" "[=10=][=10=][=10=]")
(module $M1 "[=10=]asm[=10=][=10=][=10=]")
(module $M2 "[=10=]asm" "[=10=][=10=][=10=]")
(assert_malformed (module "") "unexpected end")
(assert_malformed (module "") "unexpected end")
有a specification for linkable WebAssembly modules. It is non-official and optional, but if you create your WebAssembly modules so that they conform to this specification, you can use a linker like LLVM’s lld
到link个。
假设我们有以下内容:
(module)
只是一个简单的模块,没有函数、局部变量、内存和所有花哨的东西。 现在如果我不想让我的模块过多怎么办?我的意思是 id 喜欢有两个模块,但我在尝试编译类似以下内容时显然会出错:
(module)
(module)
那么有没有办法给每个模块一个自己的内存或者id呢?或者有什么办法吗?它甚至有意义吗?我只是说因为一个模块真的可以变得很大。
我试图完成的是在两个模块之间进行通信,因为我相信防止模块变得太大是有意义的。我是 webassembly 的新手,所以也许我说的听起来很疯狂。
WebAssembly 模块类似于磁盘上的可执行文件:它们尚未加载到内存中。
WebAssembly 实例使模块栩栩如生。您可以多次实例化同一个模块,也可以实例化多个模块。实例化将加载模块、编译/验证它、初始化它的全局变量和内存(如果有的话)、填充导出,然后调用它的启动函数。
您的示例使用 s-expression 语法,但您没有指定如何执行 WebAssembly。 s-expression 本身只是文本,需要嵌入器才能 运行 编译结果!
在 JavaScript 中嵌入 the API 具有 WebAssembly.Module
和 WebAssembly.Instance
构造函数,以及 WebAssembly.compile
和 WebAssembly.instantiate
函数(两者都有效,WebAssembly.instantiate
更简单/更好)。您将实例构造函数/函数传递给导入对象。 WebAssembly 内存要么通过在二进制文件中声明内存部分(然后在实例化时自动创建内存),要么通过导入对象导出。
您甚至可以通过创建多个模块来执行动态链接,通过在它们之间共享内存来实例化它们,并让它们导入/导出彼此的函数。
在规范解释器中,您可以声明多个经过验证的模块,并且您有额外的帮助程序来检查它们。请参阅 this test 开头:
(module "[=10=]asm[=10=][=10=][=10=]")
(module "[=10=]asm" "[=10=][=10=][=10=]")
(module $M1 "[=10=]asm[=10=][=10=][=10=]")
(module $M2 "[=10=]asm" "[=10=][=10=][=10=]")
(assert_malformed (module "") "unexpected end")
(assert_malformed (module "") "unexpected end")
有a specification for linkable WebAssembly modules. It is non-official and optional, but if you create your WebAssembly modules so that they conform to this specification, you can use a linker like LLVM’s lld
到link个。