为了账号安全,请及时绑定邮箱和手机立即绑定

在WASM中构建和运行应用程序

在过去20到30年里,软件开发经历了几个阶段。它从自己编写内存管理的垃圾回收代码,发展到请求AI聊天机器人帮你写try/except代码块。主要的变化在于应用程序的运行、测试和编译方式。这些方式不仅限于本地环境,还扩展到了从虚拟机到无服务器再到Kubernetes的跨系统/平台转变。

在这篇博客文章中,你将了解一种最新的热门技术——WASM(WebAssembly的缩写)。

WASM 快速回顾

WASM具有性能增强(比标准容器快20-160%),跨架构能力(在ARM设备上构建,在x64设备上运行),安全性(类似简化版的Scratch操作系统),以及跨语言支持(你可以用Python编写,我可以使用Go,在编译时都是一样的)。

比如说,让我们来解释一下一些重要的术语:

  • WASM == 运行浏览器应用
  • WASI == 与本地或服务器上的资源(如文件和网络)交互的接口。它是WASM的一个扩展。
  • Runtimes == 如何在本地或服务器上运行WASM应用(现在最流行的是Wasmtime,还有Wazmer、Wazero等)
安装

当你在本地或服务器上安装WASM时,会遇到几个部分。

  • WASI
  • 运行时环境

安装运行时(如Wasmtime)时,WASI会自动生效。

在这篇博客文章中,我们将展示如何安装Wasmtime。因为在撰写本文时,它是最受欢迎的。

💡妙招💡

由于WASM仍然很新,因此出现了各种围绕它的运行时环境,大家都在试图“弄明白它”。这种情况很常见,无论是新技术还是已经存在了一段时间但终于开始受到“关注”的技术。

要安装WASM,运行curl命令来下载并运行一个Bash脚本,该脚本用于安装WASM。

执行以下命令从官方网站下载并安装Wasmtime:
curl https://wasmtime.dev/install.sh -sSf | bash

进入全屏 退出全屏

你可以看到类似于下面的输出。

图片描述
这是一张图片,点击可以查看。

请确保在尝试使用WASM之前重启你的命令行。

要确保二进制安装成功,你可以试试help命令。

这是一个图片链接: 图片描述

💡

如果你用的是 Windows,查看预编译的包:(https://github.com/bytecodealliance/wasmtime/releases

在本地使用 WASM 运行代码

既然WASM和WASI已经成功安装,是时候测试一些代码,看看WASM是如何工作的。例如,为了这篇博客文章的目的,你将使用一个“Hello World”风格的Go程序。即使你不懂Go语言,也没关系。这只是为了给你一个示例。

如果没有安装 Go,你可以点击这里在你的操作系统上安装:https://go.dev/doc/install

💡

需要 WASI 的原因是因为,默认情况下,WASM 是为浏览器应用设计的。这一点是,它没有 I/O,这意味着它无法与网络、存储等进行交互。

从技术角度看,你不需要WASI(WebAssembly System Interface),但如果没有它,你就得自己搭建一个接口。与其重新发明轮子,使用WASI显然更合理,特别是像Wasmtime这样的运行时环境已经内置了WASI。

第一步是准备一些可以编译的代码。在这种情形下,你可以用下面这段 Go 代码,其中包括:

  1. 主包确保它是应用程序的启动入口。
  2. 导入 fmt 包来实现终端输出。
  3. 主函数(类似于函数式编程)来调用子函数。
  4. 子函数会返回一个简单的响应,该响应会被打印到终端。

将这段代码保存到本地,并将其文件命名为 main.go,目前你不需要运行它。

package main

import "fmt"

func main() {
    wasmTest()
}

func wasmTest() {
    fmt.Println("来自WASM彼岸的问候!")
}

全屏 退出全屏

接下来需要做的是配置你的本地 Go 环境以使用 WASM。为此,你需要设置两个环境变量即可。

  • GOOS (Go 操作系统 (OS))
  • GOARCH (Go 架构 (架构))

main.go 文件所在目录打开一个终端并运行以下命令。

GOOS=wasip1 GOARCH=wasm go build -o main.wasm main.go

全屏进入 全屏退出

例如,我在 WASM > appexamples > go 目录里有一个 main.go 文件。运行完该命令后,生成了一个 main.wasm 文件。

这是一张图片,你可以通过这个链接查看: 图片

现在你可以本地运行(或执行)“main.wasm”了。

运行 wasmtime main.wasm 命令

进入全屏 退出全屏

你可以看到类似下面的输出。

图片描述 这是一张示例图片。如需查看图片,请点击链接。

恭喜你!你不仅安装了WASM/WASI作为本地运行时,还写了一些代码并编译了它们,并通过WASM运行时运行了这些代码。

阅读本文后,你可能对WASM/WASI与Rust如何配合工作感兴趣。在那时,Rust似乎是在WASM领域中最受支持的语言之一。

最后的思考

WASM,尤其是用于服务器端的WASI,是软件开发的下一次迭代。它不会替代Docker、Kubernetes、Serverless等工具,因为WASM是一个运行时环境,因此,它需要一个运行的环境。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消