Binaryen概述
Binaryen概述
介绍
http://webassembly.github.io/binaryen/
Compiler infrastructure and toolchain library for WebAssembly
用于WebAssembly的编译器基础设施和工具链库
Binaryen是一个用C++编写的WebAssembly的编译器和工具链基础库。它的目的是使编译到WebAssembly变得简单、快速和有效。
-
简单:Binaryen有一个简单的C语言API,有一个头文件,也可以从JavaScript使用。它接受类似WebAssembly形式的输入,但也接受一般控制流图,供喜欢的编译器使用。
-
快速。Binaryen的内部IR使用紧凑的数据结构,并被设计为完全并行的代码生成和优化,使用所有可用的CPU核心。Binaryen的IR还可以非常容易和快速地编译成WebAssembly,因为它基本上是WebAssembly的一个子集。
-
有效。Binaryen的优化器有许多环节可以非常显著地改善代码(例如,局部着色以凝聚局部变量;消除死代码;在编译时尽可能地预计算表达式;等等)。这些优化的目的是使Binaryen强大到可以单独作为一个编译器后端使用。一个特定的重点领域是针对WebAssembly的优化(通用编译器可能做不到),你可以把它看作是wasm minification,类似于JavaScript、CSS等的minification,所有这些都是特定的语言(这种优化的一个例子是SimplifyLocals的块返回值生成)。
使用Binaryen构建的编译器包括:
- asm2wasm,将asm.js编译为WebAssembly。
- AssemblyScript,它将TypeScript编译成Binaryen IR
- wasm2js,将WebAssembly编译为JS。
- Asterius,将Haskell编译为WebAssembly。
Binaryen还提供了一套工具链实用程序,可以:
- 解析和发射WebAssembly。特别是,这可以让你加载WebAssembly,用Binaryen优化它,然后重新释放它,从而在一个命令中实现wasm到wasm的优化器。
- 解释WebAssembly以及运行WebAssembly规范测试。
- 与Emscripten集成,以便提供一个完整的编译器工具链,从C和C++到WebAssembly。
- 如果浏览器还没有本地支持,可以通过在编译成JavaScript的解释器中运行WebAssembly来实现Polyfill(对测试有用)。