对比四大智能合约语言:Solidity 、Rust 、 Vyper 和 Move
什么是编程语言?它是一组将文本和数字字符串转换为机器可读代码的规则。
简单来说,编程语言使计算机能够理解人类输入的指令。如果我们把人类文明想象成汽车的话,那么软件开发行业就相当于汽车的引擎,编程语言就像引擎的燃料。
计算机发展至今,已经涌现包括 C/C++、Java、Python 等等在内的经典编程语言,这些不同的编程语言被发明出来,用于解决不同领域的问题。而随着区块链行业的不断发展和新的区块链网络的出现,同样也有新的编程语言诞生,如 Solidity、Vyper 和 Move 等等,也有足够经典的编程语言被引入该领域如 Rust 等。
当开发者踏入 Web3,要从哪一门编程语言开始学起?或者哪门编程语言最适合自己?本文将选取当前较为主流的四门编程语言:Solidity 、Rust 、 Vyper 、Move 一一阐述,为各位读者选择开发语言提供一点灵感。
Solidity
Solidity 是一种面向对象的高级静态编程语言,最初运行在以太坊虚拟机 (EVM) 上构建智能合约。该语言最初由 Gavin Wood 提出理论,最终由 Christian Reitwiessner 于 2014 年开发,Solidity 提供了大多数现代编程语言中可用的概念,它具有函数、字符串操作、类、变量、算术运算等等,与 JavaScript、C++ 和 Python 等编程语言有相似之处,具有图灵完备性。
主要特点
面向对象——一种专注于围绕数据和对象而不是逻辑和功能进行软件开发的编程方法
高级语言——通过独立于计算机硬件架构使软件开发更加用户友好的语言
静态类型- 在编译时检查错误和类型的语言
下面是一个使用 Solidity 的智能合约示例:
Web3 优势
作为第一门可编程的区块链智能合约语言,使用 Solidity 作为区块链编程语言的优势是:Solidity 更容易学习,并且有更多用于 Solidity 的开发人员工具。
1、更容易学习
Solidity 是一门高级语言,它的代码可读性强,易于理解,并且语法与 Javascript 类似,有编写 Javascript 经验的开发人员不会觉得学习 Solidity 很困难。
2、大量的开发者工具
Solidity 有大量优秀的开发工具可供使用,它受到 OpenZeppelin 等平台的支持,OpenZeppelin 为安全的智能合约开发提供开源库。Solidity 也有几个开发环境(IDE),例如 Remix 在线 IDE 和本地开发人员环境 Hardhat。这些 IDE 提供了允许轻松开发 DApp 的工具和功能。
3、适用范围更广
Solidity 被广泛使用在以太坊以及 Layer2 上,熟悉 Solidity 的开发人员从事区块链项目的选择范围更广。
学习考量
但与此同时,在学习 Solidity 之前需要注意的是,Solidity 开发过程中较容易埋下一些隐患而难以及时发现,因此需要反复对代码进行全面测试。
在 2021 年,加密货币全行业公开报道的安全事故至少有 189 起,至少有 76 亿美元的加密资产在这些安全事故中损失,其中在 181 起 DApp 类安全事故中,80% DApp 安全事故缘于智能合约漏洞。其中智能合约漏洞的原因之一就有 Solidity 语言自身设计的缺陷,以及开发者在开发过程中引入的错误。
Rust
Rust 最初由 Mozilla 员工 Graydon Hoare 在 2006 年设计和发布,是一种为性能和安全性,尤其是安全并发性而设计的语言,它在语法上与 C++ 相似。
主要特点
发挥了静态语言的优势——相较动态语言在调试和运行时的不确定性,静态类型的语言允许对数据及其行为预先进行编译器级别的检查和约束,在运行时只保留少量的类型检查,这极大地避免了程序员的麻烦,同时有益于鼓励长期的可维护性。
让并发更容易——当两个线程同时访问同一内存时会发生数据竞争,这就可能导致某些不可预测的行为。Rust 从编译阶段就将数据竞争解决在了萌芽状态,保障了线程安全。
更好的内存安全特性——无垃圾回收器的内存安全机制是 Rust 经典且核心的设计之一。
下面是一个使用 Rust 的智能合约示例:
Web3 优势
与 Solidity 相比,Rust 是一种低级(low-level)、多范式的编程语言,速度快且内存效率高——在可扩展性受限的情况下,Rust 大有可为,事实上,在 Web3 中,Rust 的内存安全与高性能对于 DApp 的开发十分友好,目前将 Rust 语言作为核心开发语言的就有 Polkadot、Solana、Near。
1、内存安全
内存安全是某些编程语言中的一个属性,可以防止程序员犯某些类型的内存相关错误。Rust 使用所有权和借用原则实现内存安全。Rust 通过在编译期间消除与内存相关的错误来确保内存安全,这使得它无需像其他内存安全语言那样使用垃圾收集器就可以提高内存效率。
2、速度快、产量高
Rust 能够创建具有高输出和高性能的去中心化程序,这是大规模 DApp 必不可少的功能。Rust 的执行效率更高,因为它可以在不使用垃圾收集器的情况下实现内存安全。
学习考量
但与此同时,在学习 Rust 之前需要注意的是:虽然 Rust 弥补了 Solidity 的安全与性能缺点,但 Rust 语法更难学习、编写和阅读,其学习难度往往让人望而生畏。不过在 Rust 语言设计团队(Lang Team)在官方博客中公布的 Rust 语言 2024 年的更新路线图中,就昭示了降低学习难度是 Rust 语言的未来发展方向,Lang Team 力图通过各种手段简化程序,使开发者能更轻松地表达代码意图,而不需要处理逻辑实现的各种细枝末节。
想进一步了解 Rust 语言,可见 OneBlock 此前发布的 Rust 系列文章:想全面了解 Rust 语言 ?你想知道的都在这里(上)、想全面了解 Rust 语言 ?你想知道的都在这里(下)。
Vyper
Vyper 是一种创建于 2017 年的 Pythonic 智能合约语言,可编译为像 Solidity 一样的 EVM 字节码。开发人员从 Solidity 的问题中吸取了教训,并将该语言设计得更简单、更安全、更易于审计。
它删除了在 Solidity 中被证明有问题的功能。它不是 Solidity 的替代品,而是一种在需要最高安全级别时使用的语言。用 Vyper 编写的项目示例包括 Uniswap v1 和第一个 ETH 2.0 存款合约。
主要特点
安全性—— “在 Vyper 中构建安全的智能合约应该是可能且自然的。”
语言和编译器的简单性——“语言和编译器的实现应该力求简单。”
可审计性——Vyper 还旨在让任何人尽可能难以编写误导性代码。读者(即审核员)的简单性比作者(即开发人员)的简单性更重要。这样,将更容易识别智能合约或去中心化应用程序 (DApp) 中的恶意代码。
下面是一个使用 Vyper 的智能合约示例:
学习考量
但与此同时,在学习 Vyper 之前需要注意的是:很少有项目采用 Vyper 作为他们的智能合约语言,在撰写本文时,Github 上的 Vyper 合约与 Solidity 合约的数量分别为 3549 与 2,389,529。Vyper 目前还正在完善的阶段,其有效性和安全性有待时间的检验。
Move
Move 是近几个月来十分热门的编程语言,事实上,Move 是一种基于 Rust 改编的编程语言,它创建于 2019 年,最初是为 Meta 的 Diem 区块链项目而开发的,在 Diem 项目解散之后,其创始团队出走分别创立的 Aptos 与 Sui,也将 Move 作为核心编程语言。
主要特点
面向资产编程——资源作为一等公民是 Move 语言诞生之初就提出的设计理念。Move 引入了“资源”的概念,它永远不能被复制或隐式丢弃,它只能在程序存储位置之间移动,也就是说,Move 中的每个资产都具有原生稀缺性和访问控制属性。
安全——Move 语言在设计的过程中继承了很多 Rust 中的安全特性,此外,Move 团队在语言设计的过程。辅以形式化验证器 Move Prover 和运行时验证器 bytecode verfier ,为智能合约提供安全保障。
模块化——不同于 Solidity,智能合约中的数据只能在合约范围内修改,不能从外部修改其他合约。在 Move 开发中,很多基础的模块是可以持续迭代升级的。
以下为代码示例:
学习考量
但与此同时,在学习 Move 之前需要注意的是:由于 Move 语言目前还十分年轻,其距离大规模的工程化使用仍然有一定的距离,仍然需要时间来证明自己是安全的且不易出错;Move 开发链尚不完善,合约规范尚未形成,Move 在 Aptos 和 Sui 中的一些定制化特性也给面向多链或者全链的应用开发者带来麻烦;Move 的合约生态尚不完善,贸然进行 Move 的合约开发也会面临很多冷启动的问题。
总结
总而言之,每门编程语言都有着不同的特性。作为第一门可编程的区块链智能合约语言,同时也作为作为以太坊及其他大部分主流区块链网络上的主要编程语言,目前对掌握 Solidity 的开发人员的市场需求仍然位居 Web3 行业首位,由此,Solidity 被不少开发者视作区块链开发的入门语言。
针对 Solidity 开发,目前 OneBlock 与 Moonbeam 共同推出的《Moonbeam 入门 - 轻松开始跨链 Solidity 开发》课程已于 2022 年 10 月 18 日正式开课,针对想在波卡生态系统上开发应用的 Solidity 开发者、想入门 Solidity 智能合约开发的 Substrate 开发者以及想了解不同 Solidity 开发工具的初级智能合约开发者等,该门课程拥有官方认证+专业的课程导师+体系化的课程内容+简单的练习作业+助教老师 1 对 1 的反馈。
而在 Vyper、Move 还需要时间验证之前,Rust 被视作成为区块链近年来编程语言的潜力股。同样,针对 Rust 开发,OneBlock 与 Parity 官方联合主办的《Substrate 区块链开发入门课程》,就将围绕区块链基础技术、Rust 和 Substrate 基本技巧等展开讲解,目前已经成功开设 9 期,拥有丰富的学员经验和官方的认证支持,是开发者朋友入门 Substrate 以及 Rust 的不二之选,目前第十期「Substrate 区块链开发入门课」课程将于 2022 年 11 月 18 日开课,面向所有有志于区块链开发岗位,但苦于没有经验没有系统技能和方法的“ 0-1 ”区块链技术新人。
要预判一门语言的发展好坏十分难下定论,因为没有人可以窥见其发展全貌,在决定哪种语言更适合自己之前,开发者需要权衡心中的价值、重要性排序。
每种语言的工作需求量都在呈上升趋势,而掌握多种语言的开发人员会有更多机会选择工作。
参考文章:
Vyper: the definitive 0 to 1 guide
https://mirror.xyz/%F0%9F%91%85%F0%9F%8C%88%F0%9F%91%85.eth/B6vH4y6a_dD8O9ODWt_JsjnTZECsXj0yDEDzh_QCjjM
Comparison of The Top 10 Smart Contract Programming Languages in 2021
https://pontem.network/posts/comparison-of-the-top-10-smart-contract-programming-languages-in-2021
Top 5 smart contract programming languages for blockchain
https://blog.logrocket.com/smart-contract-programming-languages/