[发明专利]一种基于类型标注的Python程序类型推导方法有效
申请号: | 201910210830.X | 申请日: | 2019-03-15 |
公开(公告)号: | CN111694726B | 公开(公告)日: | 2022-04-05 |
发明(设计)人: | 陈林;马洪跃;许蕾;罗阳 | 申请(专利权)人: | 南京大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 210023 江苏省南*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 类型 标注 python 程序 推导 方法 | ||
本发明为一种基于类型标注的Python程序类型推导方法:首先对Python程序进行类型推导;然后对同样一部分源代码进行标注等级分析,使用ranking算法对变量进行标注价值排序;接着通过ranking算法推荐进行类型标注;最后通过增加这些类型标注再次进行类型推导,并多次迭代上述过程,类型推导‑>ranking排序‑>类型标注‑>类型推导‑>...;最后产生的所有静态类型信息可以被用来优化Python的解释运行以及帮助开发者理解Python源代码程序。
技术领域
本发明属于计算机技术领域,尤其是软件技术领域,且特别是有关于一种基于类型标注分析的动态语言的类型推导方法。
背景技术
随着业界对高级语言的大量使用,动态语言因其快速开发,快速部署等优点迅速占据了很大的市场。这些编程语言缺少类型声明,因而源代码更加简洁紧凑,颇受开发者青睐,往往社区更加活跃,使用规模迅速扩大。JavaScript在浏览器端的使用是一个很明显的例子。越来越多动态语言作为脚本的形式被加入到大型的软件系统中,但是,动态类型却使得它们很难维护,因为缺乏类型信息,开发者必须在每一次修改程序源代码之前重新对程序的关键代码建立认识,这不仅耗费了开发时间,而且更容易使软件系统产生缺陷。在运行效率上,动态类型语言程序无法在编译时期产生静态的控制流图,使得许多编译优化方法无法在这些语言中使用,从而导致不管是解释器还是JIT编译器都无法达到很好的性能。
将类型标注加入到动态语言的研究中,因为动态类型的本质特征,ad-hoc的类型推导方法无法精确推导出变量的类型。类型标注加上简单的类型推导算法在类型系统中越来越流行,而不是一味追求类型推导算法的提高。Typed Racket使用Occurrence Type的方法,实现在同一个项目中带有类型的源程序和没有类型的源程序可以共存。TypeScript使用标注和类型推导检查类型错误,并将带有类型检查的源代码直接编译为JavaScript代码,保证了严格的兼容性,作为JavaScript的超集发布。Python语言方面,使用静态程序分析方法的PySonar采用抽象解释推导变量类型,但是因为缺少了类型标注而不能做有效的类型检查工作,类型推导过程是前向推导,对于Python中多态函数的推导只能用UnionType类型进行表示,即根据本质上区别于Hindley-Miler方法(即根据自身定义进行推导),使得它并不能用于程序运行时期的优化,Union Type实际上也是在每一次的函数调用时都要对函数重新进行求值。Pyston使用LLVM编译器将Python编译完运行,但是同样诟病于Python的动态类型。
发明内容
本发明的目标是解决Python的动态类型导致类型推导的难度非常大、即使使用加入很多启发式算法的ad-hoc方法也不能很好地为编译时期的类型检查提供很多帮助等问题。本发明同时借鉴Typed Racket将类型推导和类型检查加入到动态语言中、Pyston将用JIT的方法编译优化Python代码的执行,创新地提出一种基于类型标注等级分析和类型推导、将静态类型检查加入到Python中并实现静态代码加载优化的方法。使用类型标注的辅助,以减少类型推导的难度,通过类型推导过程中的类型标注等级分析,反过来影响下一轮的类型推导结果使得推导结果更加精确,在一定程度上解决了抽象解释型类型推导方法推导结果不精确的缺点。本发明还部分解决了Python的动态特性与编译时期类型推导的不兼容性。最终使Python拥有部分静态类型成为可能,这使得Python软件开发更不容易出现类型缺陷,使Python程序的开发更加安全和高效。
为实现以上目标,本发明针对Python编程语言提出一种基于类型标注的类型推导和标注等级分析方法。方法包括下列步骤:
1)使用Python官方的类型标注语法,继而生成抽象语法树,通过简单的抽象语法树遍历收集类型信息;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910210830.X/2.html,转载请声明来源钻瓜专利网。