代码生成方法、装置、电子设备及计算机存储介质制造方法及图纸

技术编号:26169929 阅读:26 留言:0更新日期:2020-10-31 13:35
本发明专利技术实施例提供了一种代码生成方法、装置、电子设备及计算机存储介质,其中,代码生成方法包括:获取待进行语言转换的第一中间代码;对所述第一中间代码进行检测,获取所述第一中间代码中待进行安全点调用和/或待进行异常处理的调用点;对所述调用点进行标记,以将所述第一中间代码转换生成包括所述标记的第二中间代码。通过本发明专利技术实施例,既提升了编译项目整体性能,又大大降低了对技术人员的代码转换能力的要求。

【技术实现步骤摘要】
代码生成方法、装置、电子设备及计算机存储介质
本专利技术实施例涉及计算机
,尤其涉及一种代码生成方法、装置、电子设备及计算机存储介质。
技术介绍
随着网络技术的发展,通过浏览器网页获取信息已成为人们生活和工作的常态。浏览器网页内容的可以通过诸如超文本标记语言HTML等来编辑实现,但HTML不易编辑动态或互动的网页,因此,JavaScript语言应运而生。为了更好地服务于网页,一种使用JavaScript引擎对JavaScript代码进行处理的方式又被提出。JavaScript引擎是执行JavaScript代码的解释器,其可以实现为标准解释器或即时编译器。其中,Google公司提供的V8引擎是当前被广泛使用的一种JavaScript引擎。与常规JavaScript引擎不同的是,V8引擎引入了JIT编译(Just-In-Timecompilation)方式,在运行时把JavaScript代码转换为高效的机器码,而不再依赖于解释器去执行。由此,提高了JavaScript代码的执行性能。虽然V8引擎在一定程度上提升了JavaScript代码的执行性能,但在实际应用中技术人员在想要实现某种功能时却可能采用其它编程语言如,C语言、C++语言、Java语言等等,再将其转换为JavaScript代码通过V8引擎实现。这种情况下,因这些其它编程语言并不能直接与JavaScript语言进行完全地转换和对接,一方面,造成编译项目整体性能较差;另一方面,也对技术人员提出了更高的不同代码间的转换能力要求。
技术实现思路
有鉴于此,本专利技术实施例提供一种数据处理方案,以至少部分解决上述问题。根据本专利技术实施例的第一方面,提供了一种代码生成方法,包括:获取待进行语言转换的第一中间代码,对所述第一中间代码进行检测,获取所述第一中间代码中待进行安全点调用和/或待进行异常处理的调用点;对所述调用点进行标记,以将所述第一中间代码转换生成包括所述标记的第二中间代码。根据本专利技术实施例的第二方面,提供了一种代码生成装置,包括:第一获取模块,用于获取待进行语言转换的第一中间代码;第二获取模块,用于对所述第一中间代码进行检测,获取所述第一中间代码中待进行安全点调用和/或待进行异常处理的调用点;生成模块,用于所述调用点进行标记,以将所述第一中间代码转换生成包括所述标记的第二中间代码。根据本专利技术实施例的第三方面,提供了一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如第一方面所述的代码生成方法对应的操作。根据本专利技术实施例的第四方面,提供了一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现如第一方面所述的代码生成方法。根据本专利技术实施例提供的代码生成方案,在代码编译阶段获取到待进行语言转换的第一中间代码后,对该第一中间代码进行待进行安全点调用和/或待进行异常处理的调用点的检测,对检测到的调用点进行标记,并生成包括所述标记的第二中间代码。以在后续对该检测出的调用点对应的代码部分进行适应性处理,最终生成满足需求的目标代码。因中间代码与具体语言无关,且对待进行安全点调用和/或待进行异常处理的调用点进行标记后生成的第二中间代码,可以有效指出需要后续进行处理的点,由此使得后续生成的目标代码能够更好地与目标对象(如V8引擎)兼容。通过本专利技术实施例的方案,既提升了编译项目整体性能,又大大降低了对技术人员的代码转换能力的要求。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。图1为根据本专利技术实施例一的一种代码生成方法的步骤流程图;图2为根据本专利技术实施例二的一种代码生成方法的步骤流程图;图3为根据本专利技术实施例三的一种代码生成装置的结构框图;图4为根据本专利技术实施例四的一种代码生成装置的结构框图;图5为根据本专利技术实施例五的一种电子设备的结构示意图。具体实施方式为了使本领域的人员更好地理解本专利技术实施例中的技术方案,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本专利技术实施例一部分实施例,而不是全部的实施例。基于本专利技术实施例中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于本专利技术实施例保护的范围。下面结合本专利技术实施例附图进一步说明本专利技术实施例具体实现。实施例一参照图1,示出了根据本专利技术实施例一的一种代码生成方法的步骤流程图。本实施例的代码生成方法包括以下步骤:步骤S102:获取待进行语言转换的第一中间代码。本专利技术实施例中,第一中间代码可以为任意的源代码经转换后的中间代码,例如,schedule后的turbofanIR。本专利技术实施例不对第一中间代码及第一中间代码来源的源代码的语言类型进行限定。第一中间代码的获取可以通过任意适当的方式实现,如,LLVM的IRBuilder。LLVM是构架编译器(compiler)的框架系统,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)和空闲时间(idle-time),并兼容已有脚本。并且,LLVM提供了与语言无关的中间代码,因此,可将不同语言代码生成中间代码,从而实现通过LLVM将不同的语言相互连结起来。但不限于LLVM,其它与LLVM具有类似架构和功能的代码生成器同样适用本专利技术实施例的方案。Builder是用于简化LLVM指令生成的辅助对象,IRBuilder类模板的实例可用于跟踪当前插入指令的位置,同时还带有用于生成新指令的方法。因此,可以通过IRBuilder类实例化后生成的IRBuilder对象实现本实施例的方案。中间代码是一种结构简单、含义明确的记号系统,这种记号系统复杂性介于源程序语言和机器语言之间,容易将它翻译成目标代码。另外,还可以在中间代码一级进行与机器无关的优化。步骤S104:对所述第一中间代码进行检测,获取所述第一中间代码中待进行安全点调用和/或待进行异常处理的调用点。因源代码与目标代码之间总具有一些不同之处或称为不兼容之处,因此,与源代码对应的第一中间代码,和,与目标代码对应的第二中间代码之间也同样存在不兼容之处。通过对第一中间代码的检测,可以从中确定不兼容之处,包括待进行安全点调用的调用点和待进行异常处理的调用点中的至少一者。其中,进行安全点调用的调用点和待进行异常处理的调用点均可指示需后续进行代码转换过程中需特别关注的代码部分。待进行安全点调用的调用点可以指示需要通过代码生成器之外的调用函数对其进行处理的那部分第本文档来自技高网
...

【技术保护点】
1.一种代码生成方法,包括:/n获取待进行语言转换的第一中间代码;/n对所述第一中间代码进行检测,获取所述第一中间代码中待进行安全点调用的调用点和/或待进行异常处理的调用点;/n对所述调用点进行标记,以将所述第一中间代码转换生成包括所述标记的第二中间代码。/n

【技术特征摘要】
1.一种代码生成方法,包括:
获取待进行语言转换的第一中间代码;
对所述第一中间代码进行检测,获取所述第一中间代码中待进行安全点调用的调用点和/或待进行异常处理的调用点;
对所述调用点进行标记,以将所述第一中间代码转换生成包括所述标记的第二中间代码。


2.根据权利要求1所述的方法,其中,所述对所述调用点进行标记,以将所述第一中间代码转换生成包括所述标记的第二中间代码,包括:
对所述调用点进行标记,并获取被标记的调用点的位置信息;
根据所述标记和所述位置信息,将所述第一中间代码转换生成所述第二中间代码。


3.根据权利要求1或2所述的方法,其中,所述对所述调用点进行标记,以将所述第一中间代码转换生成包括所述标记的第二中间代码,包括:
对所述调用点进行标记,并调用代码生成函数对包括所述标记的第一中间代码进行生成所述第二中间代码的处理,其中,所述代码生成函数中包括至少一个执行函数;
在所述处理过程中,判断当前执行函数中是否存在预设的用于指示尾调用的操作数;
若存在,则获取当前执行函数的执行结果,并根据所述执行结果生成所述第二中间代码。


4.根据权利要求3所述的方法,其中,所述操作数具有调用属性和返回属性。


5.根据权利要求1所述的方法,其中,在所述以将所述第一中间代码转换生成包括所述标记的第二中间代码之前,所述方法还包括:
获取未被存储数据的至少一个寄存器的信息,并从中选择一个寄存器用于存储从所述第一中间代码到所述第二中间代码的转换过程中的参数。


6.根据权利要求5所述的方法,其中,所述方法还包括:
在所述转换过程中,获取需要进行存储的参数,并根据所述参数的获取顺序将所述参数压栈至选择的所述寄存器的堆栈中。


7.根据权利要求1-6任一项所述的方法,其中,所述方法还包括:
将所述第二中间代码输出至编译器,通过所述编译器预输出本地代码和预输出的本地代码的元数据,其中,所述元数据中包含所述标记的信息。


8.根据权利要求7所述的方法,其中,所述方法还包括:
根据预输出的所述本地代码和所述元数据,进行代码组合;
根据代码组合结果,生成可执行本地代码、安全点表、和异常处理表。


9.根据权利要求8所述的方法,其中,所述编译器为LLVM,所述方法还包括:
将所述可执行本地代码、安全点表和异常处理表输出至V8引擎。


10.根据权利要求9所述的方法,其中,所述对所述调用点进行标记,包括:
使用statepoint或者patchpoint对所述调用点进行标记。


11.一种代码生成装置,包括:
第一获取模块,用于获取待进行语言转换的第一中间代码;
第二获取模块,用于对所述第一中间代码进行检测,获取所述第一中间代码中待进行安全点调用和/或待进行异常...

【专利技术属性】
技术研发人员:林作健
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:开曼群岛;KY

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1