文档章节

WebAssembly 技术汇总

一个灰
 一个灰
发布于 2018/10/23 17:53
字数 502
阅读 51
收藏 0

官方网站

https://webassembly.org/

要点

  1. 文件格式(wasm,wast/wat,asm.js)
  2. 编译(emscripten)
  3. 编程语言(C/C++、Rust、Golang、Javascript、Typescript)
  4. 执行环境(browser、node.js、kernel)

Mozilla 开发的在线IDE,支持Rust、C、Wat开发WebAssembly https://webassembly.studio/

在线编译C到wasm https://wasdk.github.io/WasmFiddle/

wasm格式

wasm是WebAssembly的二进制字节码,后面将直接用wasm来指代WebAssembly。 要获得wasm格式,可以通过

  1. 使用emscripten编译命令加上参数-s WASM=1来得到
 emcc -o test.js -s WASM=1 test.c

我们将获得一个test.wasm格式的文件和一个test.js文件。 其中test.js中有大量对wasm的封装,方便操控wasm的内存。 2. 使用工具将wast格式转换成wasm格式 https://webassembly.github.io/wabt/demo/wat2wasm/

  1. 其他语言编译得到

wast/wat格式

wast和wat的区别 https://webassembly.js.org/docs/contrib-wat-vs-wast.html wast/wat格式是wasm的文本类型格式,使用的是lisp语言的S表达式。 可以 使用工具将wasm转换成wast/wat格式 https://webassembly.github.io/wabt/demo/wasm2wat/

Asm.js

emscripten 不加参数-s WASM=1即可编译成asm.js的代码,asm.js可以兼容大多数浏览器。

Golang编译成wasm

GOARCH=wasm GOOS=js go build -o test.wasm main.go

JavaScript(walt)编译成wasm

walt项目:https://github.com/ballercat/walt 该项目可以编写javascript代码来生成wasm。 可以通过webpack打包(walt-loader)、walt-cli命令行编译等方式。

npm i walt-cli
walt -- test.walt -o test.wasm

TypeScript (AssemblyScript)

https://assemblyscript.org/

C#编译成wasm

https://github.com/migueldeicaza/mono-wasm https://github.com/aspnet/Blazor

eos中编译成wast

eosiocpp -o test.wast test.cpp

浏览器中调用

fetch('module.wasm').then(response =>
  response.arrayBuffer()
).then(bytes =>
  WebAssembly.instantiate(bytes, importObject)
).then(results => {
  // Do something with the compiled results!
});

Node.js中使用

const fs = require('fs')
const wasmFile = fs.readFileSync('test.wasm')
WebAssembly.instantiate(fs).then(module=>{
  module.exports.xxx()
})

使用Linux内核模式调用wasm

https://github.com/rianhunter/wasmjit

Mac中直接执行wasm

在 Mac 系统下通过 brew install binaryen 安装成功后,通过 wasm-shell f.wasm 文件即可直接运行

© 著作权归作者所有

一个灰
粉丝 28
博文 33
码字总数 21699
作品 3
南京
高级程序员
私信 提问
通过Blazor使用C#开发SPA单页面应用程序(1)

2019年9月23——25日 .NET Core 3.0即将在.NET Conf上发布! .NET Core的发布及成熟重燃了.net程序员的热情和希望,一些.net大咖也在积极的为推动.NET Core而不懈的努力。在这次.NET Core 3.0...

燕马越空
08/13
0
0
WebAssembly已支持所有主流浏览器

Firefox Quantum、Safari、Edge和Chrome一并支持WebAssembly,可以接近原生速度运行Web应用程序。点击【阅读原文】获取原文地址。 作者:Judy DeMocker 译者:王鸿蒙 审校:包研 虽然Mozilla...

livevideostack
2017/11/17
0
0
不安分的 Go 语言开始入侵 Web 前端领域了!

作者 | 老钱 责编 | 胡巍巍 本文经授权转载自“码洞”(ID:codehole) 从 Go 语言诞生以来,它就开始不断侵蚀 Java 、C、C++ 语言的领地。今年下半年 Go 语言发布了 1.11 版本,引入了 WebA...

CSDN
2018/11/13
0
0
继谷歌之后,苹果也宣布加入WebAssembly阵营

  【IT168 编译】6月5日,Google宣布Chrome将不再支持PNaCl,而是将和其他浏览器一起拥抱WebAssembly。近日,苹果也发声表示Safari的开源浏览器引擎WebKit也宣布完全支持WebAssembly。 ▲图...

it168网站
2017/06/09
0
0
Emscripten 将默认 LLVM WebAssembly 为 WASM 后端

Emscripten 是一个独特的 LLVM 后端,它可以将 LLVM 字节码编译成 JavaScript(asm.js),往上追溯其实也就是通过 Clang 将 C 和 C++ 代码编译成 JavaScript(asm.js),可以大大简化现有代码...

h4cd
08/06
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

Navicat 快捷键

操作 结果 ctrl+q 打开查询窗口 ctrl+/ 注释sql语句 ctrl+shift +/ 解除注释 ctrl+r 运行查询窗口的sql语句 ctrl+shift+r 只运行选中的sql语句 F6 打开一个mysql命令行窗口 ctrl+l 删除一行 ...

低至一折起
52分钟前
5
0
PyTorch入门笔记一

张量 引入pytorch,生成一个随机的5x3张量 >>> from __future__ import print_function>>> import torch>>> x = torch.rand(5, 3)>>> print(x)tensor([[0.5555, 0.7301, 0.5655],......

仪山湖
今天
5
0
OSChina 周二乱弹 —— 开发语言和语言开发的能一样么

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌:#今日歌曲推荐# 分享The Score的单曲《Revolution》 《Revolution》- The Score 手机党少年们想听歌,请使劲儿戳(这里) @批判派...

小小编辑
今天
2.6K
19
oracle ORA-39700: database must be opened with UPGRADE option

ORA-01092: ORACLE instance terminated. Disconnection forced ORA-00704: bootstrap process failure ORA-39700: database must be opened with UPGRADE option 进程 ID: 3650 会话 ID: 29......

Tank_shu
今天
3
0
分布式协调服务zookeeper

ps.本文为《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之一 ZooKeeper ZooKeeper曾是Apache Hadoop的一个子项目,是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它...

ls_cherish
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部