编译方法、编译器、计算设备和计算机可读存储介质与流程

文档序号:37267477发布日期:2024-03-12 20:52阅读:15来源:国知局
编译方法、编译器、计算设备和计算机可读存储介质与流程

本技术涉及计算机,具体涉及一种编译方法、编译器、计算设备和计算机可读存储介质。


背景技术:

1、高级计算机语言便于人编写、维护,而机器语言(或者说低级计算机语言)才是计算机能够直接解读及运行的。因此,需要将高级计算机语言转换为机器语言。其中,编译器(compiler)是将一种计算机语言转换为另一种计算机语言的程序,可以利用编译器将高级计算机语言转换为机器语言。

2、为了方便开发人员能够在编译器编译代码的过程中,对代码进行优化,有些编译器引入了插件功能。例如,一种自由的操作系统(如,gnu(gnu′s not unix!)的编译器套件(gnu compiler collection,gcc)引入了gcc插件(plugin)。通过gcc plugin,开发人员可以干预gcc的代码编译,例如,修改代码,以为该代码所属的程序增加新功能等。

3、目前,编译器的运行和编译器插件的运行是由同一进程执行的(或者说编译器和编译器插件是耦合的),为某一编译器开发的编译器插件,难以应用到其他编译器中,或者说,需要开发者为不同编译器单独开发编译插件,增加了开发者的工作量。


技术实现思路

1、本技术提供了一种编译方法、编译器、计算设备和计算机可读存储介质,可针对同一编译器,灵活采用不同的干预控制端对该编译器所编译的代码进行干预。

2、第一方面,提供了一种编译方法,包括:在编译器编译第一代码集合时,从第一干预控制端接收第一操作请求,第一操作请求包括第一操作类型和第一代码指示,其中,编译器和第一干预控制端为不同进程;获取编译器所编译的第一代码集合中由第一代码指示所指示的代码;按照第一操作类型,操作由第一代码指示所指示的代码。

3、其中,代码集合是指由一条或多条代码组成的集合。在一个例子中,一个代码集合可以为一个应用程序中的代码组成的集合。在另一个例子中,一个代码集合可以为操作系统中的代码组成的集合。操作代码也可以称为优化代码,其中,优化代码是指对代码进行等价(指不改变代码的运行结果)变换。优化代码的目的是:在变换后的代码运行结果与变换前代码运行结果相同的情况下,缩短代码,从而减少代码的运行时间以及占用空间。

4、编译器所编译的代码集合是指代码集合中的代码处于编译器的编译流程中,例如,编译器所编译的代码集合是指该代码集合中的代码处于编译流程中的前端优化、中端优化或后端优化等阶段。其中,编译器所编译的代码集合中的代码的表示形式为代码编译过程中的中间表示。

5、在该方法中,可接收与编译器不是同一进程的干预控制端的操作请求,并按照该操作请求,对编译器所编译的代码进行干预,可在干预控制端和编译器解耦情况下,执行干预控制端对编译器所编译代码的干预。干预控制端和编译器的解耦,或者说,干预控制端和编译器不绑定到同一个进程中,使得用户可以选择不同的干预控制端,对编译器所编译代码进行干预,从而可以改善用户体验,以及提高对代码的干预或者优化效果。并且,干预控制端也可以应用于不同编译器,从而无需为适配不同编译器而重新开发干预控制端,降低了开发人员的工作量。

6、在一种可能的实施方式中,该方法还包括:在编译器编译第二代码集合时,从第二干预控制端接收第二操作请求,第二操作请求包括第二操作类型和第二代码指示,其中,编译器和第二干预控制端为不同进程,且第二干预控制端和第一干预控制端不同;获取编译器所编译的第二代码集合中由第二代码指示所指示的代码;按照第二操作类型,操作由第二代码指示所指示的代码。

7、在该实施方式的一个例子中,第二代码集合和第一代码集合可以不同。其中,两个代码集合的不同是指该两个代码集合中的代码不完全相同。由此,在该实施方式中,用户可以针对不同的代码集合,来选择不同的干预控制端进行对该代码集合的编译进行干预,从而用户在编译某个代码集合时,可以选择对该代码集合干预效果更好的干预控制端,进而提高干预或优化效果。

8、在该实施方式的另一个例子中,第二代码集合和第一代码集合可以相同。由此,在该实施方式中,用户可以采用不同的干预控制端来干预同一代码的编译,从而可以比较干预或优化效果,从而可以选择出更适合该代码的干预控制端。

9、在一种可能的实施方式中,在从第一干预控制端接收第一操作请求之前,该方法还包括:从第一干预控制端接收干预调用点的指示;监测编译器的编译流程,并在编译流程达到干预调用点时,向干预控制端发送干预请求,干预请求用于请求干预控制端发送第一操作请求。

10、其中,干预调用点用于指示干预控制端在编译流程的哪个或哪些阶段对编译器所编译的代码进行干预。在该实施方式中,可以获取干预控制端的干预调用点,从而可以在编译流程达到干预调用点时,触发干预控制端对编译器所编译的代码进行干预。如此,不同的干预控制端无需采用统一的干预调用点,从而可以使得不同的干预控制端可以在不同的干预调用点对代码的编译进行干预,提高了不同的干预控制端之间的差异化。

11、在一种可能的实施方式中,第一代码指示和编译器所编译的第一代码集合中的第一类型的代码具有预设的映射关系;获取编译器所编译的第一代码集合中由第一代码指示所指示的代码包括:根据第一代码指示和映射关系,在编译器所编译的第一代码中识别第一类型的代码,并将识别到的第一类型的代码作为由第一代码指示所指示的代码。

12、不同的编译器可能将同一代码转换为不同的中间表示,甚至在同一编译器的不同编译阶段,同一代码的中间表示可能也是不同的。在该实施方式中,可以通过代码指示和编译器所编译代码的映射关系,来获取代码指示所指示的代码,可以在干预控制端采用的代码表示方式和该编译器的代码中间表示不一致的情况下,准确地识别干预控制端所要干预的对象。这也使得干预控制端开发者在开发干预控制端时,可以不受某一编译器的代码中间表示的限制,更为自由地选择干预控制端的代码表示方式。

13、在一种可能的实施方式中,获取编译器所编译的第一代码集合中由第一代码指示所指示的代码包括:通过编译器提供的应用程序编程接口,从编译器中获取由第一代码指示所指示的代码。

14、其中,该应用编程接口可以为编译器的现有接口,例如编译器和现有的编译插件之间的接口。如此,在该实施方式中,可以复用编译器的已有接口,从编译器中获取代码,从而可以在无需更改编译器内部程序代码的情况下,从编译器中获取到代码。

15、在一种可能的实施方式中,该方法还包括:向第一干预控制端发送操作结果,操作结果是操作由第一代码指示所指示的代码得到的,操作结果用于触发第一干预控制端发送其他操作请求或者关闭服务请求。

16、在该实施方式中,可以向干预控制端通知操作结果,使得干预控制端可以获知操作结果,从而使得干预控制端可以进行下一步的操作,例如,继续发送其他操起请求,以对编译器所编译的代码进行进一步的干预,或者可以结束对编译器所编译的代码的干预,使得编译器可以继续进行编译器自身的编译流程。

17、在一种可能的实施方式中,第一操作类型包括查询、读取、修改中至少一种。

18、在该实施方式中,通过干预控制端可以对编译器所编译的代码实现不同的干预操作,可以满足用户的不同需求。

19、第二方面,提供了一种编译装置,该装置包括:通信单元,用于在编译器编译第一代码集合时,从第一干预控制端接收第一操作请求,第一操作请求包括第一操作类型和第一代码指示,其中,编译器和第一干预控制端为不同进程;获取单元,用于获取编译器所编译的第一代码集合中由第一代码指示所指示的代码;操作单元,用于按照第一操作类型,操作由第一代码指示所指示的代码。

20、在一种可能的实施方式中,所述编译装置包括用于执行第一方面任一种可能实现方式中的编译方法的各个模块。

21、第三方面,提供了一种编译器,用于执行第一方面或第一方面任一种可能实现方式中所述方法的操作步骤。

22、第四方面,提供了一种计算设备,其特征在于,包括处理器和存储器;其中,存储器存储有计算机指令,处理器用于执行计算机指令,以实现第一方面或第一方面任一种可能实现方式中所述方法的操作步骤。

23、第五方面,提供了一种编译器,其特征在于,编译器用于实现第一方面或第一方面任一种可能实现方式中所述方法的操作步骤。

24、第六方面,提供了一种计算机可读存储介质,其特征在于,包括计算机程序指令,当计算机程序指令由计算设备执行时,计算设备执行第一方面或第一方面任一种可能实现方式中所述方法的操作步骤。

25、第七方面,提供了一种包含指令的计算机程序产品,当该指令被计算机设备运行时,使得该计算机设备执行第一方面或第一方面任一种可能实现方式中所述方法的操作步骤。

26、本技术实施例提供了一种编译方法、装置及编译器、计算设备,实现在干预控制端和编译器解耦,使得用户可以选择不同的干预控制端,对编译器所编译代码进行干预,从而可以改善用户体验,以及提高对代码的干预或者优化效果。并且,干预控制端也可以应用于不同编译器,从而无需为适配不同编译器而重新开发干预控制端,降低了开发人员的工作量。

27、本技术在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1