wasm-jit是EOS中独立的虚拟机,之所以采用WASM,是因为其采用中间语言,将高级语言程序先翻译为IR(intermediate Representation)中间语言,然后再编译为机器语言。
WAVM可以wast 和wasm之间相互转换, wast是文本,采用接近机器翻译的语法,wasm 是二进制码
Assemble in.wast out.wasm
Disassemble in.wasm out.wast
wasm-jit 虚拟机的source code在:~/eos/libraries/wasm-jit/Source下,目录结构如下:
主要folder:Emscripten, IR,Runtime, Programs,WASM, WAST
IR: IR是高级语言到机器语言的第一步,后面WAST的解析,WASM的序列化处理,Runtime处理的依据。
Emscripten:用于将高级语言转换为LLVM的字节码的工具
(https://kripken.github.io/emscripten-site/docs/introducing_emscripten/about_emscripten.html)
Runtime执行引擎: 包括了执行字节码(机器码),外部调用,将字节码翻译为 IR,生成机器码等等功能模块
WASM: WASM 的 LICENSE
WAST: Parse解析的功能模块
其他:
Logging: 日志管理
Platforms: 不同平台对应
LLVM是处理WASM的工具链,分为前端后端,在很多IDE下用g++/gcc, Xcode等环境下前端是clang .后端是llvm,在EOS里面后端用了emscription
关于WASM(WebAssembly):
WASM最近在前端中比较流行,有人说它是一种新的字节码,其实里面包含了新的压缩技术,从而可以更高效压缩数据,传送到浏览器,然后再浏览器解压,这种技术在网络视频中非常流行,因为有效克服了网速的不稳定,解决视频数据的缓冲。
*在EOS中,WASM等用现有功能的模块集中在library目录下,可以单独编译,然后继承。