一种跨语言编译方法及设备技术

技术编号:25834186 阅读:43 留言:0更新日期:2020-10-02 14:15
本申请提供了一种跨语言编译的方法和装置。可用于本地语言和非本地语言,例如Java和C++之间的跨语言混合编译。通过获取包含本地语言和非本地语言的源程序代码,生成中间语言,中间语言中包含了基于本地语言和非本地语言的方法所生成的方法。在中间语言中生成调用方法,这些调用方法用于实现基于本地语言和非本地语言的方法所生成的方法之间的相互调用。降低编译后的可执行程序在运行时本地语言和非本地语言方法之间相互调用的开销。

【技术实现步骤摘要】
一种跨语言编译方法及设备
本申请涉及计算机代码编译技术,尤其涉及一种跨语言的混合编译技术。
技术介绍
为了平衡开发效率和程序性能,本地语言和非本地语言混合编程成为一种趋势。例如:非本地语言Java,JavaScript,Python等都支持和C/C++混合编程。当编译混合编程的源代码时,由于在编译过程中,本地语言代码和非本地语言代码互相不可见。在这种情况下,跨函数的编译优化只能在同语言函数范围内进行。在Java虚拟机(JavaVirtualMachine,JVM)中,Java程序被编译成与机器和操作系统无关的字节码。C/C++程序编译成目标机器相关的二进制可执行程序。在编译阶段,Java程序和C/C++程序互相不可见。在执行阶段,Java字节码首先通过解释器解释执行。当同一段代码被执行的次数达到某个阈值时,会被编译成机器相关的二进制代码,进而执行编译后的二进制代码。在混合编程中,为了实现本地语言和非本地语言之间的函数调用,Java函数通过JNI调用C/C++函数,C/C++函数通过反射机制调用Java代码以及访问Java对象/Java类本文档来自技高网...

【技术保护点】
1.一种编译方法,其特征在于,所述方法包括:/n获取源程序代码,所述源程序代码包括第一语言代码和第二语言代码,所述第一语言代码中包括第一方法,所述第二语言代码中包括第二方法,其中,所述第一语言代码为本地语言,所述第二语言代码为非本地语言;/n根据所述源程序代码生成第三语言代码,所述第三语言代码中包含第三方法和第四方法,所述第三方法根据所述第一方法所生成,所述第四方法根据第二方法所生成,所述第三语言代码还包括第五方法,所述第五方法根据所述第一方法和所述第二方法所生成或者根据所述第三方法和所述第四方法所生成,所述第五方法用于所述第三方法通过所述第五方法调用所述第四方法或者所述第四方法通过所述第五方...

【技术特征摘要】
1.一种编译方法,其特征在于,所述方法包括:
获取源程序代码,所述源程序代码包括第一语言代码和第二语言代码,所述第一语言代码中包括第一方法,所述第二语言代码中包括第二方法,其中,所述第一语言代码为本地语言,所述第二语言代码为非本地语言;
根据所述源程序代码生成第三语言代码,所述第三语言代码中包含第三方法和第四方法,所述第三方法根据所述第一方法所生成,所述第四方法根据第二方法所生成,所述第三语言代码还包括第五方法,所述第五方法根据所述第一方法和所述第二方法所生成或者根据所述第三方法和所述第四方法所生成,所述第五方法用于所述第三方法通过所述第五方法调用所述第四方法或者所述第四方法通过所述第五方法调用所述第三方法。


2.根据权利要求1所述方法,其特征在于,根据所述源程序代码生成第三语言代码具体包括:
确定所述第一方法或第三方法会出现异常;
生成用于所述第四方法调用所述第三方法的第五方法,所述第五方法包含异常处理功能。


3.根据权利要求1所述方法,其特征在于,根据所述源程序代码生成所述第三语言代码还包括:
确定所述第一方法访问所述第二语言代码中的对象;
在根据所述源程序代码生成第三语言代码时,生成所述第二语言代码中所述对象的对象引用表。


4.根据权利要求1所述方法,其特征在于,所述第二语言代码为Java语言代码,根据所述源程序代码生成第三语言代码时还包括:
确定所述第一方法访问所述第二语言代码中的Java本地接口JNI指针;
在所述第五方法的参数中添加JNI指针。


5.根据权利要求1所述方法,其特征在于,所述第二语言代码为Java语言代码,根据所述源程序代码生成第三语言代码时还包括:
确定所述第一方法是否访问所述第二语言代码中的Java对象或者Java类对象;
在所述第五方法的参数中添加所述Java对象或者所述Java类对象。


6.根据权利要求1-5任意一项所述方法,其特征在于,所述第三语言代码还包括所述第二语言代码中的类的域信息、类的方法信息以及类的继承关系。


7.根据权利要求6所述方法,其特征在于,根据所述源程序代码生成第三语言代码时,生成所述第五方法包括:
根据所述类的继承关系和类的方法信息,确定所述第二方法在所述第二语言代码中的签名,所述签名用于指示所述第二语言代码中的所述第二方法的名称以及所述第二方法所在的类,根据所述签名生成所述第五方法。


8.根据权利要求6所述方法,其特征在于,根据所述源程序代码生成所述第三语言代码还包括:
根据所述类的继承关系和类的域信息,生成第六方法,所述第六方法用于访问所述第二语言代码中的域。


9.根据权利要求1-8中任一所述方法,其特征在于,所述第三方法和所述第四方法中包含有标识,所述标识用于指示所述第三方法根据本地语言生成或者指示所述第四方法根据非本地语言生成。


10.一种编译装置,其特征在于,所述装置包括:
获取模块,用于获取源程序代码,所述源程序代码包括第一语言代码和第二语言代码,所述第一语言代码中包括第一方法,所述第二语言代码中包括第二方法,其中,所述第一语言代码为本地语言,所述第二语言代码为非本地语言;
生成模块,用于根据所述源程序代码生成第三语言代码,所述第三语...

【专利技术属性】
技术研发人员:蒋奕陈永健张超赵俊民张雁
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:广东;44

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

1