#contract #smart-contracts #blockchain #vapory #emerging #language #goal

va

Va是Vapory区块链的一个新兴智能合约语言

显示crate…

1个不稳定版本

0.0.1 2021年5月25日
0.0.0 2021年5月25日

#8#emerging

Apache-2.0

10KB

Va是Vapory区块链的一个新兴智能合约语言。

概述

Va受到Vyper的启发,旨在实现现有Vyper项目的目标,以及以下附加目标:* 通过使用更好的工具、应用形式化方法和更严格的发展实践来强调正确实现* 一个完整的语言规范,以帮助验证编译器的正确性* 通过使用YUL IR格式支持eWASM和EVM代码生成* 在具有强大保证的强大、系统化语言(Rust)中实现,以提供强大的安全性保证* 语法改进和额外的代码重用功能* 静态构建的编译器二进制文件,以实现更平滑的安装过程* WASM编译器二进制文件,以提高可移植性和Va合约的浏览器内编译

继承目标

Va旨在实现现有Vyper项目的大部分目标。这些目标在该项目的文档中有描述(见该项目的文档),尽管我们在这里也总结了它们:* 边界和溢出检查* 通过限制动态程序行为来保证可决性* 更精确的气体估计(作为可决性的结果)* 静态类型* 支持纯函数* 二进制定点数学* 对重入的限制* 静态循环以下是我们可能不会复制现有Vyper项目目标或方面的列表:* 缺乏代码重用功能,如

  • 修饰符(可重用的断言)- 方法解析和类继承(尽管我们对此持保留意见)- 模块导入* 严格执行动态行为的限制--虽然我们旨在默认提供Vyper的可决性,但我们认为在某些项目中,禁用可决性功能可能也有用。

附加目标

更严格的发展实践

我们希望推广以下开发实践:* 对所有编译器组件进行彻底的单元测试,从词法分析和解析例程到类型检查和编译例程。* 对组合组件进行彻底的集成测试,以识别抽象边界的问题。* 在适当的情况下,对组件进行基于属性的测试或模糊测试。有关基于属性的测试框架的示例,请参阅Rust的QuickCheckHaskell的QuickCheckhypothesis

  • 上述测试目标至少应提供100%的代码覆盖率,但还应冗余地测试不同使用模式中的相同代码部分。* 关注点分离 -- 负责编译不同阶段(解析、类型检查、编译等)的组件应清楚地分离到不同的库中,具有不同的API。* 可维护性 -- 应考虑未来贡献者的代码编写。复杂功能不仅应自动测试,还应记录在开发者文档中。代码应遵循DRY原则,并包括封装特定任务的抽象。

对eWASM和EVM的支持以及YUL的使用

我们希望利用YUL IR格式作为针对eWASM和EVM平台的手段。YUL正在由Solidity社区积极开发,我们看到了通过共享使用YUL与Solidity项目协同的机会。

将Rust用作实现语言

Rust编程语言在PL社区中已经是一颗新星多年了。我们相信它提供了以下因素的合理平衡:* 类型和安全内存 * 易用性 * 表达性 * 开发者社区的大小和质量 * 诸如迭代器、函数式编程特性等现代语言惯用法的可用性 * 来自Mozilla、Rust项目和Mozilla基金等知名组织的支持。Rust项目是WASM项目的主要推动力之一,WASM项目很可能会在Ethereum社区中发挥核心作用。Rust编译器是针对WASM平台的顶级编译器之一。使用编译语言(尤其是Rust)将有助于编译发布过程的改进。新的编译器版本可以作为静态编译的二进制文件(消除对现有Python二进制文件的依赖)或作为WASM二进制文件(打开在浏览器中运行Fe的可能性,或在遥远的未来在链上运行)提供。

语言规范和形式化方法

我们希望提供一个完整的语言规范,包括以下部分:* 与Python语法规范类似的扩展BNF格式的语法规范。

  • 一种操作、小步骤语义,用于描述正确的程序评估和行为。* 一些非正式的散文部分,以帮助理解语法、语义、它们之间的关系以及它们操作的环境。规范的工作草案可以在这里找到这里。提供规范文档的次要目标可能是通过工具(如K框架)提供可执行的规范。
    如果可以在不费太多力气和不影响实现其他目标的情况下实现,提供这样的可执行规范可能成为主要目标。通过应用严格的发展实践和提供完整的语言规范,我们希望将形式化验证方法应用于Fe编译器及其生成的程序。

进展与路线图

Va 的发展目前处于早期阶段。以下是最近完成的工作的简要概述以及一些短期和长期目标。以下列表均不应被视为详尽无遗,也不应被视为代表工作项的确切优先级。

最近实现的目标

  • 完成了对 python 标准库 tokenize 模块 的移植到 Rust * [x] 确定了解析器的整体设计 * [x] 完成了几个基本的解析器 * [x] 所有代码现在都在本地和 WASM 平台上进行了测试,WASM 测试通过 node.js 进行 * [x] 通过测试达到 ~100% 的代码覆盖率。由于某些代码路径不可达,且我们的覆盖率工具目前没有支持忽略特定代码行的功能,覆盖率目前最大化达到 ~99%。
  • 确定一个适当的 Python 语法子集以及定义 Fe EBNF 语法所需的所有语法扩展 - 消除不适用于 Va 的某些 Python 语法元素(例如 async 构造,lambda 表达式,像 *args**kwargs 这样的参数打包语法等。) - 包括更直接捕获 Fe 语言结构的语法元素(例如事件,合约或接口定义,类型维度等。)
  • 完成对 Fe EBNF 语法的解析器编写 * [x] 解析一个基本的问候合约到 AST * [x] 将基本的留言簿合约的 AST 编译成 YUL * [x] 从 YUL AST 对象生成 YUL 源代码(通过 yultsur) * [x] 使用生成的 YUL 源代码调用 Solidity 编译器以生成编译的二进制文件(通过 solc-rust

短期目标

长期目标

  • 实现当前 Fe 全套功能的编译程序 * 实现一个 Rust 的 YUL 编译器,以消除与 Solidity 编译器的交互需求 * 使用语言规范正式验证 Fe 编译器

无运行时依赖