WO2019237701A1 - 跨语言编程 - Google Patents
跨语言编程 Download PDFInfo
- Publication number
- WO2019237701A1 WO2019237701A1 PCT/CN2018/121763 CN2018121763W WO2019237701A1 WO 2019237701 A1 WO2019237701 A1 WO 2019237701A1 CN 2018121763 W CN2018121763 W CN 2018121763W WO 2019237701 A1 WO2019237701 A1 WO 2019237701A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- language
- runtime
- program
- runtime environment
- information
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/24—Object-oriented
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
一种跨语言编程方法。包括获取目标文件中包括的关于第一语言程序的运行时元信息(110),将所述运行时元信息,映射到基于第二语言构建的运行时环境(120),通过所述运行时环境中的第二语言,调用所述运行时环境中映射的所述运行时元信息(130)。
Description
本申请要求于2018年6月14日提交的、申请号为201810615055.1、发明名称为“跨语言编程方法、装置、电子设备及存储介质”的中国专利申请的优先权,该申请的全文以引用的方式并入本文中。
技术领域
本公开涉及跨语言编程。
随着计算机技术的发展,编程语言和硬件平台层出不穷,一个应用程序的不同模块通常可以由不同语言编程实现,因此,跨语言编程一直是计算机领域迫切需要解决的问题。常用的跨语言编程方法是,基于一组特定语言的语法规则来编写软件,并通过抽象多种语言的相同思想部分,通过转换工具将此特定的语言转换成其他语言,最终得到同一种语言的目标文件。
可见,现有的跨语言编程方法需要额外的转换工具对源程序进行转换,编码效率较低。
发明内容
第一方面,本公开实施例提供了一种跨语言编程方法,该方法包括:获取目标文件中包括的关于第一语言程序的运行时元信息;将所述运行时元信息,映射到基于第二语言构建的运行时环境;通过所述运行时环境中的第二语言,调用所述运行时环境中映射的所述运行时元信息。
第二方面,本公开实施例提供了一种跨语言编程装置,该装置包括:运行时元信息获取模块、元信息映射模块和运行时环境工作模块。
所述运行时元信息获取模块用于,获取目标文件中包括的关于第一语言程序的运行时元信息。所述元信息映射模块用于,将所述运行时元信息获取模块获取的运行时元信 息,映射到基于第二语言构建的运行时环境。所述运行时环境工作模块用于,通过所述运行时环境中的第二语言,调用所述运行时环境中映射的所述运行时元信息。
第三方面,本公开实施例还提供了一种电子设备,包括存储器、处理器。该存储器存储有可在处理器上运行的计算机程序。所述处理器执行所述计算机程序时实现本公开实施例所述的跨语言编程方法。
第四方面,本公开实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时本公开实施例公开的跨语言编程方法。
本公开实施例提供的跨语言编程方法,通过构建的运行时环境对不同语言的函数或方法等元信息的调用进行封装和映射,使得跨语言编程时不需要额外的语言转换工具,简化了跨语言编程的开发流程,有效提升跨语言编程的效率。
为了更清楚地说明本公开实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本公开实施例一的跨语言编程方法流程图;
图2是本公开实施例二的跨语言编程方法的流程图;
图3是本公开实施例三的跨语言编程方法的流程图;
图4是本公开实施例四的跨语言编程装置的结构示意图;
图5是本公开实施例四的跨语言编程装置的另一结构示意图;
图6是本公开实施例五的电子设备的结构示意图。
下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他 实施例,都属于本公开保护的范围。
实施例一
本实施例公开的一种跨语言编程方法,如图1所示,该方法包括:步骤110至步骤130。
步骤110,获取目标文件中包括的关于第一语言程序的运行时元信息。
运行时环境(runtime environment)是指一种把半编译的执行码在目标机器上运行的环境。目前,一些解释型语言可以通过运行时环境运行和动态更新。本公开实施例中所述的运行时环境与应用程序集成发布,通过执行一段跨平台语言代码创建实现跨语言调用的环境。本公开具体实施时,通过构建运行时环境,用于应用程序运行时所述应用程序中不同语言类型的元信息管理,以实现跨语言调用。
本公开实施例中所述的第一语言和第二语言泛指两种不同语言,所述第一语言程序指通过第一语言编写的程序,该程序可以是一种源程序。本公开具体实施时,首先需要基于第二语言(如跨平台语言C)构建运行时环境。所述基于第二语言构建运行时环境包括:定义和构建能够存储至少一种所述第一语言的运行时元信息的数据结构、定义内存模型、根据所述第一语言的语法特点来实现所述第一语言对应的调用接口、构建第二语言方法调用规则等。此外,对于具有反射能力的第一语言,还需要创建反射能力。
本公开实施例中所述的运行时元信息包括:函数、类、方法等程序运行时调用的基本单元。具体实施时,假设某一应用程序基于两种语言开发,每种语言的程序代码分别存储在不同的源程序文件中。由于不同语言的源程序文件经过编译后将生成不同的目标文件,因此在本实施例中将生成两种语言对应的目标文件。具体实施时,源程序文件带有运行时元信息的逻辑,该逻辑经过编译器的编译生成包含在一个新文件诸如目标文件的运行时元信息,例如生成包含在所述文件中的函类、方法等的列表。在一个示例中,可将该运行时元信息编译到目标文件的预测数据段。然后,通过解析该生成的目标文件,即可获得目标文件中包括的运行时元信息。如果无法获得源程序文件,例如,对于库文件,通常库文件或通过相应的头文件对所述库文件开放的接口进行声明,则在具体实施时,可以根据库文件对应的头文件获取所述库文件中包括的相应语言源程序的运行时元信息,并进一步基于所述运行时元信息生成库文件到运行时环境的桥接文件,该桥接文件包括函数名称映射、方法封装等,并将所述桥接文件编译为目标文件。
在应用程序运行的过程中,通过引导器对应用程序的目标文件进行解析,即可获得 上述运行时元信息。
步骤120,将所述运行时元信息,映射到基于第二语言构建的运行时环境。
具体实施时,通过以第一语言的运行时元信息,对基于第二语言构建的运行时环境的数据结构赋值,将第一语言的运行时元信息,映射到基于第二语言构建的运行时环境。
步骤130,通过所述运行时环境中的第二语言,调用所述运行时环境中映射的所述运行时元信息。
然后,通过执行运行时环境对应的第二语言编写的代码,调用所述运行时环境中映射的不同语言的运行时元信息,以实现跨语言的程序调用。
本公开实施例提供的跨语言编程方法中,通过构建的运行时环境对不同语言的函数或方法等元信息的调用进行封装和映射,使得跨语言编程时不需要额外的语言转换工具,简化了跨语言编程的开发流程,有效提升跨语言编程的效率。
实施例二
本实施例公开的一种跨语言编程方法,如图2所示,该方法包括:步骤210至步骤270。
步骤210,基于第二语言构建运行时环境。
本公开实施例中所述的运行时环境与应用程序集成发布,通过执行一段跨平台语言代码创建实现跨语言调用的环境。本公开具体实施时,通过构建运行时环境,用于应用程序运行时所述应用程序中不同语言类型的元信息管理,以实现跨语言调用。本公开实施例中所描述的第一语言和第二语言泛指两种不同语言。
具体实施时,所述将所述运行时元信息,映射到基于第二语言构建的运行时环境之前,还包括:基于第二语言构建运行时环境。具体实施时,所述基于第二语言构建运行时环境,进一步包括基于第二语言执行如下操作:构建能够存储至少一种所述第一语言的运行时元信息的数据结构;定义内存模型;根据所述第一语言的语法特点,实现所述第一语言对应的调用接口;创建反射能力;构建第二语言方法调用规则。具体实施时,所述第二语言为跨平台语言。
构建运行时环境时,首先对于当前应用程序所用到的若干种编程语言分析各语言的思想和语法特点取其并集,以在所述运行时环境中设置相应的调用或解析接口。
然后,定义能够存储所述若干种编程语言运行时元信息的通用数据结构、定义列的 内存模型、调用规则等。
在定义能够存储所述若干种编程语言运行时元信息的通用数据结构时,可以包括定义:类sc_class、接口sc_interface、函数sc_method、变量sc_ivar等结构体。其中,sc_class结构中包含类名、变量列表、方法列表等信息;sc_interface结构中包含接口名、接口方法等信息;sc_method包含方法名、函数地址等信息;sc_ivar包含变量名、变量类型等信息。所述数据结构可以表示如下:
其中,定义类的内存模型,使类之间具备继承、多态等能力。
对于具有反射能力的语言,需要创建反射能力,包括:定义创建类、实例化类对象、添加类方法、添加实例方法、添加实例变量等方法,用于运行时动态操作语言的执行。例如,通过以下代码定义方法:
bool sc_define_method(SCClass cls,const char*name,SC_METHOD_IMP imp)。
通过以下代码定义类方法:
bool sc_define_class_method(SCClass cls,const char*name,SC_METHOD_IMP imp)。
通过以下代码定义实例变量:
void sc_define_attr(SCClass cls,const char*name)。
具体实施时,对于某种语言独有的特性方法,还需要通过第二语言编码实现并提供调用接口。
具体实施时,在构建第二语言方法调用规则时,可以包括:对于向任何实例对象发起的函数调用,首先在其类结构sc_class的方法列表中查找‘函数地址’是否存在,如果找到则立即进行调用;如果不存在,则逐层向其父类的方法列表中查找‘函数地址’,依次递归,直到查找到基类。如果直到基类仍然没有找到方法,则调用一个方法缺失的处理例程或者抛出异常。
步骤220,通过定制化编译器前端,根据第一语言程序生成运行时环境的数据结构。
所述获取目标文件中包括的关于第一语言程序的运行时元信息之前,还包括:通过定制化编译器前端,根据第一语言程序(例如第一语言源程序)生成运行时环境的数据结构。具体实施时,所述通过定制化编译器前端,根据第一语言源程序生成运行时环境的数据结构包括:将关于第一语言源程序中的运行时元信息,映射到所述运行时环境的数据结构,并将所述数据结构编译到与所述第一语言源程序对应的目标文件的预设数据 段。
“定制化编译器前端”是对于当前应用所用到的若干种编程语言,定制的每种语言的编译器前端。对源程序到运行时环境语言的过程进行定制化,把类结构、接口等信息映射到通用运行时环境的结构体,并编译到目标文件的自定义二进制段。具体实施时,将关于第一语言源程序中的运行时元信息,映射到所述运行时环境的数据结构,包括但不限于:把第一语言源程序中的所有类的列表信息写入运行时环境的“__sc_classlist”段、把第一语言源程序中类的结构转换为所述运行时环境定义的sc_class类、把第一语言源程序中函数的结构转换为所述运行时环境定义的方法sc_method,以及,把第一语言源程序中实例变量的结构转换为所述运行时环境定义的变量sc_ivar。
具体实施时,对于继承自第一语言库的类,除了通过“定制化编译器前端”进行编译外,仍需生成第一语言的类结构并编译到源语言目标文件的二进制段。对于继承自第一语言库的类的方法,输入参数是第一语言对象的,需要转换为运行时对象;对于第一语言的类的方法,输入参数是运行时对象的,需要转换为第一语言对象。
还包括按照构建第二语言方法调用规则,将第一语言的函数调用或消息转发映射到通用运行时的调用入口“_sc_funcInvoke”。
本实施例中,以第一语言为C++语言举例,假设第一语言程序存储文件为Foo.cpp,该程序如下:
上述第一语言程序经过“定制化编译器前端”后,该第一语言程序中Foo类信息按照“sc_class”的结构写入“__sc_classlist”段,Foo类的方法“hello”按照“sc_method”的结构写入“__sc_methodlist”段,对第一语言程序中方法调用f.hello()映射到运行时环境的调用入口“_sc_funcInvoke”。最终Foo.cpp和运行时环境的代码以及数据结构经“定制化编译器前端”编译后生成中间语言文件Foo.ll,经编译器后端生成目标文件Foo.o。
具体实施时,当应用程序的某种编程语言的代码包括库文件等二进制文件时,所述获取目标文件中包括的关于第一语言程序的运行时元信息之前,还包括:
步骤230,根据第一语言的库文件的接口定义文件,生成用于所述运行时环境调用所述库文件中运行时元信息的桥接源程序。
步骤240,通过预设编译器对所述桥接源程序进行编译,得到包括关于所述第一语言程序的运行时元信息的目标文件。
具体实施时,每个库文件都对应头文件,用于对开放的接口进行声明,例如,以下库文件Bar.lib的头文件Bar.h。
通过库文件都对应的头文件,可以获得库文件中类、函数、方法等运行时元信息。例如库文件Bar.lib中包括类Bar和方法func。具体实施时,可以通过“接口桥接器”将实现运行时环境内部的方法调用透明的转发到库文件中。“接口桥接器”用于对现有的每个‘库文件’的接口与运行时环境之间的桥接,使运行时环境可以调用到库文件中的方法。具体实施时,根据第一语言库文件的接口定义文件,生成用于所述运行时环境调用所述库文件中运行时元信息的桥接源程序(或者第二语言源程序文件),包括如下步 骤:获取库文件接口的抽象语法树,遍历抽象语法树,依次对每个类进行遍历,对每个开放接口通过第二语言进行实现;对运行时对象与第一语言对象结构进行正反双向转换;运行时对象结构体中组合第一语言对象,在创建运行时对象的同时创建与第一语言内存结构一致的第一语言对象;当需要第一语言对象时,对运行时对象进行拆包,当需要运行时对象时对第一语言对象进行封包。最终生成一个包含实现的第二语言源程序文件。
例如对Bar.h进行桥接,首先获取Bar.h的抽象语法树,分析出Base和Bar两个类,然后对两个类开放的接口进行实现,对入参和出参进行Cpp对象和运行时对象的转换。生成第二语言源程序文件Bar.scb,举例如下:
然后,再通过预设编译器对所述桥接源程序进行编译,得到包括运行时元信息的目标文件。具体实施时,可以通过“定制化接口桥接编译器前端”,对桥接源程序进行编译器,生成目标文件。所述“定制化接口桥接编译器前端”对于桥接源程序文件直接定义的类信息按照“定制化编译器前端”的编译方式进行编译,使桥接后的类注册到运行时环境。对于方法实现,保持第一语言的调用方式不变,使调用可以透明的转发到第一语言库中。
例如对Bar.scb进行编译,对Bar类按照“定制化编译器前端”的方式进行编译,使 Bar类注册到运行时环境;对于func方法的编译resB=this->func(cppB),仍然按照cpp的调用方式转发到Bar.lib中,最终,编译后输出目标文件Bar.o。
步骤250,获取目标文件中包括的关于第一语言程序的运行时元信息。
第一语言程序的所述运行时元信息指通过第一语言编写的程序在运行时调用的元信息,如函数。所述获取目标文件中包括的关于第一语言程序的运行时元信息,包括:根据目标文件中预设数据段的数据,解析得到关于第一语言程序的运行时元信息。以目标文件为二进制文件为例,二进制文件中的类信息是静态的。应用程序运行时,当二进制文件加载到内存后,可以由自定义的引导器把二进制文件中的类信息结构体注册到运行时环境,变成动态可修改的,以供运行时进行动态交互。所述引导器的构建分为如下步骤:从可执行文件和库文件的二进制数据中读取由“定制化编译器前端”所生成的“__sc_classlist”段和“__sc_methodlist”段信息。
当目标文件中包括由某种编程语言实现的库文件生成的目标文件时,所述获取目标文件中包括的关于第一语言程序的运行时元信息,包括:根据目标文件,解析得到关于第一语言程序的运行时元信息。根据库文件等二进制文件的头文件生成的目标文件中包括库文件开放的接口。具体实施时,根据所述“定制化接口桥接编译器前端”的编译策略,解析二进制文件对应的目标文件,得到目标文件中包括的第一语言程序的函数、类、方法等运行时元信息。
步骤260,将所述运行时元信息,映射到基于第二语言构建的运行时环境。
具体实施时,所述将所述运行时元信息,映射到基于第二语言构建的运行时环境,包括:将至少一种第一语言程序的所述运行时元信息,注册到基于第二语言构建的运行时环境。
在由引导器获取到关于第一语言程序的运行时元信息之后,将所述运行时元信息的类列表加载到内存中。之后,遍历类列表信息,构建出每个类的内存结构,包括:方法列表、变量列表、抵用接口等。最后,把每个类的信息注册到所述运行时环境,例如,以关于第一语言程序的运行时元信息,对基于第二语言构建的运行时环境的数据结构赋值。
至此,程序文件中的类(如Foo)和库文件等二进制文件中的类(如Bar)都被引导器在运行时注册到了通用运行时环境中。运行时环境中包括当前应用程序的每种编程语言编写的程序中的函数、类、方法等元信息的地址。
步骤270,通过所述运行时环境中的第二语言,调用所述运行时环境中映射的所述运行时元信息。
启动运行时环境之后,对于应用程序的一种编程语言实现的函数或方法,如果需要调用另一种编程语言实现的函数或方法,可以通过所述运行时环境中的第二语言方法调用规则确定被调用的函数或方法,以实现跨语言的程序调用。
本公开实施例提供的跨语言编程方法,通过构建的运行时环境对不同语言的函数或方法等元信息的调用进行封装和映射,使得跨语言编程时不需要额外的语言转换工具,简化了跨语言编程的开发流程,有助于提升跨语言编程的效率。对于软件开发过程中同时存在新、旧两种语言的情况,可以通过运行时环境实现旧语言程序零成本迁移到新语言程序。同时,通过跨平台语言创建运行时环境,可以有效提升跨语言编码的平台兼容性。
实施例三
本实施例公开的一种跨语言编程方法,如图3所示,基于实施例二所实现的运行时环境,通过结合可解释语言解释器和定制可解释语言与运行时环境的运行信息之间的转换接口,可以进一步实现所述第一语言的热更新。
具体实施时,所述将所述运行时元信息,映射到基于第二语言构建的运行时环境之后,还包括:步骤280和步骤290。
步骤280,将第一语言程序转换为预设解释器对应的可解释语言程序。
具体实施时,如果需要修改第一语言程序(例如源程序)的部分代码,如修改或增加cpp文件的一个类,可以首先使用第一语言(如C++语言)的对待修改或增加的类进行实现,然后,通过预设的语法转换器,而使用地域语言实现的程序转换成具备解释执行能力的动态语言(如JavaScript、Ruby),便于动态更新和执行。
其中,所述语法转换器基于抽象语法树生成,用于不同语言语法之间的相互转换,可以把源语言转换成具备解释执行能力的动态语言。语法转换器的构建分为如下步骤:首先,由源语言的代码生成抽象语法树;其次,遍历抽象语法树,针对每种类型的语法节点如:声明、赋值、函数调用、闭包等转换为目标语言的语法形式,以链表形式链接;最后,遍历所述链表,生成包括转换后的目标语言的源程序文件。
步骤290,通过将所述运行时环境中的接口注册到所述预设解释器的上下文对象,以所述可解释语言程序更新所述运行时环境中的所述接口对应的程序。
转化得到的动态语言,通过动态语言解释器即可解释执行。
本公开具体实施时,由于需要通过转化得到的动态语言更新运行时环境中注册的第一语言的元信息,因此,需要在运行时环境和动态语言之间的对象转换、参数传递、方法调用等,以所述可解释语言程序更新所述运行时环境中的所述接口对应的程序。
具体实施时,通过将所述运行时环境中的接口注册到预设解释器的上下文对象,以所述可解释语言程序更新所述运行时环境中的所述接口对应的程序,可以包括:创建动态语言解释器的上下文对象;注册类定义、实例化对象、添加/删除方法等接口到上下文对象中;动态语言解释器通过上下文对象调用运行时环境的接口。
具体实施时,动态语言如JavaScript、Ruby等的解释器需要和运行时环境一同内置在应用程序或平台中。
本实施例公开的跨语言编程方法,通过基于静态语言的运行时环境,进一步结合可解释语言解释器和定制可解释语言与运行时环境的运行信息之间的转换接口,可以进一步实现所述静态语言的热更新,进一步提升了编程效率。
另一方面,对于可解释语言,为了提升其运行效率,可以预先将可解释使用语言程序编译成目标文件,并加载执行,当需要对可解释语言程序进行热更新时,进一步通过本实施例公开的方法进行了更新,在保留可解释语言热更新特性的前提下,有效提升了可解释语言的运行效率。
实施例四
本实施例公开的一种跨语言编程装置,如图4所示,所述装置包括:运行时元信息获取模块410、元信息映射模块420和运行时环境工作模块430。
运行时元信息获取模块410,用于获取目标文件中包括的关于第一语言程序的运行时元信息。
元信息映射模块420,用于将所述运行时元信息,映射到基于第二语言构建的运行时环境。
运行时环境工作模块430,用于通过所述运行时环境中的第二语言,调用所述运行时环境中映射的所述运行时元信息。
本公开实施例提供的跨语言编程装置,通过构建的运行时环境对不同语言的函数或方法等元信息的调用进行封装和映射,使得跨语言编程时不需要额外的语言转换工具, 简化了跨语言编程的开发流程,有助于提升跨语言编程的效率。
在一实施例中,如图5所示,所述装置还包括运行时环境构建模块440,用于基于第二语言构建运行时环境。该情况下,所述运行时环境构建模块440进一步用于基于第二语言执行如下操作:构建能够存储至少一种所述第一语言的运行时元信息的数据结构;定义内存模型;根据所述第一语言的语法特点,实现所述第一语言对应的调用接口;创建反射能力;构建第二语言方法调用规则。
在一实施例中,所述运行时元信息获取模块410进一步用于:根据目标文件中预设数据段的数据,解析得到关于第一语言程序的运行时元信息。
在一实施例中,如图5所示,所述装置还包括第一定制化编译模块450,用于通过定制化编译器前端,根据第一语言程序生成运行时环境的数据结构。
在一实施例中,所述运行时元信息获取模块410进一步用于:根据目标文件,解析得到关于第一语言程序的运行时元信息。
在一实施例中,如图5所示,所述装置还包括:库文件桥接模块460和第二定制化编译模块470。库文件桥接模块460用于,根据第一语言库文件的接口定义文件,生成用于所述运行时环境调用所述库文件中运行时元信息的桥接源程序。第二定制化编译模块470用于,通过预设编译器对所述桥接源程序进行编译,得到包括关于第一语言程序的运行时元信息的目标文件。
在一实施例中,所述元信息映射模块420进一步用于:将至少一种第一语言程序的所述运行时元信息,注册到基于第二语言构建的运行时环境。
本公开实施例提供的跨语言编程装置,通过构建的运行时环境对不同语言的函数或方法等元信息的调用进行封装和映射,使得跨语言编程时不需要额外的语言转换工具,简化了跨语言编程的开发流程,有助于提升跨语言编程的效率。对于软件开发过程中同时存在新、旧两种语言的情况,可以通过运行时环境实现旧语言程序零成本迁移到新语言程序。同时,通过跨平台语言创建运行时环境,可以有效提升跨语言编码的平台兼容性。
在一实施例中,如图5所示,所述装置还包括:可解释语言转换模块480和运行时环境桥接模块490。可解释语言转换模块480用于,将第一语言程序转换为预设解释器对应的可解释语言程序。运行时环境桥接模块490用于,通过将所述运行时环境中的接口注册到所述预设解释器的上下文对象,以所述可解释语言程序更新所述运行时环境中 的所述接口对应的程序。
在一实施例中,所述第二语言为跨平台语言。
本实施例公开的跨语言编程装置用于实现实施例一至实施例三所述的跨语言编程方法,所属装置的各个模块的具体实施方式参见实施例一至实施例三中相应步骤的具体实施方式,本实施例不再赘述。
本实施例公开的跨语言编程装置,通过基于静态语言的运行时环境,进一步结合可解释语言解释器和定制可解释语言与运行时环境的运行信息之间的转换接口,可以进一步实现所述静态语言的热更新,进一步提升了编程效率。
另一方面,对于可解释语言,为了提升其运行效率,可以预先将可解释使用语言程序编译成目标文件,并加载执行,当需要对可解释语言程序进行热更新时,进一步通过本实施例公开的装置进行了更新,在保留可解释语言热更新特性的前提下,提升了可解释语言的运行效率。
实施例五
相应的,如图6所示,本公开实施例还提供了一种电子设备,该电子设备包括存储器601、处理器602。该存储器601存储有可在处理器602上运行的计算机程序,所述处理器602执行所述计算机程序时实现如本公开实施例一至实施例三所述的跨语言编程方法。所述电子设备可以为PC机、移动终端、个人数字助理、平板电脑等。
本公开还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本公开实施例一至实施例三所述的跨语言编程方法的步骤。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上对本公开提供的一种跨语言编程方法及装置进行了详细介绍,本文中应用了具体个例对本公开的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本公开的方法及其核心思想;同时,对于本领域的一般技术人员,依据本公开的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本公开的限制。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件实现。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
Claims (15)
- 一种跨语言动态编程方法,包括:获取目标文件中包括的关于第一语言程序的运行时元信息;将所述运行时元信息,映射到基于第二语言构建的运行时环境;通过所述运行时环境中的所述第二语言,调用所述运行时环境中映射的所述运行时元信息。
- 根据权利要求1所述的方法,其特征在于,所述将所述运行时元信息,映射到基于第二语言构建的运行时环境之前,还包括基于所述第二语言执行如下操作:构建能够存储关于至少一种第一语言的运行时元信息的数据结构;定义内存模型;根据所述第一语言的语法特点,实现所述第一语言对应的调用接口;创建反射能力;构建第二语言方法调用规则。
- 根据权利要求2所述的方法,其特征在于,所述获取目标文件中包括的关于第一语言程序的运行时元信息,包括:根据所述目标文件中预设数据段的数据,解析得到关于所述第一语言程序的运行时元信息。
- 根据权利要求3所述的方法,其特征在于,所述获取目标文件中包括的关于第一语言程序的运行时元信息之前,还包括:通过定制化编译器前端,根据所述第一语言程序生成所述运行时环境的数据结构。
- 根据权利要求2所述的方法,其特征在于,所述获取目标文件中包括的关于第一语言程序的运行时元信息,包括:根据所述目标文件,解析得到关于所述第一语言程序的运行时元信息。
- 根据权利要求5所述的方法,其特征在于,所述获取目标文件中包括的关于第一语言程序的运行时元信息之前,还包括:根据所述第一语言的库文件的接口定义文件,生成用于所述运行时环境调用所述库 文件中运行时元信息的桥接源程序;通过预设编译器对所述桥接源程序进行编译,得到包括关于所述第一语言程序的运行时元信息的目标文件。
- 根据权利要求1所述的方法,其特征在于,所述将所述运行时元信息,映射到基于第二语言构建的运行时环境,包括:将关于至少一种所述第一语言程序的所述运行时元信息,注册到基于所述第二语言构建的运行时环境。
- 根据权利要求1所述的方法,其特征在于,所述将所述运行时元信息,映射到基于第二语言构建的运行时环境之后,还包括:将所述第一语言程序转换为预设解释器对应的可解释语言程序;通过将所述运行时环境中的接口注册到所述预设解释器的上下文对象,以所述可解释语言程序更新所述运行时环境中的所述接口对应的程序。
- 根据权利要求1至8中任一项所述的方法,其特征在于,所述第二语言为跨平台语言。
- 一种跨语言编程装置,包括:运行时元信息获取模块,用于获取目标文件中包括的关于第一语言程序的运行时元信息;元信息映射模块,用于将所述运行时元信息,映射到基于第二语言构建的运行时环境;运行时环境工作模块,用于通过所述运行时环境中的所述第二语言,调用所述运行时环境中映射的所述运行时元信息。
- 根据权利要求10所述的装置,其特征在于,所述装置包括:运行时环境构建模块,用于基于第二语言构建运行时环境;所述运行时环境构建模块还用于基于第二语言执行如下操作:构建能够存储至少一种所述第一语言的运行时元信息的数据结构;定义内存模型;根据所述第一语言的语法特点,实现所述第一语言对应的调用接口;创建反射能力;构建第二语言方法调用规则。
- 根据权利要求11所述的装置,其特征在于,所述运行时元信息获取模块410还用于:根据所述目标文件中预设数据段的数据,解析得到关于所述第一语言程序的运行时元信息。
- 根据权利要求11所述的装置,其特征在于,所述运行时元信息获取模块410还用于:根据所述目标文件,解析得到关于第一语言程序的运行时元信息。
- 一种电子设备,包括存储器、处理器,所述存储器存储有可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现权利要求1至9中任一项所述的跨语言编程方法。
- 一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现权利要求1至9中任一项所述的跨语言编程方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810615055.1A CN108920133B (zh) | 2018-06-14 | 2018-06-14 | 跨语言编程方法、装置、电子设备及存储介质 |
CN201810615055.1 | 2018-06-14 |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2019237701A1 true WO2019237701A1 (zh) | 2019-12-19 |
Family
ID=64421563
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/CN2018/121763 WO2019237701A1 (zh) | 2018-06-14 | 2018-12-18 | 跨语言编程 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN108920133B (zh) |
WO (1) | WO2019237701A1 (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108920133B (zh) * | 2018-06-14 | 2021-06-18 | 北京三快在线科技有限公司 | 跨语言编程方法、装置、电子设备及存储介质 |
CN111488140B (zh) * | 2019-01-29 | 2023-10-27 | 杭州海康威视数字技术股份有限公司 | 一种支持多编程语言多编程库的方法、装置和计算机设备 |
CN111580821B (zh) * | 2019-02-15 | 2022-10-25 | 厦门雅基软件有限公司 | 脚本绑定方法、装置、电子设备及计算机可读存储介质 |
CN110377289A (zh) * | 2019-07-01 | 2019-10-25 | 北京字节跳动网络技术有限公司 | 一种数据解析方法、装置、介质和电子设备 |
CN111736840A (zh) * | 2019-09-19 | 2020-10-02 | 北京沃东天骏信息技术有限公司 | 小程序应用的编译方法、运行方法、存储介质及电子设备 |
CN111026401A (zh) * | 2019-12-05 | 2020-04-17 | 杭州有赞科技有限公司 | 一种移动端热修复方法 |
CN111381817A (zh) * | 2020-03-25 | 2020-07-07 | 北京字节跳动网络技术有限公司 | 实现跨平台多语言开发的方法、装置、介质和电子设备 |
CN111142876B (zh) * | 2020-04-02 | 2020-08-18 | 华控清交信息科技(北京)有限公司 | 一种编译处理方法、装置和用于编译处理的装置 |
CN111625243B (zh) * | 2020-05-13 | 2023-07-18 | 北京字节跳动网络技术有限公司 | 跨语言任务处理方法、装置及电子设备 |
CN111625224B (zh) * | 2020-05-28 | 2023-11-24 | 北京百度网讯科技有限公司 | 代码生成方法、装置、设备及存储介质 |
CN114327497A (zh) * | 2020-09-30 | 2022-04-12 | 华为技术有限公司 | 一种代码处理方法、装置及设备 |
CN112256351B (zh) * | 2020-10-26 | 2023-11-17 | 卫宁健康科技集团股份有限公司 | Feign组件的实现方法、微服务调用方法及装置 |
CN112346732B (zh) * | 2020-10-30 | 2024-01-12 | 深圳市优必选科技股份有限公司 | 应用程序的跨语言调用方法、装置、电子设备及存储介质 |
CN113032169B (zh) * | 2021-05-25 | 2021-08-24 | 北京小米移动软件有限公司 | 跨语言软件系统的资源调用方法、设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101233488A (zh) * | 2005-07-29 | 2008-07-30 | 微软公司 | 作为数据对象的编译器支持程序 |
CN102866884A (zh) * | 2011-08-31 | 2013-01-09 | 微软公司 | 将操作系统的本机应用编程接口投射到其他编程语言 |
CN103778061A (zh) * | 2014-01-17 | 2014-05-07 | 南京航空航天大学 | 数组越界错误的自动检测和校正方法 |
CN104199642A (zh) * | 2014-08-05 | 2014-12-10 | 青岛海信移动通信技术股份有限公司 | 一种在目标平台运行原平台代码的实现方法及装置 |
CN108920133A (zh) * | 2018-06-14 | 2018-11-30 | 北京三快在线科技有限公司 | 跨语言编程方法、装置、电子设备及存储介质 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6957439B1 (en) * | 2000-05-09 | 2005-10-18 | International Business Machines Corporation | Method, system, and program for mapping objects in different language formats |
US6978018B2 (en) * | 2001-09-28 | 2005-12-20 | Intel Corporation | Technique to support co-location and certification of executable content from a pre-boot space into an operating system runtime environment |
EP1571547A1 (en) * | 2004-02-27 | 2005-09-07 | Research In Motion Limited | System and method for building wireless applications with intelligent mapping between user interface and data components |
CN100345108C (zh) * | 2004-07-20 | 2007-10-24 | 英业达股份有限公司 | 多国语言软件程序开发系统 |
DE102006046310A1 (de) * | 2006-09-29 | 2008-04-03 | Siemens Ag | System zur Erzeugung und zum Betrieb einer Softwareapplikation für medizinische Bildgebung |
US9411558B2 (en) * | 2012-10-20 | 2016-08-09 | Luke Hutchison | Systems and methods for parallelization of program code, interactive data visualization, and graphically-augmented code editing |
US8954939B2 (en) * | 2012-12-31 | 2015-02-10 | Microsoft Corporation | Extending a development environment |
CN105718251B (zh) * | 2014-12-03 | 2019-02-01 | 苏宁易购集团股份有限公司 | 多语言sdk自动化实现方法及系统 |
US10656919B2 (en) * | 2016-10-25 | 2020-05-19 | Paypal, Inc. | Matching programming variables across different data domains |
CN106843888B (zh) * | 2017-01-23 | 2020-03-17 | 恒生电子股份有限公司 | 用于解决多语言开发系统中字段冲突的方法及装置 |
CN107506381A (zh) * | 2017-07-21 | 2017-12-22 | 中国建设银行股份有限公司 | 一种大数据分布式调度分析方法、系统装置及存储介质 |
-
2018
- 2018-06-14 CN CN201810615055.1A patent/CN108920133B/zh active Active
- 2018-12-18 WO PCT/CN2018/121763 patent/WO2019237701A1/zh active Application Filing
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101233488A (zh) * | 2005-07-29 | 2008-07-30 | 微软公司 | 作为数据对象的编译器支持程序 |
CN102866884A (zh) * | 2011-08-31 | 2013-01-09 | 微软公司 | 将操作系统的本机应用编程接口投射到其他编程语言 |
CN103778061A (zh) * | 2014-01-17 | 2014-05-07 | 南京航空航天大学 | 数组越界错误的自动检测和校正方法 |
CN104199642A (zh) * | 2014-08-05 | 2014-12-10 | 青岛海信移动通信技术股份有限公司 | 一种在目标平台运行原平台代码的实现方法及装置 |
CN108920133A (zh) * | 2018-06-14 | 2018-11-30 | 北京三快在线科技有限公司 | 跨语言编程方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN108920133A (zh) | 2018-11-30 |
CN108920133B (zh) | 2021-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2019237701A1 (zh) | 跨语言编程 | |
CN106415495B (zh) | 用于应用开发的编程系统和语言 | |
KR101795844B1 (ko) | 런타임 시스템 | |
US7131110B2 (en) | Method and apparatus for generating a code bridge | |
CN110149800B (zh) | 一种用于处理与源程序的源代码相关联的抽象语法树的装置 | |
US20060225053A1 (en) | Programming language improvements | |
US8464232B2 (en) | Compiler compiler system with syntax-controlled runtime and binary application programming interfaces | |
US20040268301A1 (en) | Adding new compiler methods to an integrated development environment | |
US7512938B2 (en) | Typed intermediate representation for object-oriented languages | |
Izquierdo et al. | API2MoL: Automating the building of bridges between APIs and Model-Driven Engineering | |
US11687388B2 (en) | Implementing optional specialization when executing code | |
WO2024045379A1 (zh) | 编译方法和编译器、Wasm虚拟机 | |
WO2024045382A1 (zh) | 区块链中实现反射机制 | |
US20210055941A1 (en) | Type-constrained operations for plug-in types | |
JP2022545489A (ja) | スマートコントラクトのクライアントプログラムの生成方法、システム、機器、及び媒体 | |
US8606766B2 (en) | Method and system to handle java class versioning | |
CN113535184A (zh) | 一种跨平台的代码转换方法及设备 | |
CA2428558C (en) | System and method for defining and using subclasses declaratively within markup | |
Jezek et al. | Magic with Dynamo--Flexible Cross-Component Linking for Java with Invokedynamic | |
Pang | Binding Haskell to object-oriented component systems via reflection | |
López et al. | Towards a language independent refactoring framework | |
Marevac et al. | Design and Implementation of a Virtual Machine for a Dynamic Object-Oriented Programming Language | |
Veiga | Light programming language | |
Greenfieldboyce et al. | Type qualifiers for Java | |
Lee et al. | Object-Oriented Programming |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
121 | Ep: the epo has been informed by wipo that ep was designated in this application |
Ref document number: 18922743 Country of ref document: EP Kind code of ref document: A1 |
|
NENP | Non-entry into the national phase |
Ref country code: DE |
|
122 | Ep: pct application non-entry in european phase |
Ref document number: 18922743 Country of ref document: EP Kind code of ref document: A1 |