LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 新闻观点 > 以太坊:生态出现新语言

以太坊:生态出现新语言

2020-10-14 窃格瓦拉 来源:区块链网络

如今,以太坊网络上部署的大多数应用程序都是用Solidity编写的。

我们认为,Solidity团队做得很好,并且显然在做很多事情以保持其当前的市场份额。但是,我们也认为,开发人员的更多选择将对生态系统产生积极影响。

新语言的介绍

我们很高兴为以太坊生态系统宣布一种名为Fe(称为“ fee”)的新的智能合约语言。该语言最初是对Vyper编译器(在Rust中)的重写,旨在解决Consensys在《Vyper安全性评论》中从另一个角度强调的问题。


虽然最初的目标是使用替代的Vyper编译器,但最终,语言在语法上开始出现差异,因此决定使用新名称进行简化。铁出生了。


“ Fe”是元素周期表中化学元素铁的字母。铁传达了一种耐用感,这强化了编译器正确性的概念。Rust在铁上形成,这将名称与编写Fe编译器的Rust语言联系起来。
目标


这个项目继承了Vyper的许多东西。也就是说,它具有Pythonic语法,并强调语言安全性。因此,Fe的语法很大程度上受Python启发。这允许使用Python的开发人员熟悉的可读性和表达性代码。铁还使用静态类型并限制动态行为以减少踩踏声并提高安全性。
在开发的早期阶段,Fe和Vyper之间的差异仍然有限。

现在,人们会注意到,Fe从Rust借来了一些句法属性。随着我们继续添加新功能,Fe可能会开始与Rust更加相似。
铁实施的正确性


除了语言本身之外,我们还采取步骤来确保编译器实现正确。换句话说,应该高度相信由Fe编译器生成的可执行代码将相对于语言规范正确运行。


下面列出了我们为确保正确性而采取的一些步骤:


编写语言规范

如果没有要检查的规范,就不能证明编译器是正确的。因此,我们已经开始编写该语言的规范,该规范大量引用自Rust参考??????。我们将在实现功能时编写此规范。在我们准备进行审核时,我们将能够制定出全面的规范。


在Rust中实施


Rust是一种具有强大安全保证的系统语言。这些安全保证可防止Rust程序进入未定义的行为。例如,在安全的Rust中不可能使用空指针。这样一来,Rust编译器就可以在编译时捕获bug,否则在运行时会遇到bug。


使用不同的组件


Fe的目标是将编译器的组件分成遵循标准编译器设计指南的不同库。也就是说,我们已经将解析,语义分析和编译实现为具有自己的API和测试的独立库。关注点的分离使理解编译器的行为更加容易。


定位目标


编译器将Yul定位为中间表示形式。Yul是由Solidity团队开发的一个项目,旨在成为多个底层平台之间的共同点,这意味着我们不需要为EVM 1.0,EVM 1.5和eWASM编写单独的后端。当前,Solidity编译器为Yul-> EVM 1.0编译提供实验性支持。目前,我们仅使用Solidity后端进行Yul编译。这为我们节省了大量时间。


Vitaliks以太坊路线图帖子最近强调,将YUL标准化为中间语言也可能是针对Optimistic Rollup环境的便捷途径。


进展


解析器期望的EBNF语法可以在这里找到。解析器为该语法文件中指定的所有内容提供支持,并包括全面的测试。


今年年初,开发人员开始通过编译器。我们能够添加一些简单合同的支持。最值得注意的是,我们能够将一个简单的留言簿合同编译为功能字节码。


在过去的一个月中,铁的发展显着增加。我们对增加对ERC20合同中使用的所有功能的支持感到乐观,并能够在2020年底之前进行编译。显然,到那时,编译器绝不是生产ERC20的合适选择,但是我们期待通过这样一个众所周知的工作示例展示Fe的功能。


出于好奇,下面是一个简单的合同,该合同今天已经完全可用:

type BookMsg = bytes[100]

type BookMsg = bytes[100]

contract GuestBook:
pub guest_book: map<address, BookMsg>

event Signed:
idx book_msg: BookMsg

pub def sign(book_msg: BookMsg):
self.guest_book[msg.sender] = book_msg

emit Signed(book_msg=book_msg)

pub def get_msg(addr: address) -> BookMsg:
return self.guest_book[addr]

contract GuestBook: pub guest_book: map<address, BookMsg> event Signed: idx book_msg: BookMsg pub def sign(book_msg: BookMsg): self.guest_book[msg.sender] = book_msg emit Signed(book_msg=book_msg) pub def get_msg(addr: address) -> BookMsg: return self.guest_book[addr]

原文:链接

—-

编译者/作者:窃格瓦拉

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...