WebAssembly - "Hello World"

你好,有抱负的程序开发者们!今天,我们将踏上一段激动人心的旅程,进入WebAssembly的世界。如果你之前从未编写过一行代码,也不用担心——我们将从最基础开始,一步一步地学习。在本教程结束时,你将创建出自己的第一个WebAssembly程序,显示经典的“Hello World”信息。那么,让我们开始吧!

WebAssembly - “Hello World”

WebAssembly是什么?

在开始编码之前,让我们先了解一下WebAssembly是什么。WebAssembly,通常缩写为Wasm,是一种基于栈的虚拟机的二进制指令格式。它被设计为高级语言如C、C++和Rust的便携式编译目标,使得可以在网页上为客户端和服务器应用程序部署。

可以将WebAssembly视为在网页浏览器中运行高性能代码的一种方式。它就像是给你的网页应用赋予了超能力!

设置我们的开发环境

要开始使用WebAssembly,我们需要设置开发环境。在本教程中,我们将使用一个简单的在线工具,名为WasmFiddle(https://wasmldedle.net/)。它允许我们在浏览器中编写、编译和运行WebAssembly代码

我们的第一个WebAssembly程序

第一步:编写C代码

让我们从一个打印“Hello World”的简单C程序开始。如果你不熟悉C语言,也不用担心——我会解释每一行代码。

#include <stdio.h>

int main() {
printf("Hello World!\n");
return 0;
}

让我们分解一下:

  1. #include <stdio.h>:这行代码告诉编译器包含标准输入/输出库,该库包含我们将使用的printf函数。
  2. int main():这是主函数,我们的程序从这里开始执行。
  3. printf("Hello World!\n");:这行代码将“Hello World!”打印到控制台。结尾的\n添加了一个新行。
  4. return 0;:这表示我们的程序已成功完成。

第二步:编译为WebAssembly

现在,让我们将这段C代码编译为WebAssembly。在WasmFiddle中,你可以简单地将C代码粘贴到左侧面板,然后点击“Build”。WebAssembly代码将出现在中间面板。

第三步:运行WebAssembly

为了运行我们的WebAssembly代码,WasmFiddle在右侧提供了一个JavaScript面板。以下是运行我们的WebAssembly的代码:

Module.onRuntimeInitialized = function() {
Module._main();
};

这段代码告诉浏览器一旦WebAssembly模块初始化完成,就运行我们的main函数。

输出

当你在WasmFiddle中点击“Run”时,你应该会在页面底部的控制台输出中看到“Hello World!”。恭喜你!你刚刚运行了自己的第一个WebAssembly程序!

理解发生了什么

让我们花点时间理解刚刚发生的事情:

  1. 我们编写了一个简单的C程序。
  2. C程序被编译成WebAssembly,这是一种可以在网页浏览器中运行的低级语言。
  3. 我们使用JavaScript来加载和运行我们的WebAssembly代码。
  4. WebAssembly代码执行了我们的printf函数,在控制台中显示了“Hello World!”。

就像我们教会了网页浏览器一种新语言,然后用这种语言向世界问好!

为什么使用WebAssembly?

你可能在想,“为什么要这么麻烦,我们直接使用JavaScript不就好了?”这是个好问题!WebAssembly有几个优点:

  1. 性能:WebAssembly可以以接近本地速度运行,对于计算密集型任务来说,它比JavaScript快得多。
  2. 语言选择:你可以用C、C++或Rust等语言编写代码,这些语言对于某些任务可能更合适,或者对某些开发者来说更熟悉。
  3. 安全性:WebAssembly在一个沙盒环境中运行,提供了额外的安全层。

结论

恭喜你编写并运行了自己的第一个WebAssembly程序!我们只是触及了WebAssembly可能性的表面,但我希望这个教程激发了你对这项强大技术的兴趣。

记住,每个专家都曾是个初学者。继续练习,保持好奇心,不要害怕尝试。谁知道呢?下一个革命性的网页应用可能就是用你现在正在开发的WebAssembly技能构建的!

在下一课中,我们将探索更复杂的WebAssembly示例,并学习如何将WebAssembly与HTML和CSS集成,以创建交互式网页。在此之前,祝你编程愉快!

方法 描述
#include <stdio.h> 包含标准输入/输出库
int main() 定义程序执行开始的主函数
printf() 将格式化输出打印到控制台
return 0; 表示程序成功完成
Module.onRuntimeInitialized 当WebAssembly模块准备好时,JavaScript方法运行代码
Module._main() 调用WebAssembly模块中的主函数

Credits: Image by storyset