问题标签 [webassembly]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
webassembly - WebAssembly 中的 double 数据是如何生成的?
在 Webassembly 中如下:
类似于此 WAST:
我已经弄清楚了它如何处理整数(通过使用十六进制数字),但我看到的双精度不是我熟悉的通常的十六进制。
例如,整数 15 等价于:“\0f\00\00\00”,我理解,但它对双打是如何工作的。它是什么类型的十六进制,什么定义了数据部分内的偏移量?
llvm - 哪些语言可以编译成 WebAssembly (Wasm)?
哪些语言可以编译成 WebAssembly (Wasm)?
我相信现在可以使用 llvm 编译器后端将 C、C++ 和 Rust(实验性)编译为 WebAssembly,目前不支持 Java、Swift 和 C# 等语言,但可能是未来开发的候选者。
我不相信 JavaScript 可以编译成 Wasm。 https://github.com/WebAssembly/design/issues/219
webassembly - Webassembly增长内存和导入malloc
阅读规范后,我试图增加一些内存并执行以下操作:
现在我希望如果我们输入 10,我们的页面大小是 11 的倍数,所以类似于:
变成
由于堆栈没有清空,我不得不添加一个返回值。现在我假设该方法如果成功则返回-1以外的其他内容,对吗?在这种情况下,我认为它有效,我应该有更多的页面。
我知道也有 JS 方式,但我更喜欢直接在 WebAssembly 中完成所有这些工作。有趣的是,我们可以从“Env”中导入诸如 malloc、free、strcopy 等 C 函数。
所以我的问题是:我增加内存的方法是否正确?我应该导入 C 风格的模块吗?grow_memory 和 realloc() 之间有什么关系,或者说区别?
webassembly - Webassembly (WAST) 和 bitclear?
假设我想将小写字母转换为大写字母。显然,我需要清楚地这样做:
所以是这样的:
变成这样:
我们是否有类似 bitclearing 的功能,以便我们可以清除字节内的位?一个浪费的例子将不胜感激。
webassembly - 了解类结构和构造函数调用
玩过循环、分支、表格和所有这些不错的运算符后,我几乎开始对这种语言感到满意,足以创建一些有用的东西,但有些逻辑我仍然不明白。请耐心等待,因为它会有点长。
问题:有人能解释一下翻译后的代码是如何工作的吗?我在下面进一步添加了具体问题。
首先是一些我一直在转换的琐碎的 c++ 代码:
翻译成:
所以现在我对这里实际发生的事情有一些疑问。虽然我认为我理解了大部分内容,但仍有一些事情我不确定:
例如查看构造函数及其签名:
它有以下参数:(param $0 i32)
我假设它是在主函数中定义的一些局部。让我们说一些记忆。但是,我们知道我们在 main 函数中有 4 个实例,这意味着所有这些实例都保存在同一个 (local $0 i32)
但具有不同偏移量的内部,我是对还是错?
接下来让我们看一下对构造函数的调用:
我们调用构造函数并传入 3 个参数。究竟是为了什么?我们是否在本地添加空间?仔细观察,对于每个构造函数调用,这个数字都会减少 16(我从上到下阅读代码),大约是一个单词的大小。我不知道这意味着什么。
最后我们有:
它甚至加载了什么以及为什么要减法?我的意思是它设置一个本地并返回它,以便我们可以将它存储在偏移量为 4 的线性内存中?偏移量 4 与什么有关?
google-chrome - WebAssembly Post-MVP 之后原生客户端的未来
我确信在 WebAssembly Post-MVP 之后,asm.js 将被弃用。即使是现在,一些现有的 asm.js 项目已经开始使用 WebAssembly。JS 引擎(V8)也开始将 asm.js 编译为 WebAssembly,因此即使旧项目永远不会迁移,最终用户仍然会从 WebAssembly 中获得部分优势。
我的问题是,那么本地客户端呢?它没有在 JS 引擎中实现,所以这可能是一个问题。即使是现在,本机客户端似乎也已被弃用。在可预见的将来,原生客户端会从 Chrome 中完全删除吗?我希望看到 Chrome 的二进制大小有所减少。
附带问题:
- 在 WebAssembly 中包含 thread/gc/simd/exception 之后,WebAssembly 中是否还有 native-client 有但缺少的东西(阻止迁移)?
- WebAssembly 花了大约 2 年才达到 MVP,任何一个 Post-MVP 的预期时间是多少?
- 看起来 WebAssembly 小组正在一次处理多个 Post-MVP 特性,而不是一个一个地处理,这不会减慢最终确定其中一个特性的速度吗?
webassembly - WebAssembly 堆栈/堆栈指针初始化和内存布局
我目前正在玩弄通过 LLVM 编译的 WebAssembly,但我还没有设法理解堆栈/堆栈指针以及它与整体内存布局的关系。
我了解到我必须使用s2wasm
with--allocate-stack N
来使我的程序运行,我认为这基本上是(data (i32.const 4) "8\00\00\00")
在我生成的浪费中添加(N = 8),二进制部分显然是指向内存偏移量的指针,而 i32 常量是它的线性内存中的偏移量。
但是,我不太明白的是为什么指针的值是56
(再次使用 N=8)以及该值与内存中堆栈的确切区域的关系,在我的情况下,当前看起来像:
0-3: zero
4-7: 56
7-35: other data sections
36-55: zeroes
56-59: zero
我知道我可能更适合“只使用 emscripten”,但我也想了解这一点。
- 堆栈指针是否总是存储在线性内存中的偏移量 4 处?
- 它的初始值是如何计算的?(与数据后的下一个偏移量%16==0 + N 对齐?)
- 之前存储了什么,它指向的偏移量之后是什么?
c++ - 指向本地结构的指针如何转换为 webassembly?
不幸的是,我无法获得一个工作工具链来将 C/C++ 编译为 wasm 文件,但我希望一个善良的灵魂可以帮助我。给定程序片段:
wasm 代码是my_program
什么样的?