mt logoMyToken
总市值:
0%
恐慌指数:
0%
币种:--
平台 --
ETH Gas:--
EN
USD
APP
Ap Store QR Code

Scan Download

Ontology Neptone现已发布,是时候开启Python智能合约的盛宴了?

收藏
分享

尊敬的本体社区开发者:

您好!

一直以来,我们致力于构建 开源 开放 协同 的生态,不断完善各类开发工具,为使用本体技术的广大开发者带来高效便捷的体验,提升生产力的同时催化更多基于本体的热门游戏、资产管理和数据交换等领域的去中心化应用产生。

今天,我们推出全新支持 Python 语言的编译器—— Ontology Neptone ,囊括更全面的语法特性,支持更精准的语法检查,同时保持 Python 原生语义不变,助力开发者实现更多基于智能合约的强大功能场景。

功能亮点

New Feature

01 重写 编译框架 ,基于抽象语法树实现编译流程

02 支持 break、continue 关键字,可在循环中任意嵌套使用

03 支持 可级联的逻辑运算 ,保持 Python 原生语义

e.g.if a == 2 or (a == 5 and b == 4) or a == 3 and a == 7

04 支持 while、for、loop else 关键字

05 支持 in keyword,可使用 if a in list 形式的语句

06 在一行中可任意编写多个语句

07 全局变量可以存在 依赖赋值

e.g. a = 10; b = a

08 支持级联比较,保持 Python 原生语义

e.g.if a < b < c < d >= e:

a = 1

09 支持 级联赋值

e.g.a = b = c = 9

10 支持 条件表达式

e.g.c = a if x > 3 else b

11 Map values 内容及嵌套层级不受限制,可以是 list、map、function call 等多种形式

12 字符串的 slice 支持 string[ :], string[ : end], string[start: ] 的写法;

13 支持 列表推倒式

14 支持 assert 关键字

15 更严格的 函数定义检查 ,函数可以自定义,可以导入(import),任何除此之外的函数调用将会报未定义错误。包括系统调用和内建函数都需要被导入(import)

16 更多的 语法检查 ,如函数参数个数不匹配、函数重定义和变量未定义等。更精确的打印错误语法信息

支持的 builtins 具体详见 builtins.py

https://github.com/ontio/ontology-python-compiler/blob/master/ontology/builtins.py

17 实现一系列常用的 库函数

int、str、bytes2hexstring、hexstring2bytes、bytearray_reverse、split、list_remove_elt、elt_in

具体功能和实现见 libont.py

https://github.com/ontio/ontology-python-compiler/blob/master/ontology/libont.py

18 即将支持 map 的 has_key、values、keys 功能,list remove 功能以及恢复 global 代码的原生语义(支持 global 变量可写,实现跨函数共享变量)

19 更符合 Python 原生语法,支持更多语法特性。

编译器设计框架

Compiler Design Framework

a. 从 Compile Start 开始,以 Code Generate Driver 中心,驱动整个编译流程。流程的分解使得代码框架更加清晰,逻辑更具条理,避免在版本迭代过程出现 bug

b. 分析 Python 源码,获取 抽象语法树 (AST, Abstract Sytax Tree)

c. 根据 AST,获取 函数申明 ,处理导入(import)模块,分析函数分类特征,包括用户自定义函数(user defined)、库函数(lib)、内建函数(builtins)、系统调用(systemcall)、入口函数(Main/main),发现函数重定义等常规语法错误

d. 翻译 Python 全局代码

e. 确定函数的 栈大小

f. 确定函数是否有 返回值 ,编译器规定有返回值的函数必须要赋值给一个变量,避免打乱栈结构

g. 编译函数主体

h. 全部偏移只有等到所有源码编译完成后方可确定,该版本编译器已预留重定位(relocation)空间及对应的标签地址,最后一步执行链接工作

i. 编译完成,根据选项打印指令流

免责声明:本文版权归原作者所有,不代表MyToken(www.mytokencap.com)观点和立场;如有关于内容、版权等问题,请与我们联系。