哪种编程语言最适合区块链?

2020-04-28    来源:raincent

容器云强势上线!快速搭建集群,上万Linux镜像随意使用

作者:Duomly 译者:罗远航 来源:InfoQ

区块链技术由于其安全、快速以及去中心化的特性(虽然不是所有项目都满足这些特性,但是大多数项目是符合的)已经迅速渗透到了各种业务场景、我们的生活以及身边的企业中。

数以千计的区块链项目正在开发,或者已经开发完成并且部署到了网络中。各个企业都在寻求区块链的新点子或者试图去改进其他公司正疯狂创造的东西,然而这仅仅是区块链技术驱动这个世界的开始。

作为开发者来说,在区块链行业找到一个薪水高、待遇好的工作是让人梦寐以求的。因此,这就引出了一个很重要的问题:

哪种编程语言最适合区块链?

在区块链开发圈子里,我们找到了一些流行的编程语言,有 JavaScript、C#、C++、Python、Golang、Solidity、Java 和 Rust。

接下来我会简短介绍一下这些编程语言,它们都有哪些优缺点,上手难度以及哪些区块链项目在应用这些语言。

1. JavaScript

 

哪种编程语言最适合区块链?

 

JavaScript 是一门解释型高级编程语言。

JavaScript 是基于原型编程的动态弱类型语言,是出众的 Web 技术之一。

JavaScript 在近些年非常流行,像 Angular、React、Vue、Node.js 这些流行的开发框架都是基于 JavaScript 的。

优点

面向对象

原型编程设计

支持函数式编程

非常流行,几乎所有 IT 公司都需要 JavaScript 框架

缺点

动态语言

弱类型(但是可以使用 TypeScript 解决这个问题)

上手难度

JavaScript 属于一种入门难度比较低的编程语言,我们甚至不需要深入进行学习就能将其应用于生产。

使用 JavaScript 进行编程,我们只需要学习一下基本知识,当有需要的时候再去深入了解就好。

目前,在网上有非常丰富的课程和教程能够帮助我们学习 JavaScript,不仅仅可以学习 JavaScript 这门语言,还可以学习很多流行的开发框架。

区块链应用

最著名的应用是 web3.js 和 ethereum.js 这两个 JavaScript 库,他们能够帮助开发者在前端应用中和以太坊网络以及智能合约进行交互。

开发者用到的比较多的另外一个 JavaScript 库是基于 node.js 的 Hyperledger Fabric SDK。Hyperledger Fabric SDK 在大公司和企业中应用比较广泛。

JavaScript 另外一个在区块链智能合约方面的应用场景是 NEO。NEO 是一个高效的区块链公链,能够每秒处理数以千计的交易。

另一个使用也比较频繁但是不那么著名的 JavaScript 应用是闪电应用,它是构建于比特币网络上的快速支付通道。还有一个我想提的是 Raiden 网络,它是构建于以太坊网络之上的高速基础架构设施。

2.C-Sharp

 

 

C# 是一门 20 世纪 90 年代末创造出来的高级面向对象编译型编程语言,20 世纪初为 Microsoft 所开发。

它是一门非常类似于 C++ 或者 Java 的编程语言,采用了类集合和继承。

优点

支持 .NET

比较易于上手

流行度高

面向对象

强类型语言

动态代码支持

缺点

欠缺 Linux 系统支持

面向 Windows 开发者

上手难度

对于我来说,C# 由于其语法和强类型,不像 JavaScript 那么简单易学,但是也不像 Go 语言学起来那样困难和复杂。

除此之外,也有比较丰富的学习资源和材料使得这门编程语言比较易于学习。

应用场景

C# 在许多区块链项目中都有应用,其中最著名的是 NEO 公链,它号称中国版的以太坊。

NEO 是一个高效的区块链平台,每秒可处理的交易数量可达数千条。

另外一个流行的使用 C# 的区块链项目是 IOTA,它面向的场景是物联网,它是一个具有高拓展性以及 0 交易手续费的公链项目。

3. C++

 

 

C++ 是一门强类型的、高效的、面向对象的编译型语言。

重要的是,C++ 是一门非常高效并且能够对硬件进行访问的语言。

有趣的是,C++ 是在上世纪 70 年代~80 年代发明出来的,当时是作为 C 语言的扩展。

优点

独立和多平台

运行高速

和 C 语言类似

强静态类型

缺点

代码冗余程度高

不易学习

调试复杂

不支持垃圾回收机制

上手难度

由于 C++ 比 C 语言要更复杂,所以学起来也更困难。

对于初学者来说,C++ 确实是一门不那么易于学习的编程语言。

应用场景

C++ 在许多著名的区块链加密货币以及重要的区块链项目中得以应用:

比特币(最著名的加密货币)

瑞波币(中心化高速加密货币)

比特币现金(加密货币)

莱特币(加密货币)

门罗币(匿名加密货币)

EOS(高速区块链网络,其中的系统加密货币也叫做 EOS)

Stellar(支付网络,其中一位创始人是 eDonkey 的创始人之一)

QTUM(某种意义上来说,它是以太坊技术和比特币技术的结合)

Cpp-ethereum(C++ 实现的以太坊客户端)

4. Python

 

 

Python 是一门流行的动态类型的高级编程语言。

Python 也支持面向对象编程以及函数式编程。

这门编程语言比起以前更加流行了,在机器学习以及人工智能方面的开发中表现非常出众。

许多 IT 巨头使用 Python 开发了许多智能工具和框架(比如 dialogflow 以及 TemsorFlow)。

在开发聊天机器人时,Python 也是一门被选用比较广泛的语言。

优点

非常易于学习

有很多现成的库和框架,比如 Django 或 Tensorflow

缺点

通常被用于服务端

上下文环境不那么智能

各种类库的文档并不足够完善

上手难度

Python 非常流行并且经常被选为第一门用于入门的编程语言。

互联网上有非常丰富的教程和课程,使得 Python 这门语言非常易于学习。

应用场景

Python 在许多优秀的区块链项目中得到应用,比如说有使用 Python 实现的以太坊客户端。我们也能用 Python 在 NEO 和 Hyperledger 上部署智能合约。

另一个我想要提到的是:steempython。它是 steemit 的 Python 实现版本,steemit 是一个流行的社交媒体、内容提供生态。

5. Golang

 

 

Go 是由 Google 员工发明的一门静态类型的编译语言。

Go 想要做的是将 Python 这种易于开发的特性和 C++ 这种编译语言的高效特性结合起来。

优点

内存安全

垃圾回收机制

强类型语言

运行速度快

学会之后,开发易于上手

可扩展性强

缺点

学习起来不那么容易

非常年轻的语言,社区规模不大

不像 Python 或者 JavaScript 有众多库和开发包

对于一些开发者来说,Go 语言的语法不清晰甚至有些丑陋

上手难度

Go 语言在互联网上没有那么多像 JavaScript 教程这样多随处可见的好教程,人们不得不更深入地寻找一些学习资料,而且 Go 是一门复杂的语言,所以大家普遍觉得它是一门难学的语言。

其实,这个观点更多的是来自于 Python/JavaScript 开发者,因为 Go 语言和这些语言的差异的确很大。

如果你之前学习过 C++ 或者 Java,学习 Go 语言对你来说应该会比较轻松。

应用场景

和 Golang 相关的区块链项目非常之多,我这里只介绍一些最流行的。

Go 语言编写的最著名的一个项目是 Go-ethereum,它是一个 Go 语言编写的以太坊客户端。

另一个著名项目 Hyperledger Fabric 项目也是使用 Go 语言来实现的,Hyperledger Fabric 是一个可以为大公司提供区块链解决方案的项目。

Loom Network 也是用 Go 编写的一条链,它目标的方向是为去中心化在线游戏提供解决方案。不那么出名的项目还有 Btcd,它是比特币的 Go 语言实现版本。还有一个项目叫做 Gochain,它是一个用 Go 实现的与以太坊兼容的区块链项目。

除此之外,我还想介绍的一个项目是 Dero,它也是用 Go 实现的一个高效的区块链项目,目标是解决智能合约的隐私性问题。

6. Solidity

 

 

Solidity 是一门面向智能合约的静态类型语言,它是由以太坊开发者发明的。

它是为 EVM (以太坊智能合约执行虚拟机)而生的,是智能合约开发的主要编程语言,也是以太坊智能合约的主要编程语言。

优点

静态类型语言

易于学习

使用人群增长迅速

缺点

非常年轻的一门语言

社区规模小,能够得到的支持比较少

不通用(仅用于以太坊生态)

非常脆弱(易被攻击)

非常容易犯关键性错误,因此需要反复对代码进行全面测试

上手难度

Solidity 不是一门很复杂的编程语言,而且和 JavaScript 很类似,像是加入了类型特性的 微缩版的 JavaScript(在 JavaScript 项目中使用 TypeScript 来加入类型这一特性也是很常见的)。

因此许多有经验的 JavaScript 开发者能在几天之内就学会 Solidity,尤其是当 duomly.com 这样的网站提供了许多交互式学习教程之后,学习 Solidity 就变的更容易了。

应用场景

我们通常使用 Solidity 来开发以太坊的智能合约。

我没有看到其他项目有使用 Solidity 的,但是目前以太坊的开发生态是一个很庞大的生态,是区块链开发领域中非常重要的组成部分,因此,Solidity 也是区块链产业中应用最广泛的编程语言之一。

7. Java

 

 

Java 是一门强类型的、基于类的编译型编程语言,它是由 Sun Microsystems 开发的。

Java 是面向对象的语言,在大公司之中很流行。

优点

跨平台,不依赖操作系统

强类型语言

对面向对象编程支持非常友好

社区庞大并且类库丰富

比起 C、C++ 开发更容易

具有垃圾回收机制

内存清理容易

缺点

需要 Java 虚拟机运行环境

比 C++ 和 Go 慢

上手难度

Java 和 C# 难度相当,比 JavaScript 或者 Python 稍难一些,也更复杂一些。但 Java 是一门非常流行的编程语言,有很多学习材料。

一般来讲,Java 比 Golang 和 C++ 都简单一些。

应用场景

Java 语言在区块链行业中是很流行的,比较流行的项目 IOTA(在 C# 那部分内容已经介绍了 IOTA)用到了 Java。一个比较有名的 P2P 加密货币平台 NEM 也用到了 Java(NEM 是使用 Java 编写的)。

还有一些用到 Java 的区块链项目有:

Neo 的智能合约

Hyperledger 的智能合约

IBM 区块链

BitcoinJ(比特币的 Java 实现)

以太坊

8. Rust

 

 

Rust 是一个系统级、强类型的编译型编程语言,自 2009 年以来,Mozilla 一直在对 Rust 进行开发和赞助。

Rust 的语法类似于 C++。

优点

强类型语言

安全

支持函数式编程

和 C++ 一样快

基于特征的继承

运行环境精简

缺点

学习难度大

不是特别有名,因此社区规模不大,可用类库不多,因此经常需要开发者从头开始写代码解决一些问题

没有清晰的标准方式对数据库进行访问

应用场景

并没有特别多的区块链项目用到了 Rust。

其中一个用的 Rust 的项目是 Parity,它是一个 Rust 编写的以太坊客户端,它运行速度快并且很安全。

另一个流行的项目是以太坊经典,这个项目的产生源于以太坊历史上一次重大的黑客事件,它是从以太坊分叉产生出来的加密货币项目。

介绍的最后一个项目是 Exonum,它是一个面向区块链安全的框架,它每秒钟能处理上千条交易。

总结(获胜者)

不同编程语言在区块链行业中的工作招聘数量:

JavaScript:565 份

Solidity:424 份

Python:394 份

Go:361 份

C#:301 份

C++:289 份

Java:289 份

Rust:54 份

JavaScript 胜出

工作待遇排名:

为了获取到最优工作待遇的排名,我们挑出了各个编程语言的工作机会中薪水年薪超过 15 万美金的招聘信息,以数量多少的形式进行了排名。

结果如下:

JavaScript:89 份

Go:81 份

Solidity:77 份

Python:71 份

C#:61 份

C++:61 份

Java:52 份

Rust:14 份

JavaScript 胜出

易学性排名

尽管学习是非常有个体性差异的事情,但是编程语言或复杂或相对简单,互联网上的学习资源也良莠不齐,因此,我决定根据我的个人经验和互联网统计数据进行一个排名。结论如下:

Solidity

Python

JavaScript

Java / C#

C++

Go

Rust

Solidity 胜出

综合排名

在列出了以上的关键点之后,我们可以结合这几项选出一个综合排名最高的语言了。

由于 JavaScript 广泛用于前端应用中,在后端和中间件中也有不少应用,同时也是工作机会最多的以及工作待遇最好的,理应胜出。

易于学习对于 Solidity 来说是一个明显优势,直到 dApp 不再流行之后,Solidity 的热度可能会锐减。

优胜者:JavaScript 和 Solidity

然而,如果你仔细查看排名,你会发现所有的语言都有不少工作机会,而且很多工作机会的薪水都很不错。

对于不同语言来讲,工作机会的数量和语言难度的差异并不大,因此我可以负责任的告诉你,使用其中任何一门编程语言,你都可以在区块链行业很快找到一份好工作。

原文链接:Which programming language is the best for blockchain?

标签: 编程语言  

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:值得推荐的8个git/github项目数据分析工具

下一篇:2020信息通信产业十大技术趋势发布