CN108345458B - 一种静态编译语言与脚本语言的调用方法及系统 - Google Patents
一种静态编译语言与脚本语言的调用方法及系统 Download PDFInfo
- Publication number
- CN108345458B CN108345458B CN201810072681.0A CN201810072681A CN108345458B CN 108345458 B CN108345458 B CN 108345458B CN 201810072681 A CN201810072681 A CN 201810072681A CN 108345458 B CN108345458 B CN 108345458B
- Authority
- CN
- China
- Prior art keywords
- function
- processed
- language
- static
- script language
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 230000003068 static effect Effects 0.000 title claims abstract description 100
- 238000000034 method Methods 0.000 title claims abstract description 51
- 230000006870 function Effects 0.000 claims abstract description 355
- 238000012545 processing Methods 0.000 claims description 6
- 230000005540 biological transmission Effects 0.000 claims description 2
- 230000008569 process Effects 0.000 abstract description 13
- 230000003993 interaction Effects 0.000 abstract description 12
- 238000011161 development Methods 0.000 abstract description 7
- 239000003795 chemical substances by application Substances 0.000 description 5
- 238000013461 design Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明实施例提供一种静态编译语言与脚本语言的调用方法及系统,所述静态编译语言与脚本语言的调用方法包括:存储由宿主程序端发送的多个待处理函数;接收由脚本语言执行端发送的函数参数;将该函数参数对应的待处理函数发送至所述脚本语言执行端,将所述函数参数发送至所述宿主程序端;接收由宿主程序端压入的运行结果;将运行结果发送至所述脚本语言执行端,使得所述脚本语言执行端根据所述运行结果以及待处理函数执行脚本语言编译。本发明通过虚拟机分别与宿主程序端及脚本语言执行端进行信息交互,使得两种语言间无缝交互,可实现信息的准确调用,降低开发过程中漏洞触发率,提升开发效率。
Description
技术领域
本发明涉及计算机编程语言技术领域,特别是涉及一种静态编译语言与脚本语言的调用方法及系统。
背景技术
现有技术中静态编译语言编写的程序服务在修改变更时,需要重新编译并且重启服务,在这种模式下对于需求变更大、迭代周期长的软件服务可以接受,但是对于快速迭代的应用服务显然更新效率太低,对于静态编译类而言,调试起来成本高。
在实现本发明过程中,发明人发现现有技术中至少存在如下问题:
现有技术静态编译语言和脚本语言交互时是通过虚拟栈交互,但是一般是将栈交互操作和业务逻辑混合在一块使用,从而使得栈变得不可控容易出漏洞bug,并且脚本语言执行端是强类型,会导致编码冗余。
发明内容
本发明实施例提供一种静态编译语言与脚本语言的调用方法及系统,可实现两种语言间无缝交互。
一方面,本发明实施例提供了一种静态编译语言与脚本语言的调用方法,包括:
存储由宿主程序端发送的多个待处理函数;
接收由脚本语言执行端发送的函数参数,所述函数参数对应一个待处理函数,且所述函数参数用于所述脚本语言执行端执行脚本语言编译;
将该函数参数对应的待处理函数发送至所述脚本语言执行端,以实现函数的调用,将所述函数参数发送至所述宿主程序端;
接收由宿主程序端压入的运行结果,所述运行结果由所述宿主程序端根据所述函数参数运行对应的待处理函数得到;
将运行结果发送至所述脚本语言执行端,使得所述脚本语言执行端根据所述运行结果以及待处理函数执行脚本语言编译。
可选的,所述待处理函数包括待处理静态编译语言函数及函数指针;
所述存储由宿主程序端发送的多个待处理函数,具体包括:
将由宿主程序端发送的各待处理函数的函数指针压入虚拟机的虚拟栈中;
调用所述虚拟机中各函数指针对应的脚本语言的应用程序接口;
通过各应用程序接口,将对应的各函数指针分别注册到虚拟机的全局表中;
将各待处理静态编译语言函数绑定到所述虚拟机上。
可选的,所述将各待处理静态编译语言函数绑定到所述虚拟机上,具体包括:
在所述虚拟栈中建立数据使用空间;
创建各待处理静态编译语言函数对应的代理函数,并将各代理函数存储在所述数据使用空间中;
根据各代理函数,将对应的待处理静态编译语言函数绑定到所述虚拟机上。
可选的,所述将该函数参数对应的待处理函数发送至所述脚本语言执行端,具体包括:
根据所述脚本语言执行端发送的函数参数,从所述数据使用空间查找对应的代理函数;
基于查找到的代理函数,确定对应的待处理静态编译语言函数;
基于静态编译语言支持的闭包以及确定的待处理静态编译语言函数,从所述全局表中获取对应的函数指针;
将确定的待处理静态编译语言函数及获取的函数指针发送至所述脚本语言执行端。
另一方面,本发明实施例提供了一种静态编译语言与脚本语言的调用系统,包括:
宿主程序端,用于向虚拟机发送多个待处理函数,以及根据接收到的函数参数运行对应的待处理函数得到运行结果,并将得到的运行结果压入所述虚拟机;
脚本语言执行端,用于向虚拟机发送函数参数,以及接收所述虚拟机发送的该函数参数对应的待处理函数以及运行结果,根据所述运行结果以及待处理函数执行脚本语言编译;
虚拟机,用于存储由所述宿主程序端发送的多个待处理函数,接收由脚本语言执行端发送的函数参数,并向所述宿主程序端发送该函数参数,接收由所述宿主程序端压入的运行结果,将该函数参数对应的待处理函数以及运行结果发送至所述脚本语言执行端。
可选的,所述待处理函数包括待处理静态编译语言函数及函数指针;
所述虚拟机包括存储单元,用于存储由所述宿主程序端发送的多个待处理函数;其中,
所述存储单元包括:
压入模块,用于将由所述宿主程序端发送的各待处理函数的函数指针压入虚拟机的虚拟栈中;
调用模块,用于调用所述虚拟机中各函数指针对应的脚本语言的应用程序接口;
注册模块,用于通过各应用程序接口,将对应的各函数指针分别注册到虚拟机的全局表中;
绑定模块,用于将各待处理静态编译语言函数绑定到所述虚拟机上。
可选的,所述绑定模块包括:
空间建立子模块,用于在所述虚拟栈中建立数据使用空间;
函数创建子模块,用于创建各待处理静态编译语言函数对应的代理函数,并将各代理函数存储在所述数据使用空间中;
函数绑定子模块,用于根据各代理函数,将对应的待处理静态编译语言函数绑定到所述虚拟机上。
可选的,所述虚拟机还包括:函数发送单元,用于将该函数参数对应的待处理函数发送至所述脚本语言执行端;其中,
所述函数发送单元包括:
查找模块,用于根据所述脚本语言执行端发送的函数参数,从所述数据使用空间查找对应的代理函数;
确定模块,用于基于查找到的代理函数,确定对应的待处理静态编译语言函数;
获取模块,用于基于静态编译语言支持的闭包以及确定的待处理静态编译语言函数,从所述全局表中获取对应的函数指针;
发送模块,用于将确定的待处理静态编译语言函数及获取的函数指针发送至所述脚本语言执行端。
本发明还提供一种静态编译语言与脚本语言的调用系统,所述静态编译语言与脚本语言的调用系统包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行以下操作:
存储由宿主程序端发送的多个待处理函数;
接收由脚本语言执行端发送的函数参数,所述函数参数对应一个待处理函数,且所述函数参数用于所述脚本语言执行端执行脚本语言编译;
将该函数参数对应的待处理函数发送至所述脚本语言执行端,以实现函数的调用,将所述函数参数发送至所述宿主程序端;
接收由宿主程序端压入的运行结果,所述运行结果由所述宿主程序端根据所述函数参数运行对应的待处理函数得到;
将运行结果发送至所述脚本语言执行端,使得所述脚本语言执行端根据所述运行结果以及待处理函数执行脚本语言编译。
本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行以下操作:
存储由宿主程序端发送的多个待处理函数;
接收由脚本语言执行端发送的函数参数,所述函数参数对应一个待处理函数,且所述函数参数用于所述脚本语言执行端执行脚本语言编译;
将该函数参数对应的待处理函数发送至所述脚本语言执行端,以实现函数的调用,将所述函数参数发送至所述宿主程序端;
接收由宿主程序端压入的运行结果,所述运行结果由所述宿主程序端根据所述函数参数运行对应的待处理函数得到;
将运行结果发送至所述脚本语言执行端,使得所述脚本语言执行端根据所述运行结果以及待处理函数执行脚本语言编译。
上述技术方案具有如下有益效果:本发明在宿主程序端与脚本语言执行端之间封装一个中间层,来适配两种语言间的交互,即通过虚拟机分别与宿主程序端与脚本语言执行端进行信息交互,通过函数参数、待处理函数及运行结果的发送与接收,进行两种语言间无缝交互,从而可实现信息的准确调用,降低开发过程中漏洞触发率,提升开发效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明静态编译语言与脚本语言的调用方法的流程图;
图2是本发明静态编译语言与脚本语言的调用系统的模块结构示意图。
符号说明:
宿主程序端—1,脚本语言执行端—2,虚拟机—3。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的目的是提供一种静态编译语言与脚本语言的调用方法,在宿主程序端与脚本语言执行端之间封装一个中间层,来适配两种语言间的交互,即通过虚拟机分别与宿主程序端与脚本语言执行端进行信息交互,通过函数参数、待处理函数及运行结果的发送与接收,进行两种语言间无缝交互,从而可实现信息的准确调用,降低开发过程中漏洞触发率,提升开发效率。
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
如图1所示,本发明静态编译语言与脚本语言的调用方法包括:
步骤100:存储由宿主程序端发送的多个待处理函数。
其中,所述宿主程序端用于采用静态编译语言运行,所述静态编译语言可为C++等。
步骤200:接收由脚本语言执行端发送的函数参数,所述函数参数对应一个待处理函数,且所述函数参数用于所述脚本语言执行端执行脚本语言编译。
步骤300:将该函数参数对应的待处理函数发送至所述脚本语言执行端,以实现函数的调用,将所述函数参数发送至所述宿主程序端。
步骤400:接收由宿主程序端压入的运行结果,所述运行结果由所述宿主程序端根据所述函数参数运行对应的待处理函数得到。
步骤500:将运行结果发送至所述脚本语言执行端,使得所述脚本语言执行端根据所述运行结果以及待处理函数执行脚本语言编译。
所述待处理函数包括待处理静态编译语言函数及函数指针。所述待处理函数的函数类型如下:
staticintLUACFunction(lua_State*L){
}。
其中,在步骤100中,所述存储由宿主程序端发送的多个待处理函数,具体包括:
步骤101:将由宿主程序端发送的各待处理函数的函数指针压入虚拟机的虚拟栈中;
步骤102:调用所述虚拟机中各函数指针对应的脚本语言的应用程序接口;
步骤103:通过各应用程序接口,将对应的各函数指针分别注册到虚拟机的全局表中;
步骤104:将各待处理静态编译语言函数绑定到所述虚拟机上。
进一步地,在步骤104中,所述将各待处理静态编译语言函数绑定到所述虚拟机上,具体包括:
步骤1041:在所述虚拟栈中建立数据使用空间;
步骤1042:创建各待处理静态编译语言函数对应的代理函数,并将各代理函数存储在所述数据使用空间中;
步骤1043:根据各代理函数,将对应的待处理静态编译语言函数绑定到所述虚拟机上。
在步骤300中,将该函数参数对应的待处理函数发送至所述脚本语言执行端,具体包括:
步骤301:根据所述脚本语言执行端发送的函数参数,从所述数据使用空间查找对应的代理函数;
步骤302:基于查找到的代理函数,确定对应的待处理静态编译语言函数;
步骤303:基于静态编译语言支持的闭包以及确定的待处理静态编译语言函数,从所述全局表中获取对应的函数指针;
步骤304:将确定的待处理静态编译语言函数及获取的函数指针发送至所述脚本语言执行端。
其中,所述静态编译语言支持的闭包为采用静态编译语言创建的一类函数,包括自由变量,在实施例中通过静态编译语言支持的闭包和待处理静态编译语言函数可确定对应的函数参数,即函数指针。
以int test(int a,int b){
return a+b;
}测试test函数作为待处理静态编译语言函数为例,要绑定一个待处理静态编译语言函数,首先在所述虚拟栈中建立数据使用userdata空间;创建各待处理静态编译语言函数对应的代理函数,并将各代理函数存储在所述数据使用空间中;根据各代理函数,将对应的待处理静态编译语言函数绑定到所述虚拟机上。在通过使用虚拟栈中Lua_pushcclosure将各代理函数存储在虚拟栈中,并且设置到对应的查询表中,从而完成对函数的绑定。
当脚本语言执行端在调用函数时会发送函数参数,宿主程序端需要将函数参数从虚拟栈中读取并最终传递到对应的待处理函数中,这个过程可提供针对不同数据类型的脚本语言的应用程序接口(Application Programming Interface,API)。本实施例采用C++元编程的方式,在所述虚拟机上绑定待处理静态编译语言函数的时候,确定所述待处理静态编译语言函数的函数类型,并且生成获取函数参数的代码,所述宿主程序端通过函数参数的代码从虚拟机中获取函数参数,并将获取的函数参数传递给待处理函数。
而所述宿主程序端通过根据所述函数参数运行对应的待处理函数,得到运行结果并返回至虚拟机中,实际上是获取参数的一个逆过程,同理是通过元编程的方式,根据绑定函数的函数类型在绑定的时候生成对应压入虚拟栈中代码在程序编译期。
对于获取参数、返回结果这两个过程中使用C++元编程技巧极大的简化了编码,并且提升使用本发明绑定中间的灵活性。
其中,在脚本语言执行端中本身是没有面向对象的,但是在Lua脚本语言中提供了表、和元表的概念可以模拟面向对象,例如:
通过Lua元表的概念可以模拟对象继承,在宿主程序端面向对象中分为命名空间、类、静态常量、静态方法、成员方法,对于命名空间绑定其实是采用Lua表来模拟,类也一样采用Lua表和metatable实现。
而静态方法的实现和前述中函数绑定的方法基本一致,对于面向对象中静态方法来说其实就是一个普通方法,只是其绑定到一个类上,在此不再赘述。
此外,所述成员方法是在创建一个对象后产生的方法,在结果返回部分将结果压入虚拟栈的过程中通过元编程判断函数类型,如果是类,首先会创建一个该类的元表,后续将返回值压入userdata空间中,在脚本语言执行端可以使用该返回对象调用其成员方法,其实现原理就是userdata本身没有这个成员方法,但是在返回该对象时通过给其设置了对应类的元表,会从元表中搜索该成员方法,其成员方法正是在该类型表中绑定的方法。在Lua脚本语言执行端调用成员方法是脚本语言执行端的第一个参数会返回self对象本身,后面是成员方法参数,首先将第一个参数解析为对应C++对象,后续参数处理和结果返回和静态方法处理过程一样。
以Lua脚本语言和C++静态编译语言进行交互为例详细介绍本发明静态编译语言与脚本语言的调用方法:
在宿主程序端与Lua脚本语言之间设置虚拟机负责解析处理脚本,宿主程序端可以启动一个虚拟机。当调用Lua脚本执行脚本语言编译时,虚拟机可以调用C++待处理函数发送至脚本语言执行端。并且在调用前,宿主程序端将待C++处理函数发送至虚拟机,所述虚拟机对将该待处理函数的函数指针压入虚拟栈中,并且调用Lua脚本语言的API接口将该函数指针注册到虚拟栈的全局表中。
在脚本语言执行端执行脚本语言编译时,首先将函数参数压入虚拟栈中,调用函数,宿主程序端从虚拟栈中获取函数参数,并且根据函数参数运行对应的待处理函数,将运行的结果,再次压入虚拟栈中,脚本语言执行端从虚拟栈中获取最终C++函数的运行结果,从而完一次相互调用。
本发明静态编译语言与脚本语言的调用方法通过元编程方式抽象绑定过程,可降低编码难度,提升脚本语言和静态编译语言混合编程的开发效率,降低由于误操作虚拟栈带来的故障。
本发明还提供一种静态编译语言与脚本语言的调用系统,可实现两种语言间无缝交互。如图2所示,本发明静态编译语言与脚本语言的调用系统包括宿主程序端1、脚本语言执行端2及虚拟机3。
其中,所述宿主程序端1用于向虚拟机发送多个待处理函数,以及根据接收到的函数参数运行对应的待处理函数得到运行结果,并将得到的运行结果压入所述虚拟机。
所述脚本语言执行端2用于向虚拟机发送函数参数,以及接收所述虚拟机发送的该函数参数对应的待处理函数以及运行结果,根据所述运行结果以及待处理函数执行脚本语言编译。
所述虚拟机3用于存储由所述宿主程序端1发送的多个待处理函数,接收由脚本语言执行端2发送的函数参数,并向所述宿主程序端1发送该函数参数,接收由所述宿主程序端1压入的运行结果,将该函数参数对应的待处理函数以及运行结果发送至所述脚本语言执行端2。
其中,所述待处理函数包括待处理静态编译语言函数及函数指针。
具体地,所述虚拟机3包括存储单元,所述存储单元用于存储由所述宿主程序端发送的多个待处理函数。
其中,所述存储单元包括压入模块、调用模块、注册模块及绑定模块。
所述压入模块用于将由所述宿主程序端发送的各待处理函数的函数指针压入虚拟机的虚拟栈中;所述调用模块用于调用所述虚拟机中各函数指针对应的脚本语言的应用程序接口;所述注册模块用于通过各应用程序接口,将对应的各函数指针分别注册到虚拟机的全局表中;所述绑定模块用于将各待处理静态编译语言函数绑定到所述虚拟机上。
进一步地,所述绑定模块包括空间建立子模块、函数创建子模块及函数绑定子模块。
所述空间建立子模块用于在所述虚拟栈中建立数据使用空间;所述函数创建子模块用于创建各待处理静态编译语言函数对应的代理函数,并将各代理函数存储在所述数据使用空间中;所述函数绑定子模块用于根据各代理函数,将对应的待处理静态编译语言函数绑定到所述虚拟机上。
此外,所述虚拟机3还包括函数发送单元,所述函数发送单元用于将该函数参数对应的待处理函数发送至所述脚本语言执行端。
其中,所述函数发送单元包括查找模块、确定模块、获取模块及发送模块。
所述查找模块用于根据所述脚本语言执行端发送的函数参数,从所述数据使用空间查找对应的代理函数;所述确定模块用于基于查找到的代理函数,确定对应的待处理静态编译语言函数;所述获取模块用于基于静态编译语言支持的闭包以及确定的待处理静态编译语言函数,从所述全局表中获取对应的函数指针;所述发送模块用于将确定的待处理静态编译语言函数及获取的函数指针发送至所述脚本语言执行端。
本发明实施例还提出了一种静态编译语言与脚本语言的调用系统,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行以下操作:
存储由宿主程序端发送的多个待处理函数;
接收由脚本语言执行端发送的函数参数,所述函数参数对应一个待处理函数,且所述函数参数用于所述脚本语言执行端执行脚本语言编译;
将该函数参数对应的待处理函数发送至所述脚本语言执行端,以实现函数的调用,将所述函数参数发送至所述宿主程序端;
接收由宿主程序端压入的运行结果,所述运行结果由所述宿主程序端根据所述函数参数运行对应的待处理函数得到;
将运行结果发送至所述脚本语言执行端,使得所述脚本语言执行端根据所述运行结果以及待处理函数执行脚本语言编译。
本发明实施例还提出了一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行以下操作:
存储由宿主程序端发送的多个待处理函数;
接收由脚本语言执行端发送的函数参数,所述函数参数对应一个待处理函数,且所述函数参数用于所述脚本语言执行端执行脚本语言编译;
将该函数参数对应的待处理函数发送至所述脚本语言执行端,以实现函数的调用,将所述函数参数发送至所述宿主程序端;
接收由宿主程序端压入的运行结果,所述运行结果由所述宿主程序端根据所述函数参数运行对应的待处理函数得到;
将运行结果发送至所述脚本语言执行端,使得所述脚本语言执行端根据所述运行结果以及待处理函数执行脚本语言编译。
相对于现有技术,本发明静态编译语言与脚本语言的调用系统、计算机可读存储介质与静态编译语言与脚本语言的调用方法的有益效果相同,在此不再赘述。
应该明白,公开的过程中的步骤的特定顺序或层次是示例性方法的实例。基于设计偏好,应该理解,过程中的步骤的特定顺序或层次可以在不脱离本公开的保护范围的情况下得到重新安排。所附的方法权利要求以示例性的顺序给出了各种步骤的要素,并且不是要限于所述的特定顺序或层次。
在上述的详细描述中,各种特征一起组合在单个的实施方案中,以简化本公开。不应该将这种公开方法解释为反映了这样的意图,即,所要求保护的主题的实施方案需要比清楚地在每个权利要求中所陈述的特征更多的特征。相反,如所附的权利要求书所反映的那样,本发明处于比所公开的单个实施方案的全部特征少的状态。因此,所附的权利要求书特此清楚地被并入详细描述中,其中每项权利要求独自作为本发明单独的优选实施方案。
为使本领域内的任何技术人员能够实现或者使用本发明,上面对所公开实施例进行了描述。对于本领域技术人员来说;这些实施例的各种修改方式都是显而易见的,并且本文定义的一般原理也可以在不脱离本公开的精神和保护范围的基础上适用于其它实施例。因此,本公开并不限于本文给出的实施例,而是与本申请公开的原理和新颖性特征的最广范围相一致。
上文的描述包括一个或多个实施例的举例。当然,为了描述上述实施例而描述部件或方法的所有可能的结合是不可能的,但是本领域普通技术人员应该认识到,各个实施例可以做进一步的组合和排列。因此,本文中描述的实施例旨在涵盖落入所附权利要求书的保护范围内的所有这样的改变、修改和变型。此外,就说明书或权利要求书中使用的术语“包含”,该词的涵盖方式类似于术语“包括”,就如同“包括,”在权利要求中用作衔接词所解释的那样。此外,使用在权利要求书的说明书中的任何一个术语“或者”是要表示“非排它性的或者”。
本领域技术人员还可以了解到本发明实施例列出的各种说明性逻辑块(illustrative logical block),单元,和步骤可以通过电子硬件、电脑软件,或两者的结合进行实现。为清楚展示硬件和软件的可替换性(interchangeability),上述的各种说明性部件(illustrative components),单元和步骤已经通用地描述了它们的功能。这样的功能是通过硬件还是软件来实现取决于特定的应用和整个系统的设计要求。本领域技术人员可以对于每种特定的应用,可以使用各种方法实现所述的功能,但这种实现不应被理解为超出本发明实施例保护的范围。
本发明实施例中所描述的各种说明性的逻辑块,或单元都可以通过通用处理器,数字信号处理器,专用集成电路(ASIC),现场可编程门阵列或其它可编程逻辑装置,离散门或晶体管逻辑,离散硬件部件,或上述任何组合的设计来实现或操作所描述的功能。通用处理器可以为微处理器,可选地,该通用处理器也可以为任何传统的处理器、控制器、微控制器或状态机。处理器也可以通过计算装置的组合来实现,例如数字信号处理器和微处理器,多个微处理器,一个或多个微处理器联合一个数字信号处理器核,或任何其它类似的配置来实现。
本发明实施例中所描述的方法或算法的步骤可以直接嵌入硬件、处理器执行的软件模块、或者这两者的结合。软件模块可以存储于RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、可移动磁盘、CD-ROM或本领域中其它任意形式的存储媒介中。示例性地,存储媒介可以与处理器连接,以使得处理器可以从存储媒介中读取信息,并可以向存储媒介存写信息。可选地,存储媒介还可以集成到处理器中。处理器和存储媒介可以设置于ASIC中,ASIC可以设置于用户终端中。可选地,处理器和存储媒介也可以设置于用户终端中的不同的部件中。
在一个或多个示例性的设计中,本发明实施例所描述的上述功能可以在硬件、软件、固件或这三者的任意组合来实现。如果在软件中实现,这些功能可以存储与电脑可读的媒介上,或以一个或多个指令或代码形式传输于电脑可读的媒介上。电脑可读媒介包括电脑存储媒介和便于使得让电脑程序从一个地方转移到其它地方的通信媒介。存储媒介可以是任何通用或特殊电脑可以接入访问的可用媒体。例如,这样的电脑可读媒体可以包括但不限于RAM、ROM、EEPROM、CD-ROM或其它光盘存储、磁盘存储或其它磁性存储装置,或其它任何可以用于承载或存储以指令或数据结构和其它可被通用或特殊电脑、或通用或特殊处理器读取形式的程序代码的媒介。此外,任何连接都可以被适当地定义为电脑可读媒介,例如,如果软件是从一个网站站点、服务器或其它远程资源通过一个同轴电缆、光纤电缆、双绞线、数字用户线(DSL)或以例如红外、无线和微波等无线方式传输的也被包含在所定义的电脑可读媒介中。所述的碟片(disk)和磁盘(disc)包括压缩磁盘、镭射盘、光盘、DVD、软盘和蓝光光盘,磁盘通常以磁性复制数据,而碟片通常以激光进行光学复制数据。上述的组合也可以包含在电脑可读媒介中。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种静态编译语言与脚本语言的调用方法,其特征在于,包括:
存储由宿主程序端发送的多个待处理函数;
接收由脚本语言执行端发送的函数参数,所述函数参数对应一个待处理函数,且所述函数参数用于所述脚本语言执行端执行脚本语言编译;
将该函数参数对应的待处理函数发送至所述脚本语言执行端,以实现函数的调用,将所述函数参数发送至所述宿主程序端;
接收由宿主程序端压入的运行结果,所述运行结果由所述宿主程序端根据所述函数参数运行对应的待处理函数得到;
将运行结果发送至所述脚本语言执行端,使得所述脚本语言执行端根据所述运行结果以及待处理函数执行脚本语言编译。
2.根据权利要求1所述的静态编译语言与脚本语言的调用方法,其特征在于,所述待处理函数包括待处理静态编译语言函数及函数指针;
所述存储由宿主程序端发送的多个待处理函数,具体包括:
将由宿主程序端发送的各待处理函数的函数指针压入虚拟机的虚拟栈中;
调用所述虚拟机中各函数指针对应的脚本语言的应用程序接口;
通过各应用程序接口,将对应的各函数指针分别注册到虚拟机的全局表中;
将各待处理静态编译语言函数绑定到所述虚拟机上。
3.根据权利要求2所述的静态编译语言与脚本语言的调用方法,其特征在于,所述将各待处理静态编译语言函数绑定到所述虚拟机上,具体包括:
在所述虚拟栈中建立数据使用空间;
创建各待处理静态编译语言函数对应的代理函数,并将各代理函数存储在所述数据使用空间中;
根据各代理函数,将对应的待处理静态编译语言函数绑定到所述虚拟机上。
4.根据权利要求3所述的静态编译语言与脚本语言的调用方法,其特征在于,所述将该函数参数对应的待处理函数发送至所述脚本语言执行端,具体包括:
根据所述脚本语言执行端发送的函数参数,从所述数据使用空间查找对应的代理函数;
基于查找到的代理函数,确定对应的待处理静态编译语言函数;
基于静态编译语言支持的闭包以及确定的待处理静态编译语言函数,从所述全局表中获取对应的函数指针;
将确定的待处理静态编译语言函数及获取的函数指针发送至所述脚本语言执行端。
5.一种静态编译语言与脚本语言的调用系统,其特征在于,包括:
宿主程序端,用于向虚拟机发送多个待处理函数,以及根据接收到的函数参数运行对应的待处理函数得到运行结果,并将得到的运行结果压入所述虚拟机;
脚本语言执行端,用于向虚拟机发送函数参数,以及接收所述虚拟机发送的该函数参数对应的待处理函数以及运行结果,根据所述运行结果以及待处理函数执行脚本语言编译;
虚拟机,用于存储由所述宿主程序端发送的多个待处理函数,接收由脚本语言执行端发送的函数参数,并向所述宿主程序端发送该函数参数,接收由所述宿主程序端压入的运行结果,将该函数参数对应的待处理函数以及运行结果发送至所述脚本语言执行端。
6.根据权利要求5所述的静态编译语言与脚本语言的调用系统,其特征在于,所述待处理函数包括待处理静态编译语言函数及函数指针;
所述虚拟机包括存储单元,用于存储由所述宿主程序端发送的多个待处理函数;其中,
所述存储单元包括:
压入模块,用于将由所述宿主程序端发送的各待处理函数的函数指针压入虚拟机的虚拟栈中;
调用模块,用于调用所述虚拟机中各函数指针对应的脚本语言的应用程序接口;
注册模块,用于通过各应用程序接口,将对应的各函数指针分别注册到虚拟机的全局表中;
绑定模块,用于将各待处理静态编译语言函数绑定到所述虚拟机上。
7.根据权利要求6所述的静态编译语言与脚本语言的调用系统,其特征在于,所述绑定模块包括:
空间建立子模块,用于在所述虚拟栈中建立数据使用空间;
函数创建子模块,用于创建各待处理静态编译语言函数对应的代理函数,并将各代理函数存储在所述数据使用空间中;
函数绑定子模块,用于根据各代理函数,将对应的待处理静态编译语言函数绑定到所述虚拟机上。
8.根据权利要求7所述的静态编译语言与脚本语言的调用系统,其特征在于,所述虚拟机还包括:函数发送单元,用于将该函数参数对应的待处理函数发送至所述脚本语言执行端;其中,
所述函数发送单元包括:
查找模块,用于根据所述脚本语言执行端发送的函数参数,从所述数据使用空间查找对应的代理函数;
确定模块,用于基于查找到的代理函数,确定对应的待处理静态编译语言函数;
获取模块,用于基于静态编译语言支持的闭包以及确定的待处理静态编译语言函数,从所述全局表中获取对应的函数指针;
发送模块,用于将确定的待处理静态编译语言函数及获取的函数指针发送至所述脚本语言执行端。
9.一种静态编译语言与脚本语言的调用系统,其特征在于,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行以下操作:
存储由宿主程序端发送的多个待处理函数;
接收由脚本语言执行端发送的函数参数,所述函数参数对应一个待处理函数,且所述函数参数用于所述脚本语言执行端执行脚本语言编译;
将该函数参数对应的待处理函数发送至所述脚本语言执行端,以实现函数的调用,将所述函数参数发送至所述宿主程序端;
接收由宿主程序端压入的运行结果,所述运行结果由所述宿主程序端根据所述函数参数运行对应的待处理函数得到;
将运行结果发送至所述脚本语言执行端,使得所述脚本语言执行端根据所述运行结果以及待处理函数执行脚本语言编译。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行以下操作:
存储由宿主程序端发送的多个待处理函数;
接收由脚本语言执行端发送的函数参数,所述函数参数对应一个待处理函数,且所述函数参数用于所述脚本语言执行端执行脚本语言编译;
将该函数参数对应的待处理函数发送至所述脚本语言执行端,以实现函数的调用,将所述函数参数发送至所述宿主程序端;
接收由宿主程序端压入的运行结果,所述运行结果由所述宿主程序端根据所述函数参数运行对应的待处理函数得到;
将运行结果发送至所述脚本语言执行端,使得所述脚本语言执行端根据所述运行结果以及待处理函数执行脚本语言编译。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810072681.0A CN108345458B (zh) | 2018-01-25 | 2018-01-25 | 一种静态编译语言与脚本语言的调用方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810072681.0A CN108345458B (zh) | 2018-01-25 | 2018-01-25 | 一种静态编译语言与脚本语言的调用方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108345458A CN108345458A (zh) | 2018-07-31 |
CN108345458B true CN108345458B (zh) | 2021-04-09 |
Family
ID=62961670
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810072681.0A Active CN108345458B (zh) | 2018-01-25 | 2018-01-25 | 一种静态编译语言与脚本语言的调用方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108345458B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110858140B (zh) * | 2018-08-21 | 2024-01-26 | 苏州迈科网络安全技术股份有限公司 | 使用Lua脚本和第三方C模块的应用程序的编译方法 |
CN110825383B (zh) * | 2019-10-14 | 2023-08-22 | 北京奇艺世纪科技有限公司 | 一种视频交互方法、装置及计算机可读存储介质 |
CN115981652B (zh) * | 2021-10-14 | 2023-09-29 | 华为技术有限公司 | 语言互操作方法、装置、存储介质及程序产品 |
CN117724989B (zh) * | 2024-02-18 | 2024-06-11 | 粤港澳大湾区数字经济研究院(福田) | 一种接口的回归测试方法、装置、终端及存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107391219A (zh) * | 2017-07-07 | 2017-11-24 | 腾讯科技(深圳)有限公司 | 函数编译方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9690551B2 (en) * | 2015-04-07 | 2017-06-27 | Qualcomm Innovation Center, Inc. | Auto-vectorization in just-in-time compilers for dynamically typed programming languages |
-
2018
- 2018-01-25 CN CN201810072681.0A patent/CN108345458B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107391219A (zh) * | 2017-07-07 | 2017-11-24 | 腾讯科技(深圳)有限公司 | 函数编译方法和装置 |
Non-Patent Citations (1)
Title |
---|
VB与Lua交互调用的研究与实现;黄皓;《现代计算机》;20150915;正文第1-7页 * |
Also Published As
Publication number | Publication date |
---|---|
CN108345458A (zh) | 2018-07-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108345458B (zh) | 一种静态编译语言与脚本语言的调用方法及系统 | |
CN110096338B (zh) | 智能合约执行方法、装置、设备及介质 | |
CN109976761B (zh) | 软件开发工具包的生成方法、装置及终端设备 | |
CA2082409C (en) | Improved system and method for jacketing cross-domain calls in a multi-code execution and debugging system within a multi-architecture environment | |
CN108984174B (zh) | 跨平台的应用创建方法、装置、服务器和存储介质 | |
US20080235661A1 (en) | System and method for using annotations to automatically generate a framework for a custom javaserver faces (jsf) component | |
GB2589658A (en) | Method and apparatus for running an applet | |
CN110531962A (zh) | 小程序的开发处理方法、设备及计算机可读存储介质 | |
WO2016095570A1 (zh) | 一种嵌入式系统的调试方法及装置、存储介质 | |
CN107402792B (zh) | 应用软件安装包的集成方法、装置、设备及存储介质 | |
CN111880801A (zh) | 应用程序动态化方法、装置、电子设备 | |
CN110955409A (zh) | 在云平台上创建资源的方法和装置 | |
CN110659210A (zh) | 一种信息获取方法、装置、电子设备及存储介质 | |
CN111427782A (zh) | 安卓动态链接库的运行方法、装置、设备及存储介质 | |
CN109471693A (zh) | 将专有组件映射到跨平台开发系统的方法、介质及设备 | |
US10747514B2 (en) | Reduced save and restore instructions for call-clobbered registers | |
CN110045952B (zh) | 代码调用方法与装置 | |
CN114461223A (zh) | 一种代码生成方法、装置及终端设备 | |
CN114428642A (zh) | 一种基于新型处理器架构的随机指令生成环境 | |
US11755458B2 (en) | Automatic software behavior identification using execution record | |
US20130132930A1 (en) | Capturing telemetry data by dynamic language engine | |
CN109669715A (zh) | 应用程序动态更新方法、设备及存储介质 | |
CN113986744A (zh) | 一种分库分表组件的测试方法、装置及存储介质 | |
CN111399932A (zh) | 调用dll的方法、系统、浏览器的处理方法和浏览器 | |
CN110673834A (zh) | 一种源码调用方法、装置、计算机设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |