详解区块链编程语言:致雄心勃勃的开发人员

程序猿过渡到 Web3,​Solidity 、Go、Haskell 、Rust,该侧重哪种语言?


1. 写在前面


元宇宙、NFT等词虽已耳熟能详,但对于身处该行业的人来说,仍然可以时刻感受到Web3 依然在早期阶段,全新的方案、商业模式、概念或想法层出不穷。同时,这个势不可挡的行业浪头创造了巨大的人才需求,区块链开发人员就是众人追捧的香饽饽之一。

2021 年,加入 Web3 的开发人员比以往任何时候都多,全年有超过 34,000 人加入该行业。与传统金融领域的情况类似,区块链领域的就业人数同样处于历史最高水平。

【如图】2017年比特币价格飙升后,招聘数量同比攀升;Covid-19期间,比特币价格持续上涨,招聘也一直维持这个趋势。

传统互联网开发人员已经掌握了许多像Python 、C++、Truffle 、Javascript 、Golang等语言,因此具备 Web2 开发技术的人过渡到Web3 还是很容易的。

目前最受开发人员欢迎的区块链除了以太坊,还有 Cardano、Solana、Avalanche、Tezos等。这些区块链使用各种编程语言,无论开发人员掌握哪种语言,都会有工作机会。当然,加入大的开发群体会更具优势,因为他们有更丰富的教程、兼容性库和其他用于移植 dApp 的即插即用工具。当然,如果能掌握多种编码语言的组合技能的话,区块链开发之路上必定是越走越宽的。

这篇文章主要总结目前比较受重视的一些开发语言,包括在以太坊上使用的Javascript 和 Solidity,作为Cardano 原生 Plutus 语言基础的 Haskell ,Cosmos 在用的Go,最后是Solana、NEAR 协议和 Polkadot 所使用过的Rust。


2. Javascript & Solidity:以太坊


以太坊具有四种专用语言:Serpent (受Python启发)、Solidity (受JavaScript启发)、Mutan(受Go启发) 和 LLL (受Lisp启发),都是为面向合约编程而从底层开始设计的语言。

其中 Solidity是以太坊的首选语言,它内置了Serpent的所有特性,语法接近于Javascript,易于被掌握和使用。因为JavaScript已经是Web开发人员的常用语言,因此市场上数以百万计的开发人员都已经具备了以太坊合约开发的基础。

作为同是面向对象的语言,Javascript和 Solidity 有许多相似之处,但它们的功能却不同。Javascript 用于 Web 开发已经有一段时间,其代码增加了 Web 显示的交互性,通过动态用户体验和功能为Web 注入新的生命力。

就像网页和移动应用程序一样,Javascript 可用于Web3 开发过程中创建 dApp, 但值得注意的是,在区块链应用中,需要注意使用 web3.js 和 ethereum.js这类 JavaScript 库,它们能够允许用户通过本地或远程使用HTTP、IPC 或 WebSocket 与以太坊节点进行交互,同时,它们也允许开发人员使用即插即用工具,使dApp 与以太坊兼容。

【如图】根据数据显示,掌握 Rust、Kotlin、Haskell 和 Go 是开发人员理想的技能组合。(资料来源:HackerEarth 2021 开发者调查)

Solidity 不是一门很复杂的编程语言,很像微缩版的 JavaScript,因此对很多开发人员来说更易上手。

尽管 Solidity 相对年轻,使用群体也相对年轻,规模相对较小,可重复使用的标准库也少。但是自 2020 年以来,Solidity群体及其代码库的发展迅速,截至 2021 年底,拥有超过 2,000 名活跃的开发人员。加之以太坊仍然是目前最庞大的开发生态,毫无疑问,Solidity 仍然是区块链产业中应用最广泛的黄金编程语言之一。

随着以太坊 2.0 的出现,将 Solidity 与其他语言结合在以太坊上创建 dApp 具有很大优势。这对于许多想要进入 Web3 的开发人员来说也是一条捷径。


3. Haskell:纯函数式 Web3 编程语


Haskell 是一种通用的函数式编程语言,在区块链的应用中 Haskell 通常被定位为 Cardano 的智能合约编程语言 Plutus 的底层定制语言。

本质上讲,Haskell 为描述和评估函数提供了一个理论框架,其中每个函数都是数学意义上的函数,具有高度安全性。在Haskell中,函数执行低层次的任务,并指定程序需完成的任务。同时它是一种静态类型的语言,代码在编译过程中被很容易被评估,所以类型检查可以确保代码的简洁、清晰和正确。

它使用惰性求值,若无必要它就会绕过任何不相关的代码,程序运行速度更快。另外,开发人员用它编写也非常便利,因为它利用了自动内存管理 (AMM),开发人员在开发他们的 dApp 时不需要将内存管理任务写入代码中。

截至 2021 年,使用Haskell 编程语言的 Web3 开发人员屈指可数,尚未被多数开发人员所接受。Haskell 的掌握门槛较高,Haskell 库很少,开发人员人数也较少且增长缓慢。但是Haskell在生产高质量的软件方面起着至关重要的作用,掌握额外的Haskell 对开发人员更容易脱颖而出。


4. Go :Cosmos 和 Polygon SD​


Go是一种开源的通用编程语言,由 Google 软件开发者于 2009 年推出。它是一种显式的静态类型语言,Go 想要做的是将 Python 这种易于开发的特性和 C++ 这种编译语言的高效特性结合起来。

Cosmos 和 Polygon SDK 通常使用 Go。它拥有大量的本地库,并且跨平台并与移动设备兼容。此外,它利用“Goroutines”,使dApp 快速启动,并在不消耗太多内存的情况下执行任务。Go 还可以同时运行多个线程,以便在大量使用的情况下高效地执行。

Go的 Web3 实例包括 Polygon Edge SDK,这是一个用于 dApp 和区块链的模块化框架,用于构建与以太坊兼容的网络。它将第三方网络引导到以太坊的区块链上,从而通过他们自己的解决方案传输 ERC-20 代币和 ERC-721 NFT。以太坊的其他执行可以使用 Go Ethereum 客户端嵌入到 Go 中。

Go的学习难度不大,因为Go初始阶段的学习符合JS 或 C 开发人员的逻辑,同时提供大量的学习资源。如果有 C/C++/Java 经验的开发者掌握起来会更快。

根据 2020年Stack Overflow的开发者调查显示,Go 相当受欢迎,超过 62% 的人表示他们喜欢这种语言,并将继续用它开发。


5.Rust:简单性、并发性和高效率


早在 2015 年,一名前 Mozilla 员工就首次发布了 Rust,它是一种专注于安全和性能的多范式编程语言,其构建考虑到了速度和效率,这意味着它可以提供零成本的抽象、继承和功能特性。

Rust 具有惊人的速度和内存效率。它丰富的类型系统和所有权模型保证了内存和线程的安全,从而能够在编译时消除许多典型的错误。此外,它可以并发(和并行)代码,快速地处理事务。这为 Rust 程序提供了可扩展性,因为它的高吞吐量,所以每秒事务 (TPS)处理量比其他语言更多。

零成本抽象确保你使用的抽象几乎没有运行时开销,意味着底层代码和使用抽象编写的代码之间没有速度差异。零成本的概念也成为了 Rust 开发的核心原则。

Rust 还提供了优秀的文档和简便的编译器,这有助于轻松诊断问题,提高工作效率。意味着开发人员不需要花太多时间来优化代码,因为编译器将会把他们的编译抽象化。与其他语言相比,用 Rust 编写的应用程序运行得更快,即便是优化后的其他语言代码,也比不上Rust的运行速度。

此外,Rust可以很好地与其他语言结合使用,从而轻松调用另一种语言,反之亦然。这个特性在万物互联的网络中更能凸显其互操作性价值。​

由于这些优势,2020 年,一项针对开发人员的 Stack Overflow 调查显示,Rust为“最受欢迎的编程语言”,大约 86% 的受访者表示他们希望在未来继续使用 Rust 进行编码。

Polkadot 的推出及其对 Rust 的使用,直接导致 Rust 开发人员的职位空缺;Solana 的活跃开发人数自2021年推出以来从大约 180 人增加到近 1,000 名,增长了近 500%,事实表明了 Rust 强劲的应用潜力。

【如图】Rust 最适合高吞吐量和并发操作


6.最后:Rust 是个潜力股


由于 Web3 协议在处理数千万个不可信输入时需要快速且强大的性能,Rust 具有明显的优势。它以闪电般的速度处理功能复杂的任务,同时还减少了与内存、边界、空变量、初始化变量或整数溢出相关的错误。

Rust 具有一定的学习难度,但仍有很多开发人员去学习。使用 Rust 可以创建更强大的 dApp,它可以减少许多常见的错误,使dApp 在发布后按预期运行。它的并发能力正是每秒处理数万甚至数十万笔交易所需要的,这使得 Rust 成为 Web3 应用程序和虚拟世界交易的理想选择。

另一方面,Solidity 提供了一个庞大的群体和以太坊图书馆。这种网络效应促进了合作,也增加了特定 dApp 获得更多用途的可能性。

每种语言的工作需求量都在呈上升趋势,而掌握多种语言的开发人员会有更多机会选择工作。目前,对掌握Solidity 的开发人员的需求非常大,但学习 Go、Haskell 或 Rust会更具优势,因为使用它们进行开发的程序员较少,同时这些语言也更受雇主青睐。


(本文以及图片为【SupraOracles】原创内容,未经账号授权,禁止随意转载)