WASM
一.WASM简介
1.1 WASM定义
WebAssembly(简称wasm)是一个虚拟指令集体系架构(virtual ISA),整体架构包括核心的ISA定义、二进制编码、程序语义的定义与执行,以及面向不同的嵌入环境(如Web)的应用编程接口(WebAssembly API)。是一种运行在现代网络浏览器中的新型代码,并且提供新的性能特性和效果。它设计的目的不是为了手写代码而是为诸如 C、C++和Rust等低级源语言提供一个高效的编译目标。 对于我们爬虫来说,就是用JS调用其他语言做计算,再返回来给JS用.
1.2 WASM特点
快速、高效、可移植——通过利用常见的硬件能力,WebAssembly 代码在不同平台上能够以接近本地速度运行。
可读、可调试——WebAssembly 是一门低阶语言,但是它有确实有一种人类可读的文本格式(其标准即将得到最终版本),这允许通过手工来写代码,看代码以及调试代码。
保持安全——WebAssembly被限制运行在一个安全的沙箱执行环境中。像其他网络代码一样,它遵循浏览器的同源策略和授权策略。
不破坏网络——WebAssembly的设计原则是与其他网络技术和谐共处并保持向后兼容。
1.3 资料参考
https://github.com/Evian-Zhang/wasm-tutorial
二 WASM使用
2.1 工具安装
Ubuntu安装homebrew指令:
rm Homebrew.sh ; wget https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh ; bash Homebrew.sh
homebrew安装wabt指令:
brew install wabt
期间可能会遇到很多依赖问题,不好配置的话,直接使用课件中提供的虚拟机.
wat2wasm
将.wat
的文本格式WASM转换为.wasm
的二进制格式WASMwasm2wat
将.wasm
的二进制格式WASM转换为.wat
的文本格式WASMwasm-objdump
查看.wasm
的二进制格式WASM中的信息。
2.2 基本语法
先看一段代码:
(module
(func $add (param $left i32) (param $right i32) (result i32)
local.get $left
local.get $right
i32.add
i32.const 16
i32.add
)
(export "add" (func $add))
)
;; 这是一段注释
使用pycharm创建一个flask项目
from flask import Flask
from flask.templating import render_template
app = Flask(__name__, static_url_path='/static')
@app.route('/')
def hello_world(): # put application's code here
return render_template('demo.html')
if __name__ == '__main__':
app.run(debug=True)
-static
-demo1.wasm
-templates
-demo.html
-app.py
<!