迷你世界野人怎么驯服|loxx迷你世界|
文章阅读页通栏

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

来源: 作者:
尊敬的本体社区开发者: 您好! 一?#24065;?#26469;,我们致力于构建开源、开放与协同的生态,不断完善各类开发工具,为使用本体技术的广大开发者......
尊敬的本体社区开发者:

您好!


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

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

功能亮点
New Feature

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

02 支持 break、continue 关键字,可在循?#20998;腥我?#23884;?#36164;?#29992;

03 支持可?#35835;?#30340;逻辑运算,保持 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 在一行中可?#25105;?#32534;写多个语句

07 全局变量可?#28304;?#22312;依赖?#25345;?/span>

e.g. a = 10; b = a

08 支持?#35835;?#27604;?#24076;?#20445;持 Python 原生语义
e.g. if a <  b < c < d >= e:
           a = 1

09 支持?#35835;持?/span>

e.g. a = b = c = 9 

10 支持条件表达式 

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

11 Map values 内容及嵌套层级不受限制,可以是 list、map、function call 等多?#20013;?#24335;


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 功能?#32422;?#24674;复 global 代码的原生语义(支持 global 变量可写,实现跨函数共享变量)

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

编译器设计框架
Compiler Design Framework

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

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

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

d. 翻译 Python 全局代码

e. 确定函数的栈大小

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

g. 编译函数主体

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

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


扫描二维码即刻体验


更多专栏文章:http://www.dicjk.icu/zhuanlan
声明:本文由入驻区块网专栏作者撰写,观点仅代表作者本人,绝不代表区块网赞同其观点或证实其描述。

关键词: Ontology Neptone  Python智能合约  
0/300
? 迷你世界野人怎么驯服