当前位置: 首页 > Linux

WebAssembly通用运行时-Wasmer

时间:2023-04-06 20:51:26 Linux

Wasmer支持超轻量级的基于WebAssembly的容器,这些容器可以在任何地方运行:从桌面到云和物联网设备,并且可以嵌入任何编程语言。通过设计,WebAssembly模块运行的环境与底层主机系统的本机功能完全隔离(或沙盒化)。这意味着默认情况下,Wasm模块被设计为仅执行纯计算。因此,“操作系统”级别的资源,如文件描述符、网络套接字、系统时钟和随机数,通常无法从WASM访问。然而,在许多情况下,Wasm模块需要做的不仅仅是执行纯计算。他们必须与本地“操作系统”功能进行交互。Wasmer旨在提供三个关键功能:使程序能够以任何编程语言运行便携式二进制文件可以在Wasmer支持的任何“操作系统”(例如Linux、macOS、Windows和FreeBSD)上运行,无需修改。充当Wasm模块的安全桥梁,通过WASI和Emscripten等ABI与本机“操作系统”功能进行交互。特点快速安全。Wasmer在完全沙盒环境中以接近自然的速度运行WebAssembly。可插拔。Wasmer支持不同的编译框架以最好地满足您的需求(LLVM、Cranelift...)。通用的。您几乎可以在任何平台(macOS、Linux和Windows)和芯片组上运行Wasmer。标准。运行时通过了支持WASI和Emscripten的官方WebAssembly测试套件。目前Wasmer的release版本是0.17.1,但是已经发布了1.0.0-alpha02.0版本,基本可以量产了。与wasmtime相比,它的生态更加完整。提供wapm和WebAssembly.sh。wapm是WebAssembly包管理器。WebAssemblyshell是一个在线shell,您可以在其中拖放WebAssembly模块来试用它们并执行WAPM中可用的WASI模块的所有命令。支持的语言Wasmer运行时可作为嵌入不同语言的库使用,因此您可以在任何地方使用WebAssembly。目前支持以下语言:官方安装提供了安装脚本,整个安装比较简单:curlhttps://get.wasmer.io-sSfL|sh安装Wasmer和WAPM!wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww###################################################################100.0%-=#=###>下载0.17.1版本...?#######################################100.0%>解压内容...?>添加到bash配置文件...?注意:我们已将以下内容添加到您的/Users/iyacontrol/.zshrc如果您有不同的配置文件,请添加以下内容g:#WasmerexportWASMER_DIR="/Users/iyacontrol/.wasmer"[-s"$WASMER_DIR/wasmer.sh"]&&source"$WASMER_DIR/wasmer.sh">成功安装wasmer0.17.1!wasmer&wapm将下次打开终端时可用。如果你现在想要命令可用,请执行:source/Users/iyacontrol/.wasmer/wasmer.sh安装完成,通过执行wasmer命令检查:wasmererror:Thefollowingrequiredargumentswerenotprovided:USAGE:wasmer--backend更多信息试试--help如果需要安装指定版本的wasmer,可以按如下方式安装:curlhttps://get.wasmer.io-sSfL|sh-sv0.17.0Demorust和c/c++是目前支持wasm较好的语言,所以本demo使用rust来完成1:使用cargo新建一个hello-world项目:cargonewhello-worldcdhello-world3:写主.rs文件:fnmain(){println!("Hello,world!");}4:编译:cargobuild--targetwasm32-wasi--releaseCompilinghellov0.1.0(/Users/iyacontrol/rust/hello-world)在1.01s中完成发布[优化]目标我的rust版本是最新版本1.46。已经支持wasm32-wasi类型。默认情况下没有安装target支持,所以需要运行如下命令:rustuptargetaddwasm32-wasi5:Execution我们关注的是wasi的执行,所以使用wasmerruntime来执行编译后的产品。wasmertarget/wasm32-wasi/release/hello-world.wasm你好,世界!小结本文从特性和生态两个方面对wasmer进行简单介绍。演示示例是一个纯计算案例。wasi更多的意义在于与宿主os的交互,所以下一篇我们会重点介绍这个。