WebAssembly(Wasm)是字节码的可移植标准,它允许将代码编译为可以及时优化的有效表示形式,并可以在您选择的操作系统和运行时环境上运行。越来越多的语言为Wasm提供编译功能,并且Wasm运行时可在主要的浏览器中以及作为单独的程序使用。浏览器之外的运行时(例如wasmtime和waSCC)的存在为WASM作为通用字节码格式提供了可能性,类似于Java字节码或.NET CIL。例如,Krustlet项目提供了一种将WebAssembly模块作为Kubernetes容器运行,执行计算工作或处理HTTP请求的方法。
尽管Rust和C / C ++等语言可以编译为WASM,但如何以这种方式设置项目并不总是很明显-与大多数语言的“本地”目标相比,还有额外的仪式。设置调试和部署还涉及额外的步骤,而这些步骤并不总是很明显。因此,首先存在进入障碍,并且每次创建新项目时都不受欢迎的配置。
为了使此过程变得容易一些,我们正在使用流行的Yeoman代码生成器构建Wasm项目生成器,以为您完成此设置。我们刚刚发布了第一个预览版,我们很乐意尝试一下并让我们知道它的进展。
要安装Yeoman和Wasm生成器,您需要先安装Node.js和NPM;然后运行:
您要使用哪种语言生成项目?目前,我们可以执行Rust,C和AssemblyScript。我们很高兴拥有更多。
您是否要将已编译的Wasm模块发布到OCI注册表,如果要发布,是哪一个?这与您设想在云环境(例如带有Krustlet的Kubernetes)中运行的工作负载有关。您不必发布到OCI注册中心;如果您愿意,我们目前仅提供Azure容器注册表,但再次希望将其扩展到其他OCI注册表。
所有这些的结果就是一个“ hello world”的应用程序。该代码本身并不有趣,只是一个最小的Rust,C或AssemblyScript程序,但是生成器还提供了很多东西来简化开发体验:
Visual Studio Code任务来构建和调试Wasm构建。这意味着-如果您是VS Code用户-您可以非常快速地启动并运行编辑和调试项目。 Debug Wasm调试配置使用wasmtime来运行程序,而LLDB调试器使用正在运行的Wasm中的断点等。
当合并到main或使用v *形式的字符串标记发行版时,GitHub动作来构建拉取请求,并将已编译的Wasm模块发布到所选的OCI注册表中(例如v1.0.0)。 (如果您选择不发布到OCI注册表,则此操作只会创建一个构建工件。)
预览版本有一些限制。我们已经提到了有限的语言和注册表选项。一个重要的限制是,我们当前所有的模板都以WASI(WebAssembly系统界面)和wasmtime运行时为目标。我们很乐意拥有其他环境和运行时的模板,但是在投入之前,我们可以确实提供反馈意见。
希望您能尝试一下。如果在https://github.com/deislabs/generator-wasm/issues上提出了问题,请告诉我们是否遇到任何问题,或者如果您要添加或改进某些内容,请随时发送请求请求。谢谢!