The embodiment of this application provides a compiling method and a compiling device, which includes acquiring the first dynamic language program to be compiled, deducing the type of at least one variable in the first dynamic language program and determining the type of each variable in the at least one variable by using static single assignment conversion processing. According to the type deduction results of each variable, at least one variable of which the static type can be deduced is statically processed. The compiling method and the compiling device of the embodiment of the present application can deduce the types of variables in the dynamic language program at the compiling stage, thereby advantageous to improving the running efficiency of the dynamic language program.
【技术实现步骤摘要】
编译方法和编译装置
本申请实施例涉及计算机领域,并且更具体地,涉及计算机领域中的编译方法和编译装置。
技术介绍
动态语言程序对变量的类型要求并不十分严格,代码简洁自由,相对于静态语言程序,动态语言程序在快速开发部署方面有明显优势,因此,开发者们开始在更多领域使用动态语言程序。动态语言程序在给程序开发者带来便利的同时,也给程序运行的效率带来了负面影响。由于动态语言程序中的变量的类型不确定,在程序运行时需要对动态语言程序的变量的类型进行判断,这样会增大运行程序的开销。例如,计算a+b,对于静态语言程序而言,只需要一条加法add或者字符串的链接操作就可以了,但是,对于动态语言程序来说,需要在程序运行的时候首先去分别判断a和b的类型,然后再根据a和b的类型进行计算,这无疑会使程序的运行效率大大降低。随着动态语言的广泛应用,提高动态语言程序的运行效率已经成为一项亟待解决的问题。
技术实现思路
本申请实施例提供一种编译方法和编译装置,能够在编译阶段对动态语言程序中变量的类型进行推导,从而有利于提高动态语言程序的运行效率。第一方面,提供了一种编译方法,包括:获取待编译的第一动态语言程序;利用静态单一赋值转换处理,对所述第一动态语言程序中的至少一个变量进行类型推导,确定所述至少一个变量中每个变量的类型推导结果;根据所述每个变量的类型推导结果,对所述至少一个变量中能够推导出静态类型的变量进行静态化处理。本申请实施例的编译方法可以由任何合适的装置执行,本文称为编译装置,本申请实施例对此不作限定。在一种具体的实现中,上述编译方法可以由编译器执行。应理解,上述类型推导结果分为可推导和 ...
【技术保护点】
1.一种编译方法,其特征在于,包括:获取待编译的第一动态语言程序;利用静态单一赋值转换处理,对所述第一动态语言程序中的至少一个变量进行类型推导,确定所述至少一个变量中每个变量的类型推导结果;根据所述每个变量的类型推导结果,对所述至少一个变量中能够推导出静态类型的变量进行静态化处理。
【技术特征摘要】
1.一种编译方法,其特征在于,包括:获取待编译的第一动态语言程序;利用静态单一赋值转换处理,对所述第一动态语言程序中的至少一个变量进行类型推导,确定所述至少一个变量中每个变量的类型推导结果;根据所述每个变量的类型推导结果,对所述至少一个变量中能够推导出静态类型的变量进行静态化处理。2.根据权利要求1所述的方法,其特征在于,所述利用静态单一赋值转换处理,对所述第一动态语言程序中的至少一个变量进行类型推导,确定所述至少一个变量中每个变量的类型推导结果,包括:利用所述静态单一赋值转换处理,确定可推导变量集合和/或不可推导变量集合,所述可推导变量集合包括所述至少一个变量中的一个或多个变量,所述可推导变量集合中的变量的类型推导结果为确定的静态类型,所述不可推导变量集合包括所述至少一个变量中的一个或多个变量,所述不可推导变量集合中的变量的类型推导结果为无法推导;根据所述可推导变量集合中的变量的类型推导结果和/或所述不可推导变量集合,确定所述至少一个变量中第一变量的类型推导结果,其中,所述第一变量既不属于所述可推导变量集合也不属于所述不可推导变量集合。3.根据权利要求2所述的方法,其特征在于,所述第一变量的定义语句为第一表达式,并且在所述第一表达式中,所述第一变量为第二变量和第三变量的函数,且所述第一变量的取值为所述第二变量或所述第三变量,根据所述可推导变量集合中的变量的类型推导结果和/或所述不可推导变量集合,确定所述至少一个变量中第一变量的类型推导结果,包括:若所述第二变量和所述第三变量均属于所述可推导变量集合,并且所述第二变量的类型推导结果和所述第三变量的类型推导结果相同,将所述第一变量的类型推导结果确定为所述第二变量的类型推导结果。4.根据权利要求3所述的方法,其特征在于,在所述将所述第一变量的类型推导结果确定为所述第二变量的类型推导结果之后,所述方法还包括:将所述第一变量添加至所述可推导变量集合。5.根据权利要求3或4所述的方法,其特征在于,所述根据所述可推导变量集合中的变量的类型推导结果和/或所述不可推导变量集合,确定所述至少一个变量中第一变量的类型推导结果,还包括:若所述第二变量和所述第三变量均属于所述可推导变量集合,并且所述第二变量的类型推导结果和所述第三变量的类型推导结果不相同,确定所述第一变量的类型推导结果为无法推导。6.根据权利要求3至5中任一项所述的方法,其特征在于,所述根据所述可推导变量集合中的变量的类型推导结果和/或所述不可推导变量集合,确定所述至少一个变量中第一变量的类型推导结果,还包括:若所述第二变量和/或所述第三变量属于所述不可推导变量集合,确定所述第一变量的类型推导结果为无法推导。7.根据权利要求5或6所述的方法,其特征在于,在所述确定所述第一变量的类型推导结果为无法推导之后,所述方法还包括:将所述第一变量添加至所述不可推导变量集合。8.根据权利要求2至7中任一项所述的方法,其特征在于,所述利用所述静态单一赋值转换处理,确定可推导变量集合和/或不可推导变量集合,包括:根据所述至少一个变量中的第四变量的定义语句,将所述第四变量的类型推导结果确定为第一类型,并将所述第四变量添加至所述可推导变量集合。9.根据权利要求2至8中任一项所述的方法,其特征在于,所述不可推导变量集合包括以下变量中的至少一种:所述第一动态语言程序中没有定义语句的变量、全局变量以及函数入参变量。10.根据权利要求2至9中任一项所述的方法,其特征在于,所述方法还包括:若所述至少一个变量中不再产生类型推导结果为可推导或不可推导的变量,确定已完成所述至少一个变量的类型推导。11.根据权利要求1至10中任一项所述的方法,其特征在于,在所述根据所述每个变量的类型推导结果,对所述至少一个变量中能够推导出静...
【专利技术属性】
技术研发人员:张辉,周志德,陈永健,
申请(专利权)人:华为技术有限公司,
类型:发明
国别省市:广东,44
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。