- 开发者引导
- 理解 JS API
- 高级工具
- JavaScript API
- FAQ 常见问题
- 最小可行性版本
- Features to add after the MVP
- Modules
- 语义
- Binary Encoding
- Web Embedding
- Text Format
- Design Rationale
- Security
- Nondeterminism in WebAssembly
- Guide for C/C++ developers
- Feature Test
- Tooling support
- GC / DOM / Web API Integration :unicorn:
- JIT and Optimization Library
- Dynamic linking
- WebAssembly 的长久目标
- 非网络嵌入
- 可移植性
- 使用场景
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
可移植性
WebAssembly的二进制格式是被设计成可在不同操作系统与指令集上高效执行的,无论在Web或非Web环境中。
对高效执行的设想
尽管执行环境是有条件的,本地的,不确定的,也不要向WebAssembly提供下述特性。有些情况下为了WebAssembly模块执行,也许不得不模拟一些宿主硬件或操作系统不提供的特性,让它们似乎被支持。这种情况将会导致糟糕的性能。
随着WebAssembly的标准化推进,我们期望将这些需求也能被固定下来。WebAssembly在设计之初就应该适配未来的平台。
WebAssembly可移植性假定执行环境提供下列特性:
- 8位字节。
- 内存可按字节维度寻址。
- 支持未对齐的内存访问或因软件仿真导致的已知缺陷。
- 32位有符号整数有两个补码,64位可选。
- IEEE 754-2008 32位和64位浮点数,除了一些例外。
- 小端字节序。
- 可使用32位指针或索引有效处理内存区域。
- WebAssembly64 使用64位指针或索引额外支持大于4GB的线性内存。
- 执行在同一机器上的WebAssembly模块与其他模块或进程强制安全隔离
- 提供一个进程担保所有线程的执行的执行环境(即便它们以非并行方式执行)
- 访问8、16、32位自然对齐内存时,可用无锁原子运算符。至少也要包含一个原子级的比较和交换运算符(或同等的加载连接/条件存储)。
- WebAssembly64 访问64位自然对齐内存时,额外需要无锁原子运算符。
API
WebAssembly没有指定任何API或系统调用,只有一个导入机制,需宿主环境定义一组可导入对象。Web环境中,方法通过由开放Web平台制定的Web APIs访问。非Web环境中可以执行一些基础的Web APIs,基础的非Web APIs(例如POSIX),或者自己发明一个。
源码级别
C/C++级别的可移植性可用过面向一个基础API(例如POSIX)编码达成,也可以依赖编译时(通过#ifdef
)或运行时(通过 功能发现)和动态加载/链接)编译器和/或库向宿主环境的可用导入们提供的基础接口达成。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论