Rust与Go在区块链中的应用比较 - definoobs

22-11-07 banq

虽然Go和Rust并不是最流行的编程语言,但它们经常被那些考虑在区块链中使用的人比较。

毕竟,这两种语言都是在上世纪80年代和20年代出现的少数语言之一,使它们在过去两个世纪才涉足的语言海洋中脱颖而出。

当Golang与Rust被彻底研究后,就会发现这两种语言有惊人的相似性。

从我们的六个不同类别来看,Rust似乎比Go有更多的优势。然而,加密原语在Go中得到了更好的支持。它包括本地库、OpenSSL包装器和新的Tink库。

至少,Go的标准库隐藏了许多危险的方法,如分组操作,这使得原型设计有趣的想法变得很痛苦(是的,你可以用各种方式覆盖)。

先在每种语言中完成一些加密挑战,看看你喜欢哪一种。

在这篇文章中,我们将比较和对比Rust和Go作为区块链编程语言。

区块链的Rust与Go的对比
我假设你对学习如何在Go vs. Rust中实现加密算法和协议感兴趣,而不是如何使用高级库。

在实现低级算法方面,这些语言之间似乎没有什么区别。都是同样的算术和逻辑运算,这里和那里有一些语言上的怪癖。

对于高性能(和高安全性)的应用来说,你的库往往只是一个美化的包装,围绕着汇编。

Rust有一些好处,可以帮助减少模板(最明显的是它的宏系统),以及与C库的零成本互操作性(与Go不同),但没有革命性的东西。

然而,Go在这里有一个优势,因为谷歌可以简单地雇用全职的密码学工程师来创建一个世界级的最常见的算法的实现(AFAIK,Go的标准中的密码学算法的实现严重依赖于手动编写的汇编)。

这两种语言的主要区别在于类型系统的力量。
一个好的类型系统可以帮助实现互操作性,甚至可以通过编码在编译时检查的各种不变量来提高性能(例如,通过允许编译器消除运行时检查)。
在这方面,我相信Rust已经远远领先于Go,并且还在继续改进(例如,很快,我们就会有稳定的常量泛型MVP)。
例如,在RustCrypto中,trait crates包含各种算法家族的 "接口"。
在org中几乎所有的算法实现(以及一些第三方的实现)都是按照这些特质来写的,允许你像乐高积木一样交换算法和组合算法,而不需要去挖掘源代码。
如果你想支持那些没有被广泛使用的算法(例如,区域标准或新开发的算法),这个特性就特别重要。

当然,Rust的加密生态系统还包括 "传统 "的库,如OpenSSL/libsodium包装器、操作系统加密提供者,以及最引人注目的ring。
Ring大量借用了BoringSSL(谷歌对OpenSSL的分叉)的代码,故意限制了支持的算法数量,并被Rustles使用,其性能已经超过了OpenSSL。

Golang和Rust的概述
看看这个Golang和Rust的并排比较。这样一来,你就可以确定你所选择的语言的功能得到了最大的发挥。

1、性能
Go和Rust都对其性能指标给予了高度评价。作为新的语言,关键是它们不仅要有良好的性能,而且要比以前的语言有更好的性能。

尽管这两种语言由于其功能设置而显得比其他语言更快,但现在重要的是要知道它们的比较。

一个简单的基准测试表明,Rust在各种任务中都优于Go。

Rust在速度和性能方面都超过了Go。

2、特性
Rust的一长串特性,如零成本抽象、错误信息、移动语义、数据竞争预防、模式匹配等等,使Go的关键特性如二进制文件和包管理相形见绌。

Golang和Rust的比较显示,Rust的功能比Go多。Rust取得了胜利。

3、开发的便利性和速度
Go的可读性使其简单易学,所以编码应该是轻而易举的。

相比之下,在Rust中,诸如借用和所有权等高级概念使该语言更难掌握。Rust并不害怕承认它有一个陡峭的学习曲线。

Go比Rust更方便用户使用。Go赢了。

4、维护
你需要做的所有事情都包括在维护中,以确保你的程序正常运行并将继续运行。

总而言之,维护你的代码库在Go中会比在Rust中更容易,因为Go代码更简单。

由于其复杂性,Go的维护将比Rust简单。Go赢了。

5、社区
开源语言通常有大型的支持社区。开发者社区在帮助新加入语言的人学习其功能和最佳实践方面发挥着重要作用。

当然,确定一个社区的支持并不是一门精确的科学。然而,许多博主不断赞美Rust社区的力量,这是其持久性的一个很好的指标。

Rust和Golang都有强大的社区,但在这场Golang与Rust的对决中,Rust的社区得到的关注最多。简单地说,Rust是赢家。

6、受欢迎程度
很难衡量Go和Rust等年轻语言的受欢迎程度。

Rust和Go无法与JavaScript、Python或Java等经典语言的受欢迎程度相提并论,尽管你已经看到了所有的功能和好处。

根据Stack Overflow的数据,Rust和Go只有不到10%的开发者在使用。尽管如此,Go在顶级语言中排名第14,而Rust则排名第26。

这些排名是基于2021年1月的TIOBE指数,该指数考虑了各种因素,如流行的搜索引擎、计算机科学课程和熟练工程师的意见。

谈到Golang与Rust,Go更受欢迎。

现在让我们深入了解一下这两种语言:
Golang到底是什么,什么时候使用它?
Go是一种静态类型的、已编译的编程语言,通常被称为 "Golang"。

这种语言是由谷歌开发人员创建的,基于C语言,目的是与C++竞争。由于其简单的语法,Golang被比作Python。
因为Go是静态类型的,所以变量的声明必须遵守更严格的准则。
更好的错误检测,特别是在涉及到语法的时候,是这种限制性行为的一个好处。编译器通常使用静态类型检查来实现这一效果。
在执行之前,编译语言被转换(或编译)为机器代码。因此,一般来说,编译语言要比解释语言快。
可编译语言还能让你对硬件有更多控制。内存管理和多线程是Go的突出特点,此外还有语言的有意设计。
确保有效内存管理的一个Go组件是垃圾收集。

缺乏内存安全是C语言的缺点之一,Go希望能解决这个问题。另一方面,Go语言使用垃圾收集器在管理堆中分配内存。
简单来说,这意味着未使用的内存被用来存储新的对象,而未使用的对象则被从内存中 "扔掉"。垃圾收集程序运行得更快,因为它们不会有任何内存泄漏。

什么时候使用Golang是合适的?
Go可以用于各种各样的项目。在2021年的调查结果中,Web开发、区块链、数据库和网络编程被列为Go的主要使用案例。

大多数Go开发者认为,Go对网络服务的亲和力源于其并发能力。

Go经常被认为是后端网络开发的最佳语言。快速的网页执行对于在网上建立品牌知名度的关键,其方式比你想象的要多。

谷歌云平台也得到了该语言的正式支持。

谷歌云提供了许多依靠云计算概念来运作的服务。因此,Go在涉及高性能云计算应用时大放异彩。


什么是Rust,什么时候应该使用它?
Rust是一种经过编译的静态类型的编程语言,支持各种编程范式。

该语言的创建是为了优先考虑安全和性能,其主要目标是确保安全的并发性。

Rust在语法上与C++相似。Rust与Go或C++不同,没有垃圾收集;相反,它依靠借贷检查器来确保内存安全。

借贷检查器确保数据所有权规则得到遵守,并避免数据竞赛。两个或多个指针访问同一个内存位置被称为数据竞赛。

Rust是为一种叫做编程的特殊类型的编码而创建的。这种类型的编程需要大群或小群的人在一起工作很长时间。

Rust致力于适应和鼓励高度并发和高度安全的系统,以允许这种类型的编程。

2006年,Mozilla员工开始试验后来成为Rust的东西。Rust现在被用于Firefox浏览器的关键部分,在其稳定发布三年后。

何时使用Rust?
Rust几乎可以在任何地方使用。然而,有些地方比其他地方更适合。

例如,系统编程是一个Rust擅长的领域,因为它具有高质量的性能和零成本的抽象性。系统程序员是与开发过程中的硬件方面紧密合作的软件工程师。

Rust有一些中间层的功能并不奇怪,因为它的灵感来自C++。中级语言是低级语言和高级语言之间的一种机会主义的妥协。

因为它们可以处理硬件方面管理内存所需的复杂程度,所以它们经常被用来创建操作系统和计算机应用程序。

尽管缺乏抽象性,但它们可以被人眼阅读,这在机器代码中是不常见的。


 

1