当前位置: 首页 > 工具软件 > Rust Doom > 使用案例 >

Programming WebAssembly with Rust 译 介绍

东郭阳德
2023-12-01

我已经老了,在开发人员构建软件和我们可以构建的产品种类的方式上经历了相当多的地震变化。 我刚开始职业生涯的时候,DPMI让我们可以原生访问32位整数,允许不受限制地访问超过640k的堆,并且能够创建像DOOM这样的突破性游戏。 我记得Java承诺一次写入,在任何地方运行的潜力。 当世界成为一个单一的数字社区,随着互联网的普及浪潮走向无处不在时,我在那里建立了围绕拨号公告板系统(BBS)建立的小型本地通信。 我经历了从客户端/服务器到胖服务器再到胖客户端的解决方案设计的转变,现在再次登陆云本机应用程序,微服务和独立功能,其中包括我们的基础架构在内的所有内容都是服务。

我记得网络的增长来自十亿个文本群体(经常闪烁!)和Under Construction标志,其中最酷的地方是那些拥有最复杂的整页背景图像的地方,以及广阔,庞大的商业,通信,生活方式引擎,和今天的社会联系。网络已经从一个只有少数几个精英在这个奇怪的新世界中涉足的地方变成了一个数百万人花时间编写现代时代最强大和最复杂的应用程序的地方。

我坚信,我们站在另一个地震变化的悬崖上 - WebAssembly。这项新技术可以从根本上改变开发人员为Web构建应用程序的方式。此外,正如您将在本书中看到的那样,WebAssembly不仅仅是一个抛入Web技术海洋的新鹅卵石。这是一场海啸,不仅可以改变消费者的互动方式,还可以改变开发人员如何构建应用程序,还可以从根本上改变我们可以创建的应用程序类型。它甚至可能改变我们对应用这个词的核心定义。

今天的网络技术

今天的网站对于开发者来说是一个真正的游乐场。 您可以轻松访问宽带速度(例外情况)。 浏览器比以往更快,更强大,人们用来运行这些浏览器的工作站拥有大量的RAM,存储和多个核心 - 甚至是移动设备。

今天的JavaScript与开源社区引起如此多愤怒的原始1995 JavaScript完全不同。 它在网络发展领域占主导地位,以至于它自己的无处不在已成为一个笑话或模因。 浏览器供应商之间的竞争(他们并没有把它称之为浏览器大战)刺激了他们的产品执行JavaScript的方式多年,这将是您进入浏览器托管的WebAssembly细节时的关键讨论点。

现代浏览器具有负责JavaScript执行的虚拟机。 在内部,他们优化并从处理过的JavaScript中生成一种字节码形式。 这与更多的内存和处理能力相结合,意味着JavaScript实际上很快。 不仅仅是快一点,但它可以在浏览器中播放完整的A级视频游戏。 应用程序可以执行复杂的计算,运行机器学习模型,处理大量数据,以及将浏览器视为操作系统。

React,Angular,Backbone,VueJS等框架以及无数其他框架对Web应用程序的构建方式产生了巨大影响。 现代Web应用程序可以呈现令人难以置信的密集用户界面,就像您在Facebook或YouTube上看到的那样,同时接收从云中的服务器发布的实时事件,以提供一定程度的交互,现在这种无处不在的功能使网站不具备 提供这种新级别的实时交互往往是公开羞辱和注定要失败。

本书其余部分中没有任何内容可以颂扬WebAssembly的优点,应该从现代可编程网络是一个巨大的虚拟玩具商店的事实中解脱出来,这对于渴望开发人员的掠夺是成熟的。 对于任何狂热的技术学习者来说,这是一个活着的好时机(并且可能学习一些JavaScript)。

明天的技术

WebAssembly目前是1.0产品,刚刚达到其第一个MVP(最小可行产品)。 与大多数1.0产品一样,它必然会遇到一些成长的痛苦和摩擦点,我们将在本书中对它们进行深入探讨。 当您查看WebAssembly的当前状态及其局限性时,您可能会感到气馁并感到放弃并等待事情变得更加成熟的冲动。 但我认为现在是时候开始学习和开发这种令人难以置信的新技术了,而且已经有很多WebAssembly 1.0产品在野外部署和运行,每天都会出现。 在本章的两次编辑之间,有人发布了一个内置在WebAssembly中的虚拟机,它在浏览器中运行Windows 95。

好消息是,经验只会随着时间的推移而改善。 工具将变得更好,浏览器和WebAssembly模块之间的接口将变得更好,对非浏览器主机的支持将变得更好,并且经过测试和验证的用例的数量将增加。 简而言之,随着时间的推移,WebAssembly模块开发的每个方面都将得到改进。

我相信,WebAssembly正处于可编程互联网真正范式转变的下一波浪尖。 我的意思是说互联网而不仅仅是网络。 这种区别似乎很微妙,但我也完全相信浏览器作为WebAssembly模块的主机只是冰山一角。 WebAssembly将加入互联网历史上一系列改变游戏规则的创新,从根本上改变我们的应用概念。

本书适用于谁

本书适用于任何想要构建Web应用程序的人。无论您是只接受过一点点JavaScript曝光,还是经验丰富的专业人士都拥有数十种React和Redux应用程序,WebAssembly都有可能改变您构建应用程序的方式以及这些应用程序的强大功能。以前很少有技术的方式。

无论您认为自己是前端,后端,嵌入式还是任何其他类型的开发人员,本书都适合您。将其他语言编译为WebAssembly意味着您可以使用熟悉的开发生命周期和工具链,并构建和测试强类型,强大的代码。

最后,如果您认为WebAssembly的内容不仅仅是Web应用程序,那么您将会喜欢本书以及我们在Rust中构建WebAssembly解释器并在Raspberry Pis上运行它们以通过GPIO控制硬件。 WebAssembly为许多不同类型的开发人员提供了许多承诺,包括统一后端和前端编码体验的承诺。

为什么是rust?

Rust是一种系统语言,可以在任意数量的操作系统和硬件体系结构上编译为本机二进制文件。 它速度快,其二进制文件占用的空间非常小,占用内存很小,并且从头开始设计,以避免意外突变,空引用和数据争用。 实际上,编译器会检查您的代码并防止您犯这些错误。

但是我选择Rust作为本书的原因不仅仅是语言语法和强大的编译器。 Rust让我兴奋的是它是如何快速地接受WebAssembly的。 虽然其他语言现在可以将代码编译到WebAssembly,但RustAs社区中为WebAssembly提供的大量库和工具是惊人的。 Rust WebAssembly社区的热情,支持和快速进步影响了我在本书中使用Rust的决定

你将学到什么

本书分为三个主要部分:

建立一个基础

在构建基础时,您将学习WebAssembly的基础知识和核心体系结构,包括它能做什么和不能做什么以及如何开发基本应用程序。当您到达本节末尾时,您将能够创建完全使用原始WebAssembly编写的Checkers引擎。

与JavaScript交互

在坚实的WebAssembly基础上,您将继续使用Rust来创建WebAssembly模块。您将从创建Rust版Checkers引擎的基础开始,然后您将继续使用代码生成,高级工具和宏来构建与JavaScript交互的强大Web应用程序。到本节结束时,您将能够在Rust中编写一个多用户实时聊天应用程序,该应用程序将编译为WebAssembly。
使用非Web主机

一旦您第一次尝试了WebAssembly的强大功能,就可以将它提升到一个新的水平并开始使用非Web主机。 WebAssembly不仅仅是为网络构建东西,当你创建模块来控制连接到Raspberry Pi的灯光的LED模式时,你会看到这一点,作为你的最终项目,你创建一个完全多人竞技场的战斗游戏这让开发人员可以在与死亡的战斗中互相攻击他们的WebAssembly代码。
现在是时候进行编码了!

 类似资料: