您应该选择哪种语言来在互联网计算机上构建?

今天我们将探索的 5 种语言:Motoko、Rust、TypeScript、Python 和 WebAssembly!在本文中,我们将探讨和比较可用于在互联网计算机上构建的语言,以便您可以为您的项目或职业做出最佳决策。这篇文章的一些细节可能会随着互联网计算机语言生态系统的未来发展而演变,我已经完成了研究并花费了大量时间构建互联网计算机,但我强烈建议您通过自己的研究来完成本文。让我们从一个重要的事实开始我们的探索:无论您使用哪种语言,您的代码最终都会编译成一个 WebAssembly 模块(Wasm),该模块将安装在您的容器中,并最终成为互联网计算机运行的代码。
一个 WebAssembly 模块(左)和一个容器(右),它最终是一个 WebAssembly 模块和一个关联的内存。WebAssembly 是可移植的、安全的、高效的和通用的,世界上任何硬件都应该能够以安全和快速的方式运行 WebAssembly 程序。您可以将 WebAssembly 视为您将要编写的代码和将在其上运行的计算机硬件之间的一种中间语言。有趣的事实:WebAssembly 是由 Andreas Rossberg 共同设计的,他也是 Motoko 语言背后的架构师。WebAssembly 是一项每个有抱负的开发人员都应该至少花几个小时来理解的技术,多年来,它一直被设计为任何类型的应用程序(桌面、移动、网络……)的标准,并且越来越受欢迎。如果 WebAssembly 如此快速、安全和高效,为什么我们不都学习它并直接用它编写我们的应用程序呢?WebAssembly 是一种低级语言,几乎不提供抽象并且接近于计算机处理机器指令的方式 —— 你不想用它来编写 dApp。这并非不可能,但对于任何复杂的项目来说都是不现实的。但是,如果您有几个小时的空闲时间,我鼓励您尝试直接在 WebAssembly 中编写一个容器(只是为了好玩),这是用 WebAssembly 编写的简单容器的样子。这种新语言是由 DFINITY 基金会专门为互联网计算机设计的。
Motoko 在语法中直接集成了平台的许多特性(参与者模型、查询 / 更新调用、异步调用、稳定变量、正交持久性……),这使得它通常比其他语言更容易用于互联网计算机。它在设计时也考虑到了安全性:该语言是高度类型化的,这使得在代码中混合不同数据类型变得更加困难,从而防止了一种常见类型的错误,它还包含安全算法,几乎不可能遇到溢出,从而消除了另一种常见类型的错误。Motoko 将受益于 DFINITY 基金会的持续改进,因为该语言已被纳入长期路线图。由于它是一种新语言,因此围绕它的生态系统仍然非常小,寻找教程、包、工具和 Motoko 开发人员比使用其他语言更困难,社区已经开始努力为 Motoko 提供更好的学习资源或提供更好的工具 / 包(我计划尽我的一份力量)。
一些用 Motoko 构建的主要项目
在开始学习 Motoko 之前要考虑的一个主要问题是(暂时)该语言只能在互联网计算机上使用,如果您考虑开始学习 Motoko,请确保您致力于构建互联网计算机。如果您有兴趣学习 Motoko,这里有一些入门资源:- Motoko Bootcamp:为期一周的强化培训,学习如何使用 Motoko 在互联网计算机上构建。
- ICDevs:一个支持开发者和赏金的非营利组织,非常关注 Motoko。
- DFINITY 用 Motoko 编写的示例汇编。

Rust 是一种功能强大的现代低级编程语言,是构建互联网计算机的可靠选择,它通过其编译器强制执行类型和内存安全,与 Motoko 一样,它也直接编译为 WebAssembly。Rust 于 2010 年由 Mozilla 引入,作为 C++ 的替代品,作为一种被全球主要公司(Mozilla、Cloudflare、Dropbox)使用的成熟语言,拥有蓬勃发展的开发人员社区,它提供的工具、文档和包几乎可以满足您的所有需求。Rust 可用于在其他区块链(Polkadot、Solana、Near……)上构建,并且通常成为任何性能重要或需要与硬件直接交互(嵌入式设备、游戏引擎、虚拟现实)的项目的首选语言,云架构……)。DFINITY 编写的大部分容器(ICP Ledger、Governance、Internet Identity……)和核心 IC 协议都是用 Rust 编写的。然而,Rust 作为一种低级语言具有陡峭的学习曲线,与他的编译器打交道可能会令人沮丧,尤其是作为初学者。与列表中的任何其他选择相比,学习 Rust 并提高工作效率需要花费更多时间,这可能会降低您的工作效率,因为您需要考虑更多的事情。另一点需要考虑的是:即使你在互联网计算机生态系统之外有很多基于 Rust 的学习资料可用,但这个生态系统的 Rust 特定资源的数量仍然非常有限。如果您作为互联网计算机的开发人员开始您的职业生涯并且没有很多经验,我不建议直接从 Rust 开始。- 在 DFINITY 上使用 Rust 开发容器的介绍。
- OpenChat 使用 Rust 构建 dApp 的概述。

一些使用 Rust 构建的主要项目
虽然 Rust 和 Motoko 是(目前)互联网计算机官方支持的两种语言,理论上,任何编译成 WebAssembly 的语言(或具有编译成 WebAssembly 的运行时)都可以用来编写容器智能合约。感谢社区和 Demergent Labs 的工作,我们有可用于其他流行语言的开发工具包!“任何可以用 JavaScript 编写的应用程序,最终都会用 JavaScript 编写。”TypeScript 是 JavaScript 的超集,它为语言添加了严格的类型检查和其他功能,如果您已经了解 JavaScript,那么转向 TypeScript 很容易,并且可以循序渐进地完成。
使用 TypeScript 的一个巨大优势是您将可以访问最大的开发人员社区(全球超过 1750 万开发人员),并且可能拥有最丰富的软件包生态系统。另一个是对于应用程序的前端部分,无论如何您都必须使用 TypeScript(或 JavaScript),因此假设您在后端使用 TypeScript,这意味着您将只有一种语言可用于整个堆栈!Typescript CDK(Azle)最近达到了与 Rust & Motoko CDKs 的功能对等。如果您想了解更多有关如何使用 Typescript 在互联网计算机上构建的信息,我建议您浏览存储库并查看官方文档。
Azle:TypeScript SDK
Demergent Labs 正在开发的另一个 CDK 是针对著名的 Python 语言的。
Python 是一种高级通用编程语言,经常被用作培训新开发人员的第一门语言,因为它相对易于使用和可读,它也是数据科学、机器学习和脚本编写中最常用的语言之一。Kybra 是用于互联网计算机的 Python CDK,它仍处于实验阶段,因为它尚未达到与其他编译器相同的功能。如果您想了解有关 Kybra(Python CDK)的更多信息,请随时浏览存储库,您还可以加入 DSCVR 社区。不幸的是,在撰写本文时,我们没有很多基准可用于比较我们的不同选项。- 初步直觉:Rust 和 Motoko 直接编译为 WebAssembly,而 Python 和 TypeScript 有一个运行时编译为 WebAssembly 并安装在容器中,这意味着 Rust 和 Motoko 可能是最高效的语言。
- 所有语言的性能都有可能发展,Azle 和 Kybra 的性能可能会得到显著提高。
以下建议基于我的个人经验和我与之交谈过的项目的反馈。如果您专注于互联网计算机,对低级语言(C/C++/Rust)没有太多经验,并且想快速入门,我会推荐使用 Motoko。不应低估快速达到可以轻松编写 dApp 的程度的影响,如果你觉得有必要,最好学习 Motoko 然后转向 Rust,而不是直接尝试学习 Rust 但没有取得太大进展并因挫折而停止。这同样适用于希望快速行动的小型团队的项目,如果您的首要目标是快速获得 MVP,那么 Motoko 可能是最佳选择。如果您或您的团队已经熟悉该语言或者您正在设计产品,我会推荐 Rust。如果您不确定在哪个平台上构建,Rust 是比 Motoko 更好的选择,因为您始终可以选择迁移到另一个生态系统。如果您已经了解 TypeScript/Python 并且想尝试互联网计算机,那么一定要看看 Azle/Kybra。由于互联网计算机建立在基础且广泛应用的技术(WebAssembly)之上,因此在语言和相关工具方面为开发人员提供的用于在互联网计算机上构建的可能性极其多样化,并将在未来几年继续增长。
- 往 期 推 荐 -

长按关注 IC 微信公众号
随时答疑解惑
*添加小助手微信 comiocn 进交流社群
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。
来源链接