45

寻找开发区块链协议的完美编程语言

 5 years ago
source link: http://www.infoq.com/cn/articles/the-perfect-blockchain-language?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

导读:作为开发者来说,在进行区块链协议的开发时,是该选择号称更安全的语言呢,还是选择更容易掌握和上手的语言呢?让我们看看Debajyoti Ray是怎么说的。

就我们这一代的人们而言,区块链技术的作用就好比道路和桥梁。在建设基础设施时,我们会希望在未来中能够避免出现裂缝和坑洼。每位开发者都知道关于用户应用的箴言:“快速失败,尽早交付”(fail fast and ship early)。

“九层之台,起于累土”。对于持久的基础设施来说,最重要的是预先进行一些艰苦的、耗时的工作,来打下牢不可破的基础。

区块链是建立在之前的交易之上。一旦区块链的协议被公开,就会有更多的人发现其代码中的错误,但也有一些人愿意利用它们。这就是为什么早期投入的时间和精力用于验证,并确保程序具有可预测的属性从长远来看是有回报的。优秀的区块链应用也需要一个生态系统来支持它。因此,构建区块链平台的编程语言是其评估的主要因素之一。

在系统地学习、评估多种平台和技术之后,我将语言的基本属性缩小到编程区块链的基础架构,这些基本属性见下文:

1. 交易表达能力

一种语言应该能够促进可以表达和交流的思想广度。早期的、以及更为成功的区块链协议扮演了数字货币的角色。使用比特币,货币交易是不可改变的,可以在公共分类账上进行验证。像以太坊这样的智能合约协议为将更多的数据编码到交易中提供了机会。

区块链协议的未来发展将支持更丰富的交易形式,并且需要更复杂的数据结构。除了金融交易的数字之外,应用程序还可以存储富媒体文件(如用于虚拟现实的MKV)以进行写作内容创建;详细的工业设计;甚至是自动执行的人工智能程序!

2. 安全性

作为编程语言来讲,错误发现的越早,那么它用来编写程序就越安全。由Tony Hoare开创的形式验证法(Formal verification methods)可用于数学上证明计算机程序将按照预期的方式运行。

那么,为什么对区块链基础设施协议来说,形式验证特别重要呢?

对于在本地计算机上运行的独立程序,计算机的Bug是很讨厌的(尤其那些记得Windows Vista的人们来说)。但一旦连接到互联网,它们可以被骇客利用来关闭网络中所有的计算机。OpenSSL中的Heartbleed漏洞影响了全球数百万台计算机,本来可以通过形式验证来避免的。

译注:形式验证(formal verification),在计算机硬件(特别是集成电路)和软件系统的设计过程中,形式验证的含义是根据某个或某些形式规范或属性,使用数学的方法证明其正确性或非正确性。软件测试无法证明系统不存在缺陷,也不能证明它符合一定的属性。只有形式化验证过程可以证明一个系统不存在某个缺陷或符合某个或某些属性。系统无法被证明或测试为无缺陷,这是因为不可能形式地规定什么是“没有缺陷”。所有可以做的,就是证明一个系统没有任何可以想到的缺陷,并且满足所有的使系统符合功能要求的和有用的属性。

区块链加重了这种风险。Bug不仅会让计算机瘫痪,还会毁掉价值数十亿美元的重要健康记录和敏感数据。正因为有这么多的利害关系,因此前期投入在形式验证上的时间和精力绝对是值得的。幸运的呃是,像Coq和Isabelle这样的定理证明器可以自动化这一过程,并且代码可以用可形式验证的编程语言来编写。

3. 去中心化

我们需要一个去中心化的机器网络来验证网络中的交易。如果一个协议需要专门的设备才能有效地运行,那么它就会将权力集中到少数有资金购买专用软件进行挖矿或下注的人们手中。鉴于此,编译后的字节码(或虚拟机)必须是轻量级的。

对于具有不同地域、文化和语言的开发人员来说,去中心化的开源项目更有吸引力。调试代码越容易,协作开发就越好。与函数式语言的堆栈跟踪错误相比,核心转储和内存泄漏更难诊断和调试。

4. 社区

作为一种编程语言,它越流行,就会有越多的开发人员为开源项目做出贡献。这固然是一件好事儿,但也并非不可或缺的要求。如果没有强大社区的支持,那么教育就会变得更加重要。出于风险和回报的考量,最好选择使用较少开发人员的合适语言,而不是妥协去追求开发人员更多的语言。

现在,让我们根据以上四个标准,对主要的编程语言进行评估:

1026-1539417885935.jpg

值得注意的是,最流行的两种语言:JavaScript和Python在这张图表中表现不是很好。但它们是将API编写到核心协议的最佳选择。这就是为什么以太坊以及大多数主要项目都支持JavaScript和Python API的原因。

我应该选择哪一门语言来进行区块链开发?

经过权衡利弊之后,我选择了Ocaml作为首选语言。Haskell紧随其后,但由于它缺乏面向对象这一特性限制了应用程序的类型。OCaml作为一种编程语言,对 表达性安全性 进行了优化。OCaml是由INRIA的研究人员创立的,尽管它在美国的受欢迎的程度非常有限。我是在加州理工学院攻读研究生时邂逅这门语言的,那里是OCaml少数几个有热心社区支持的地方之一。此外,得益于我的法语知识,让我理解了一些相关材料。

用于DApp开发者倾向于像以太坊和Dfinity这样的平台,因为WASM汇集了许多流行的编码语言。当开发人员在网络安全、防御措施和生物技术等领域构建复杂的关键人物基础架构DApp时,他们会选择专门为关键任务DApp构建的平台。这就是构建在OCaml上的Tezos能够统治区块链基础设施项目平台的地方。

参考资料:

D. Felleisen. “On the expressive power of programming languages”. 1991.

Interview with Tony Hoare. 1980 ACM Turing Award recipient.

How Safe is Your Programming Language. 2008.

原文链接: The Perfect Blockchain Language

感谢杜小芳对本文的审校。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK