以太坊联合创始人发明了新语言叫板Vyper,主链之后语言将引领新一轮大战?
作者 / Blockgeeks
编译 / Aholiab
在之前的文章中,营长从特性、规则和应用的角度,向大家全面介绍了以太坊新的合约语言Vyper的内容,很多朋友表示想看Vyper编程的实例。
在今天的文章中,营长就对Vyper这门新语言做更加深入的分析,并实际展示给大家看看Vyper写成的合约到底是什么样的。
另一方面,由原以太坊联合创始人Charles Hoskinson创办的第三代加密货币Cardano也推出了自己的合约语言Plutus,这门语言随着Cardano的背书,一经推出就呼声很高,经常被认为是可以跟Vyper分庭抗礼。
那么,这两种语言,到底谁才能一统未来智能合约的江湖?
对于区块链开发者来说,保持一颗学习的心态至关重要,这不,刚学会Solidity的你,眼看这门语言就要被Vyper取代了。
之前营长分享了以太坊新编程语言Vyper的介绍,朋友们纷纷表示想看Vyper编写代码的实例。为了满足大家,今天营长就给大家看一下用Vyper编写的代码到底长啥样。
没看过的同学赶紧来补课:V神绞尽脑汁开发Vyper,Python、Solidity要失宠?十分钟,看完这份12岁儿童都能看懂的智能合约指南,你就明白了…
不过另一方面,作为Cardano的主打合约编程语言,Plutus一直被认为是Vyper的核心竞争者。
那么,这两门语言到底有什么差别?对于开发者来说该如何选择?哪个才能代表智能合约的未来?
智能合约的未来,Vyper vs. Plutus
在讲Vyper之前,我们先来看看现在以太坊的合约语言Solidity。Solidity是由Gavin Wood、Christian Reitwiessner、Alex Beregszaszi、Yoichi Hirai,以及其他一些以太坊核心开发者开发的。
这门语言在设计之初参考了很多著名的项目和编程理念,如面向对象编程、web编程、汇编等,也覆盖了大量的使用场景。然而,Soldity并不完美,用它写出来的合约在审校上非常困难,原因在于过于多变,造成代码结构十分复杂。
因此,以太坊期望用Vyper来解决这些问题,由于有以太坊的背书,Vyper一直都受到无数开发者的关注。
而另一方面,Plutus作为一个被认为是能与Vyper对标的语言,则显得有点被低估了。
作为前以太坊联合创始人,Charles Hoskinson深刻理解第二代加密货币平台(以太坊)的种种弊端,如可扩展性等,因此Plutus在设计上采用了函数式编程方式,针对其前辈Haskell做了大幅升级,语法简洁,也拥有更强大的数学运算能力。
下面,就让我们一起来对比一下这两门语言吧。
毒蛇之信:Vyper
而Vyper语言的设计则正是针对Solidity的这些痛点,先来看看Vyper的官方定位:
Vyper是一门直接、简单的编程语言,对于智能合约的阅读和审计非常友好,可以帮助开发者更好地把注意力放在业务逻辑的实现上。
从这一定位就可以看出,Vyper的使用更简便、高效,尤其在代码审计上较之Solidity的提升很大。这一特性,主要归功于Vyper是基于Python的。而Python这门语言设计的初衷,就是让非技术人员都能编写合约的编程语言,语法结构十分简洁易懂。
不过,虽然Vyper很好地继承了Python简单易懂的特性,但也牺牲了很多Solidity的灵活性,因此,Vyper更适合写一些「小需求」,像写DApp这种大工程就有点捉襟见肘了。
我们不难理解以太坊之所以强推Vyper,主要有以下两点原因:
以太坊的Sharding(分片技术)及Casper FFG的应用,都是用Vyper写成的;
以太坊的核心开发者,都背书Vyper,希望它可以作为以太坊智能合约的默认语言。
除此之外,虽然继承了Python的简洁易懂,但Vyper安全方面,避免了一些状态修饰符递归调用和运算符重载造成的gasLimit向量攻击。此外,Vyper还包含大量针对算术运算的溢出检查。这样就杜绝了在合约审计过程中插入的恶意代码。
下面我们就一起来看一个由Vyper写成的智能合约,这个合约使用的是ERC-20标准。代码如下:
在上面代码中:
self函数用来在当前类中指定实例变量(instance variables);
@public和@private则设定当前合约的ABI(Application Binary Interface,应用二进制接口)的能见度和曝光度,并允许外部函数(如其他合约或钱包地址)的调用。
手持函数式秘密武器的Plutus
说完了Vyper,咱们再来介绍介绍本文的另一位主角Plutus。说起Plutus,可能国内的开发者不是特别熟悉,它是由Cardano推出的函数式编程语言,用来编写智能合约。
其实,Cardano推出过两种编程语言,一个是大名鼎鼎的Haskell,另一个则是Plutus。与Vyper一样,在讲Plutus之前,我们也看一下官方给这门语言下的定义:
Plutus是一门纯净的函数式编程语言,用来在Cardano上编写智能合约。其语法类似Haskell,比如在定义数据类型是,开发者可以直接调用类型名称、类型参数,以及构造函数替代(constructor alternative)列表,与Haskell一样,每个构造函数替代都有自己的类型参数。
更多关于Plutus的内容,可以参考官网:
https://cardanodocs.com/technical/plutus/introduction/
正如上面所说,Plutus是一种函数式的编程语言,要理解Plutus的精妙之处,就需要先知道什么是「函数式编程」。
目前,所有的编程语言,都可以被分为两大类:函数式编程(Functional programming)和指令式编程(Imperative programming)。
让我们先来看看「指令式编程」。
指令式编程
简单来说,指令式编程是指,开发者需要把所有计算机需要的运算步骤都写在代码里,每一步都是指令。
几乎所有传统的编程语言都是命令式的编程语言,如C++、Java,甚至Solidity。因此有时我们也称指令式编程为「算法编程」(algorithmic Programming)。
举个栗,如果我们在C++上实现一个需求:5+3=?,那么代码应该是:
从上面代码中可以看出,要实现这样一个简单的运算,需要4个步骤,即:
首先声明一个整数a,为其赋值5;
再声明一个整数b,为其赋值3;
声明一个整数c;
将a与b的值相加,存储到c
因此,这样一个加法运算要花费很多步骤,每个步骤都会对整个程序的状态产生影响,每个步骤也都有自己独立的运行结果。
函数式编程
函数式编程则不然。
它是指将电脑运算视为函数的编程方式。函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。
和指令式编程相比,函数式编程强调函数的计算比指令的执行重要。
举个例:假如现在有一个函数f(x),我们希望用它来计算另一个函数g(x),然后再用结果与第三个函数h(x)进行运算。与指令式编程不同的是,我们不需要一行行的去运行和计算,只需要写一行代码即可:
h(g(f(x)))
因此,函数式编程对解决数学类问题更友好也更安全,另外,函数式语言还可以帮助做形式化验证,即从数学的角度审计合约代码到底执行的是什么逻辑。这也是Cardano之所以使用函数式语言来写合约的原因(Haskell也是函数式语言)。
搞清楚了什么是函数式编程,让我们回到正题,接着说说Plutus这门语言。
简单来说,我们可以把Plutus看做是一个升级版的Haskell,只是语法更为简洁。与其说它是为编程而生,不如说它是为数学而生。
正因为这一特性,Cardano把Plutus定位在:金融机构、电商、股票期权交易等场景。
说了这么多,让我们实际看一下用Plutus写成的合约长啥样吧,
感兴趣的话可以在这里找到合约的源文件:
https://cardanodocs.com/technical/plutus/examples/
以下Plutus代码展示了加法、乘法和阶乘运算:
从上面代码中,可以看出函数式编程比指令式编程简洁了多少,就跟算术题一样。
写在最后
「币圈一天,人间一年」,区块链的发展一天一个样,作为开发者,了解最新的趋势和技术发展至关重要。
作为以太坊和Cardano最重要的新的编程语言,我们需要有敏锐的嗅觉和不懈的努力去更新自己的知识库。
希望今天的文章能让你对Vyper和Plutus有更深的认识,喜欢就分享给好基友吧~
内容转载请联系微信:
qk15732632926(备注:微信公众号+转载)
商务合作请联系微信:
fengyan-1101(备注:区块链大本营+商务合作)
最新热文:
大力戳↑↑↑ 加入区块链大本营读者⑦号群
(群满加微信 qk15732632926 入群)
(内容转载请联系微信:qk15732632926)
(商务合作请联系微信:fengyan-1101)
了解更多区块链技术及应用内容
敬请关注: