WASM
WASM 可以被 JavaScript 调用,进入 JavaScript 上下文
Wasm,即WebAssembly,是一种用来补充JS在运行上不足的“低级”语言——基于二进制编写-是一种新的字节码格式
允许用户采用自己熟悉的语言书写(目前支持C/C++/Rust),再在虚拟机引擎在浏览器上运行。
它支持沙盒模式,即先用高级语言编写wasm模块,再在JS中以库函数加载。
安装
emsdk_packages_url = 'https://storage.googleapis.com/webassembly/emscripten-releases-builds/deps/'
emscripten_releases_repo = 'https://chromium.googlesource.com/emscripten-releases'
emscripten_releases_download_url_template = "https://storage.googleapis.com/webassembly/emscripten-releases-builds/%s/%s/wasm-binaries%s.%s"
下载下来后放在./emsdk/downloads中(downloads中需要创建),一共需要下载四个安装包,下载后再次执行命令会自动解压loads中(zips需要创建),一共需要下载四个安装包,下载后再次执行命令会自动解压
②node
https://storage.googleapis.com/webassembly/emscripten-releases-builds/deps/node-v16.20.0-linux-x64.tar.xz
①wasm
https://storage.googleapis.com/webassembly/emscripten-releases-builds/linux/e5523d57a0e0dcf80f3b101bbc23613fcc3101aa/wasm-binaries.tar.xz
③python
https://storage.googleapis.com/webassembly/emscripten-releases-builds/deps/WinPython-64bit-2.7.13.1Zero.zip
④java
https://storage.googleapis.com/webassembly/emscripten-releases-builds/deps/portable_jre_8_update_152_64bit.zip
编译器
wasm的官方编译器是Emscripten--将c文件编译产出生成xx.wasm
转换的大致流程可以简单归结为:C/C++ 源代码 -> LLVM IR -> Wasm。
emcc 直接使用了 Clang 编译器的前端,把编译输入的 C/C++ 源代码转换到 LLVM-IR 中间代码
LLVM 的全称为 “Low Level Virtual Machine”,翻译成中文即“低层次虚拟机”
Emscripten将llvm的中间语言转换成node代码(test.wasm),js可以识别使用
Wasmtime: 优点:Wasmtime 是一个快速、安全的 wasm 运行时引擎
WebAssembly Studio: 优点:WebAssembly Studio 是一个在线 IDE
|--> .wasm : WebAssembly汇编文件;
|--> .js : 胶水代码,自动完成.wasm载入/编译/实例化、运行时初始化等工作;
|--> .html : Emscripten测试页面
运行
1.浏览器上运行
接从本地硬盘打开生成的 HTML 文件(hello.html)(例如 file://your_path/hello.html),
你会得到一个错误信息,大意是 both async and sync fetching of the wasm failed。
你需要通过 HTTP 服务器(http://)运行你的 HTML 文件——参见如何设置本地测试服务器获取更多信息。
2.非浏览器上运行
浏览器以外运行 .wasm 程序,系统需要提供一个 wasm 运行环境 (runtime)
对嵌入式的 wasm-micro-runtime 了,简称为 WAMR
云服务的运行环境,现在比较主流的是 wasmer 和 wasmtime
3.浏览器运行说明
HTML文件直接在浏览器打开和本地服务器localhost打开有什么区别?
最直接的区别,很容易注意到,一个是file协议,另一个是http协议。
http请求方式则是通过假架设一个web服务器,解析http协议的请求然后向浏览器返回资源信息
。我们所开发的html文件最后必定是会以网页的形式部署在服务器上
访问服务器上的html文件是以http的协议方式去打开,有网络交互。直接打开html文件是以file协议的方式去打开,没有网络交互
启动http服务
01.Python自带一个微型的http服务,可以通过命令行启动:
python3 -m http.server
然后这个服务启动后,在浏览器输入localhost:8000即可。显示的内容是基于你启动服务时所在的路径下的文件。
http.server 不推荐用于生产环境。它仅仅实现了 basic security checks 的要求。
可用性: 非 Emscripten,非 WASI。此模块在 WebAssembly 平台 wasm32-emscripten 和 wasm32-wasi 上不适用或不可用
02. http-server 启动一个静态服务器,只负责当前目录的文件路由
http-server
npm i http-server -g
NPM的全称是Node Package Manager,是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准
注意http-server 和http.server的不同
参考
windows下和linux 安装emscripten https://blog.csdn.net/qq_34754747/article/details/103815349
WebAssembly初探 https://blog.csdn.net/jh1988abc/article/details/130364866
https://developer.mozilla.org/zh-CN/docs/WebAssembly/C_to_wasm
标签:WebAssembly,emscripten,https,releases,WASM,wasm,world,http
From: https://www.cnblogs.com/ytwang/p/18005933