CN117076010B - 程序模块处理方法、装置、设备及计算机可读存储介质 - Google Patents
程序模块处理方法、装置、设备及计算机可读存储介质 Download PDFInfo
- Publication number
- CN117076010B CN117076010B CN202311193109.7A CN202311193109A CN117076010B CN 117076010 B CN117076010 B CN 117076010B CN 202311193109 A CN202311193109 A CN 202311193109A CN 117076010 B CN117076010 B CN 117076010B
- Authority
- CN
- China
- Prior art keywords
- program module
- execution environment
- module
- address
- corresponding relation
- 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
- 238000003672 processing method Methods 0.000 title claims abstract description 34
- 238000000034 method Methods 0.000 claims abstract description 55
- 238000012545 processing Methods 0.000 claims description 88
- 238000011068 loading method Methods 0.000 claims description 68
- 230000006870 function Effects 0.000 claims description 50
- 230000004044 response Effects 0.000 claims description 40
- 230000015654 memory Effects 0.000 claims description 23
- 238000004590 computer program Methods 0.000 claims description 21
- 238000005516 engineering process Methods 0.000 abstract description 4
- 238000013473 artificial intelligence Methods 0.000 abstract description 3
- 230000008569 process Effects 0.000 description 13
- 238000010586 diagram Methods 0.000 description 11
- 238000004891 communication Methods 0.000 description 6
- 238000001514 detection method Methods 0.000 description 4
- 230000001960 triggered effect Effects 0.000 description 4
- 230000003993 interaction Effects 0.000 description 3
- 238000013515 script Methods 0.000 description 3
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000012805 post-processing Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004883 computer application Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000036316 preload Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/76—Adapting program code to run in a different environment; Porting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供了一种程序模块处理方法、装置、设备及计算机可读存储介质,应用于云技术、人工智能、智慧交通、车载和游戏等各种程序模块调用场景;程序模块处理方法包括:响应于第一程序模块对第二程序模块的调用请求,获得第二程序模块的目标相对地址,其中,第一程序模块的执行环境为第一执行环境,第一执行环境包括相对地址与绝对地址之间的第一对应关系;从第一对应关系中,得到与目标相对地址对应的目标绝对地址;从绝对地址与执行环境之间的第二对应关系中,得到与目标绝对地址对应的第二执行环境;从第二执行环境中获取与调用请求对应的待调用内容;基于待调用内容执行第二程序模块。通过本申请,能够提升程序模块的调用效率。
Description
技术领域
本申请涉及计算机应用领域中的程序处理技术,尤其涉及一种程序模块处理方法、装置、设备及计算机可读存储介质。
背景技术
在加载程序模块时,常常将当前的模块环境作为被加载程序模块的模块环境,从而,使得所加载的所有程序的模块环境均为全局模块环境;如此,程序模块间的调用均是通过访问全局模块环境实现的,影响了调用效率。
发明内容
本申请实施例提供一种程序模块处理方法、装置、设备、计算机可读存储介质及计算机程序产品,能够提升程序模块的调用效率。
本申请实施例的技术方案是这样实现的:
本申请实施例提供一种程序模块处理方法,所述方法包括:
响应于第一程序模块对第二程序模块的调用请求,获得所述第二程序模块的目标相对地址,其中,所述第一程序模块的执行环境为第一执行环境,所述第一执行环境包括相对地址与绝对地址之间的第一对应关系;
从所述第一对应关系中,得到与所述目标相对地址对应的目标绝对地址;
从绝对地址与执行环境之间的第二对应关系中,得到与所述目标绝对地址对应的第二执行环境;
从所述第二执行环境中获取与所述调用请求对应的待调用内容;
基于所述待调用内容执行所述第二程序模块。
本申请实施例提供一种程序模块处理装置,所述程序模块处理装置包括:
请求响应模块,用于响应于第一程序模块对第二程序模块的调用请求,获得所述第二程序模块的目标相对地址,其中,所述第一程序模块的执行环境为第一执行环境,所述第一执行环境包括相对地址与绝对地址之间的第一对应关系;
地址查询模块,用于从所述第一对应关系中,得到与所述目标相对地址对应的目标绝对地址;
环境查询模块,用于从绝对地址与执行环境之间的第二对应关系中,得到与所述目标绝对地址对应的第二执行环境;
内容获取模块,用于从所述第二执行环境中获取与所述调用请求对应的待调用内容;
程序执行模块,用于基于所述待调用内容执行所述第二程序模块。
在本申请实施例中,所述程序加载模块,还用于将所述第二执行环境的写标识更新为不可写标识,其中,所述不可写标识表示所述第二执行环境处于不可写状态;在所述第二执行环境的所述写标识为所述不可写标识时,响应于对所述第二执行环境的属性更新请求,生成属性更新失败信息;显示所述属性更新失败信息。
在本申请实施例中,所述程序加载模块,还用于响应于针对所述第二程序模块的所述加载请求,执行所述第二程序模块,得到所述第二程序模块对应的模块属性;在所述第二程序模块的指定执行环境的写标识为可写标识时,基于所述模块属性生成所述第二执行环境,其中,所述可写标识表示所述指定执行环境处于可写状态。
在本申请实施例中,所述程序加载模块,还用于将所述模块属性中的函数类型属性,存储至所述指定执行环境中;将所述模块属性中的非函数类型属性,存储至所述指定执行环境的指定属性中;将存储所述函数类型属性的所述指定执行环境、以及存储所述非函数类型属性的所述指定属性,确定为所述第二执行环境。
在本申请实施例中,所述内容获取模块,还用于当所述调用请求的待赋值属性属于所述第二执行环境中的所述指定属性时,将所述调用请求的待赋值信息赋值于所述待赋值属性,得到所述待调用内容。
在本申请实施例中,所述内容获取模块,还用于当所述待赋值属性不属于所述指定属性时,生成赋值错误信息;显示所述赋值错误信息。
在本申请实施例中,所述程序加载模块,还用于将所述目标相对地址与当前第一对应关系中的每个相对地址进行匹配;当匹配结果表示所述当前第一对应关系中不包括所述目标相对地址时,将所述第二程序模块的所述目标相对地址与所述目标绝对地址对应存储至所述当前第一对应关系,得到所述第一对应关系。
在本申请实施例中,所述程序加载模块,还用于当匹配结果表示所述当前第一对应关系中包括所述目标相对地址时,将所述当前第一对应关系中与所述目标相对地址匹配的所述相对地址进行重命名,得到与当前第一对应关系对应的待存储第一对应关系;将所述目标相对地址重命名为待存储相对地址,并将所述待存储相对地址与所述目标绝对地址对应存储至所述待存储第一对应关系,得到所述第一对应关系。
在本申请实施例中,所述地址查询模块,还用于当基于所述目标相对地址从所述第一对应关系获取绝对地址失败时,获取所述目标相对地址的所述待存储相对地址,并从所述第一对应关系中,得到与所述待存储相对地址对应的所述目标绝对地址。
在本申请实施例中,所述程序加载模块,还用于响应于针对所述第二程序模块的加载请求,在所述第二程序模块中增加指定加载方法;响应于所述指定加载方法的增加,检测所述指定加载方法在所述第二程序模块的调用位置;当所述调用位置为所述第二程序模块的最外层时,执行所述第二程序模块,得到所述第二执行环境。
在本申请实施例中,所述请求响应模块,还用于响应于所述第一程序模块的访问请求,在所述第一执行环境中查找所请求调用的请求信息;当在所述第一执行环境中查找所述请求信息失败时,将所述访问请求确定为所述第一程序模块对所述第二程序模块的所述调用请求。
在本申请实施例中,所述请求响应模块,还用于响应于所述第一程序模块对所述第二程序模块的所述调用请求,将所述请求信息确定为所述第二程序模块的所述目标相对地址。
在本申请实施例中,所述程序模块处理装置还包括关系同步模块,用于将所述第二对应关系同步至第三方访问区域中;响应于对所述第二程序模块的第三方调用请求,从所述第三方访问区域中获取所述第二执行环境;基于所述第二执行环境调用所述第二程序模块。
本申请实施例提供一种用于程序模块处理的电子设备,所述电子设备包括:
存储器,用于存储计算机可执行指令或者计算机程序;
处理器,用于执行所述存储器中存储的计算机可执行指令或者计算机程序时,实现本申请实施例提供的程序模块处理方法。
本申请实施例提供一种计算机可读存储介质,存储有计算机可执行指令或者计算机程序,所述计算机可执行指令或者计算机程序用于被处理器执行时,实现本申请实施例提供的程序模块处理方法。
本申请实施例提供一种计算机程序产品,包括计算机可执行指令或者计算机程序,所述计算机可执行指令或者计算机程序被处理器执行时,实现本申请实施例提供的程序模块处理方法。
本申请实施例至少具有以下有益效果:由于在第一程序模块的第一执行环境中,预先存储了第二程序模块的目标相对地址对应的目标绝对地址;因此,在第一程序模块调用第二程序模块时,能够基于调用请求中的目标相对地址获取到对应的目标绝对地址;又由于预先存储了与目标绝对地址对应的第二执行环境,从而,能够基于目标绝对地址访问到第二执行环境,实现第一程序模块对第二程序模块的调用;由于上述第一程序模块调用第二程序模块的过程是通过访问第二程序模块的第二执行环境实现的,因此,实现了基于程序模块的执行环境访问该程序模块的处理,能够提升程序模块的调用效率。
附图说明
图1是一种示例性的模块结构示意图;
图2是一种示例性的全局模块环境示意图;
图3是本申请实施例提供的程序模块处理系统的架构示意图;
图4是本申请实施例提供的一种图3中的终端的结构示意图;
图5是本申请实施例提供的程序模块处理方法的流程示意图一;
图6是本申请实施例提供的程序模块处理方法的流程示意图二;
图7是本申请实施例提供的程序模块处理方法的流程示意图三;
图8是本申请实施例提供的一种示例性的模块环境结构示意图;
图9是本申请实施例提供的一种示例性的模块加载流程图;
图10是本申请实施例提供的一种示例性的加载函数的应用示意图;
图11是本申请实施例提供的一种示例性的模块调用示意图;
图12是本申请实施例提供的一种示例性的属性赋值的流程图;
图13是本申请实施例提供的一种示例性的局部变量检测示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
在以下的描述中,所涉及的术语“第一\第二\第三”用于区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
除非另有定义,本申请实施例所使用的所有的技术和科学术语与所属技术领域的技术人员通常理解的含义相同。本申请实施例中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
对本申请实施例进行进一步详细说明之前,对本申请实施例中涉及的名词和术语进行说明,本申请实施例中涉及的名词和术语适用于如下的解释。
1)潜入式脚本语言,通过嵌入应用程序中而为应用程序提供扩展和定制功能的语言(比如,Lua语言),能够提供在特定平台上的即时编译功能;另外,通常潜入式脚本语言不作为开发独立应用程序的语言。
2)语言表,用于表示结构体、数组和链表等数据结构;在Lua语言中,该语言表称为Lua表(Lua Table)。
3)全局表,是指一个作用域为全局作用域的语言表,包括当前脚本中定义的所有全局变量、函数以及操作符等;使用全局表可以在任何地方访问和修改全局变量和函数;在Lua语言中,该全局表记为_G表。
4)程序模块,是指用于实现特定功能的计算机程序代码;在Lua语言中,程序模块称为Lua模块。本申请实施例中的第一程序模块和第二程序模块等程序模块,可以为潜入式脚本语言编写的功能模块,比如,Lua模块。
5)模块环境,一个用于表示程序模块执行时的上下文环境的语言表;在Lua语言中,模块环境称为Lua环境或模块环境,从而,_G表为全局模块环境。
需要说明的是,在加载程序模块时,常常将当前的模块环境作为被加载程序模块的模块环境,从而,使得所加载的所有程序的模块环境均为全局模块环境,模块环境单一;如此,程序模块间的调用均是通过访问全局模块环境实现的,影响了调用效率。另外,由于存在模块程序的局部属性误存入全局模块环境的情况,使得模块程序的局部属性的访问存在任意性,影响了调用安全性;并且,还存在因重名导致原有全局属性被覆盖的问题,影响了调用正确性。
示例性地,参见图1,图1是一种示例性的模块结构示意图;如图1所示,在模块嵌套结构1-1中,程序模块1-11调用程序模块1-12,而程序模块1-12调用程序模块1-13。相应地,参见图2,图2是一种示例性的全局模块环境示意图;如图2所示,全局模块环境2-1中包括图1的程序模块1-11的全局数据2-21、图1的程序模块1-12的全局数据2-22、图1的程序模块1-13的全局数据2-23、以及误写入的数据2-24。易知,全局模块环境2-1影响了调用效率、安全性和正确性。
基于此,本申请实施例提供一种程序模块处理方法、装置、设备、计算机可读存储介质及计算机程序产品,能够提升程序模块的调用效率、安全性和正确性。下面说明本申请实施例提供的用于程序模块处理的电子设备(以下简称为程序模块处理设备)的示例性应用,本申请实施例提供的程序模块处理设备可以实施为智能手机、智能手表、笔记本电脑、平板电脑、台式计算机、智能家电、机顶盒、智能车载设备、便携式音乐播放器、个人数字助理、专用消息设备、智能语音交互设备、便携式游戏设备和智能音箱等各种类型的终端,也可以实施为服务器,还可以是两者的结合。下面,将说明程序模块处理设备实施为终端时的示例性应用。
参见图3,图3是本申请实施例提供的程序模块处理系统的架构示意图;如图3所示,为支撑一个程序模块处理应用,在程序模块处理系统100中,终端400(示例性示出了终端400-1和终端400-2)通过网络300连接服务器200;网络300可以是广域网或者局域网,又或者是二者的组合;服务器200用于通过网络300向终端400提供计算服务。另外,该程序模块处理系统100中还包括数据库500,用于向服务器200提供数据支持;并且,图3中示出的为数据库500独立于服务器200的一种情况,此外,数据库500还可以集成在服务器200中,本申请实施例对此不作限定。
终端400,用于响应于业务应用的业务请求,执行第一程序模块;响应于第一程序模块对第二程序模块的调用请求,获得第二程序模块的目标相对地址,其中,第一程序模块的执行环境为第一执行环境,第一执行环境包括相对地址与绝对地址之间的第一对应关系;从第一对应关系中,得到与目标相对地址对应的目标绝对地址;从绝对地址与执行环境之间的第二对应关系中,得到与目标绝对地址对应的第二执行环境;从第二执行环境中获取与调用请求对应的待调用内容;基于待调用内容执行第二程序模块,以实现业务应用的应用功能(示例性示出了图形界面410-1和图形界面410-2)。
在一些实施例中,服务器200可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content DeliveryNetwork,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请实施例中不作限制。
参见图4,图4是本申请实施例提供的一种图3中的终端的结构示意图;如图4所示,终端400包括:至少一个处理器410、存储器450、至少一个网络接口420和用户接口430。终端400中的各个组件通过总线系统440耦合在一起。可理解,总线系统440用于实现这些组件之间的连接通信。总线系统440除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图4中将各种总线都标为总线系统440。
处理器410可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(Digital Signal Processor,DSP),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
用户接口430包括使得能够呈现媒体内容的一个或多个输出装置431,包括一个或多个扬声器和/或一个或多个视觉显示屏。用户接口430还包括一个或多个输入装置432,包括有助于用户输入的用户接口部件,比如键盘、鼠标、麦克风、触屏显示屏、摄像头、其他输入按钮和控件。
存储器450可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器450可选地包括在物理位置上远离处理器410的一个或多个存储设备。
存储器450包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(Read Only Memory,ROM),易失性存储器可以是随机存取存储器(Random Access Memory,RAM)。本申请实施例描述的存储器450旨在包括任意适合类型的存储器。
在一些实施例中,存储器450能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
操作系统451,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
网络通信模块452,用于经由一个或多个(有线或无线)网络接口420到达其他电子设备,示例性的网络接口420包括:蓝牙、无线相容性认证(Wi-Fi)、和通用串行总线(Universal Serial Bus,USB)等;
呈现模块453,用于经由一个或多个与用户接口430相关联的输出装置431(例如,显示屏、扬声器等)使得能够呈现信息(例如,用于操作外围设备和显示内容和信息的用户接口);
输入处理模块454,用于对来自一个或多个输入装置432之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。
在一些实施例中,本申请实施例提供的程序模块处理装置可以采用软件方式实现,图4示出了存储在存储器450中的程序模块处理装置455,其可以是程序和插件等形式的软件,包括以下软件模块:请求响应模块4551、地址查询模块4552、环境查询模块4553、内容获取模块4554、程序执行模块4555、程序加载模块4556和关系同步模块4557,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。将在下文中说明各个模块的功能。
在一些实施例中,本申请实施例提供的程序模块处理装置可以采用硬件方式实现,作为示例,本申请实施例提供的程序模块处理装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本申请实施例提供的程序模块处理方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(Application Specific IntegratedCircuit,ASIC)、DSP、可编程逻辑器件(Programmable Logic Device,PLD)、复杂可编程逻辑器件(Complex Programmable Logic Device,CPLD)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或其他电子元件。
在一些实施例中,终端可以通过运行各种计算机可执行指令或者计算机程序来实现本申请实施例提供的程序模块处理方法。举例来说,计算机可执行指令可以是微程序级的命令、机器指令或软件指令。计算机程序可以是操作系统中的原生程序或软件模块;可以是本地(Native)应用程序(APPlication,APP),即需要在操作系统中安装才能运行的程序,如游戏APP或者即时通信APP;也可以是能够嵌入至任意APP中的小程序,即只需要下载到浏览器环境中就可以运行的程序。总而言之,上述的计算机可执行指令可以是任意形式的指令,上述计算机程序可以是任意形式的应用程序、模块或插件。
下面,将结合本申请实施例提供的程序模块处理设备的示例性应用和实施,说明本申请实施例提供的程序模块处理方法。另外,本申请实施例提供的程序模块处理方法应用于云技术、人工智能、智慧交通、车载和游戏等各种程序模块调用场景。
参见图5,图5是本申请实施例提供的程序模块处理方法的流程示意图一,其中,图5中各步骤的执行主体是程序模块处理设备;下面将结合图5示出的步骤进行说明。
步骤101、响应于第一程序模块对第二程序模块的调用请求,获得第二程序模块的目标相对地址。
在本申请实施例中,由于业务应用是由多个程序模块实现的,业务应用中的功能实现是通过多个程序模块之间的互相访问(又称为调用)实现的;故当基于业务应用的业务需求触发了程序模块之间的调用时,程序模块处理设备也就接收到了第一程序模块对第二程序模块的调用请求;此时,程序处理设备响应于该调用请求,从该调用请求中获取待调用的第二程序模块的相对地址,也就获得了目标相对地址。
需要说明的是,业务需求是指业务应用过程中的业务功能实现请求,比如,视频处理需求,模型训练需求,虚拟场景处理需求,等等。第一程序模块是指业务应用中的发起调用的程序模块,第二程序模块是指业务应用中待调用的程序模块。目标相对地址是指第二程序模块的相对地址,比如为第二程序模块的模块名称。另外,调用请求是指第一程序模块调用第二程序模块的请求,从而,调用请求中包括第二程序模块的目标相对地址,进而,程序模块处理设备能够从调用请求中获得该目标相对地址。
可以理解的是,通过在调用请求中携带目标相对地址,减少了程序模块调用时的参数传递量,所以能够提升参数传递效率;另外,还能够减少对参数的解析消耗;进而能够提升程序模块的调用效率。
步骤102、从第一对应关系中,得到与目标相对地址对应的目标绝对地址。
在本申请实施例中,将第一程序模块的执行环境称为第一执行环境,这里,第一执行环境包括相对地址与绝对地址之间的第一对应关系;从而,程序模块处理设备在第一执行环境的第一对应关系中,将目标相对地址与第一对应关系中的每个相对地址进行匹配,并将匹配的相对地址所对应的绝对地址确定为第二程序模块的绝对地址,这里称为目标绝对地址。
需要说明的是,第一对应关系表示每个相对地址与每个绝对地址之间的对应关系,以及相对地址与绝对地址是一一对应的关系;当给定一个相对地址时,能够从第一对应关系中匹配出一个对应的绝对地址;其中,绝对地址是指程序模块的完整地址,包括路径名称和程序模块名称。另外,第一对应关系中的每个相对地址与绝对地址的对应关系,是在第一程序模块首次调用对应的程序模块时加载该程序模块而存储的;同理,第一对应关系中的目标相对地址和目标绝对地址,是在第一程序模块首次调用第二程序模块时加载该第二程序模块而存储的。
可以理解的是,在首次调用程序模块时,通过存储相对地址与绝对地址的对应关系,使得再次调用程序模块时,能够直接获取到与相对地址对应的绝对地址,提升了绝对地址的获取效率。
步骤103、从绝对地址与执行环境之间的第二对应关系中,得到与目标绝对地址对应的第二执行环境。
在本申请实施例中,程序模块处理设备能够获取到绝对地址与执行环境之间的第二对应关系;这里,程序模块处理设备将获得的目标绝对地址与第二对应关系中的每个绝对地址进行匹配,并将匹配出的绝对地址对应的执行环境确定为第二程序模块的执行环境,并将第二程序模块的执行环境称为第二执行环境。
需要说明的是,第二对应关系表示每个绝对地址与每个执行环境之间的对应关系,以及绝对地址与执行环境是一一对应的关系;当给定一个绝对地址时,能够从第二对应关系中匹配出一个对应的执行环境。
步骤104、从第二执行环境中获取与调用请求对应的待调用内容。
需要说明的是,由于第二执行环境为第二程序模块的执行环境,包括第二程序模块的变量、函数和操作符等上下文执行环境;从而,程序模块处理设备能够从第二执行环境中获取到与调用请求对应的待调用内容。其中,待调用内容可以为第二程序模块的执行结果,还可以为第二程序模块中的函数执行结果,又可以为第二程序模块中非函数变量的赋值信息,等等,本申请实施例对此不作限定。
步骤105、基于待调用内容执行第二程序模块。
在本申请实施例中,程序模块处理设备获得了待调用内容之后,就可以执行第二程序模块,完成第二程序模块对第一程序模块的调用。其中,程序模块处理设备可以是基于待调用内容开始执行第二程序模块,还可以是基于待调用内容继续执行第二程序模块,等等,本申请实施例对此不作限定。
可以理解的是,由于在第一程序模块的第一执行环境中,预先存储了第二程序模块的目标相对地址对应的目标绝对地址;因此,在第一程序模块调用第二程序模块时,能够基于调用请求中的目标相对地址,从第一执行环境中获取到对应的目标绝对地址;又由于预先存储了与目标绝对地址对应的第二执行环境,从而,能够基于目标绝对地址访问到第二执行环境,实现第一程序模块对第二程序模块的调用;由于上述第一程序模块调用第二程序模块的过程是通过访问第二程序模块的第二执行环境实现的,因此,实现了基于程序模块的执行环境访问该程序模块的处理,能够提升程序模块的调用效率。另外,由于每个程序模块对应一个与其他程序模块的执行环境独立的执行环境,降低了程序模块之间执行环境的耦合性,使得基于程序模块的执行环境能够实现对程序模块的安全调用,也降低了对全局执行环境的信息覆盖率,进而能够提升调用的正确性。
参见图6,图6是本申请实施例提供的程序模块处理方法的流程示意图二,其中,图6中各步骤的执行主体是程序模块处理设备;如图6所示,在本申请实施例中,程序模块处理设备从第一对应关系中,得到与目标相对地址对应的目标绝对地址之前,该程序模块处理方法还包括步骤106至步骤108,下面对各步骤分别进行说明。
步骤106、响应于针对第二程序模块的加载请求,执行第二程序模块,得到第二执行环境。
在本申请实施例中,当程序模块处理设备在执行第一程序模块,而第一程序模块的执行待调用第二程序模块时,如果从第一对应关系中未获取到与目标相对地址对应的目标绝对地址,则生成针对第二程序模块的加载请求;或者,程序模块处理设备基于第二程序模块与第一程序模块的调用关系,确定在执行第二程序模块时存在调用第一程序模块的情况下,生成针对第二程序模块的加载请求,以实现对第二程序模块的预先加载。这里,程序模块处理设备响应于针对第二程序模块的加载请求,开始执行第二程序模块的加载;首先,程序模块处理设备执行第二程序模块,以生成第二程序模块的执行环境,也就获得了第二执行环境。
可以理解的是,程序模块处理设备基于第二程序模块与第一程序模块的调用关系,预先加载第二程序模块以获得第二程序模块的第二执行环境;使得在调用第二程序模块时,能够快速获得第二程序模块的第二执行环境,进而提升程序模块的调用效率。
在本申请实施例中,程序模块处理设备响应于针对第二程序模块的加载请求,执行第二程序模块,得到第二执行环境,包括:程序模块处理设备响应于针对第二程序模块的加载请求,执行第二程序模块,得到第二程序模块对应的模块属性;在第二程序模块的指定执行环境的写标识为可写标识时,基于模块属性生成第二执行环境。
需要说明的是,在针对第二程序模块的加载请求中,包括用于生成第二程序模块的执行环境的指定执行环境;从而,当程序模块处理设备执行第二程序模块,获得了第二程序模块对应的模块属性之后,将获得的模块属性存储至指定执行环境中;以及,程序模块处理设备在指定执行环境的写标识为可写标识时才将模块属性存储至指定执行环境,以生成第二执行环境。易知,存储了模块属性的指定执行环境即为第二执行环境。其中,可写标识表示指定执行环境处于可写状态。
可以理解的是,通过写标识对执行环境进行写控制,使得在加载阶段才能够修改执行环境,使得执行环境的属性与程序模块的属性一致,提升了程序模块调用的安全性。
在本申请实施例中,程序模块处理设备基于模块属性生成第二执行环境,包括:程序模块处理设备将模块属性中的函数类型属性,存储至指定执行环境中;并将模块属性中的非函数类型属性,存储至指定执行环境的指定属性中;最后将存储函数类型属性的指定执行环境、以及存储非函数类型属性的指定属性,确定为第二执行环境。
相应地,当待调用内容为第二程序模块中非函数变量的赋值信息时,步骤104中程序模块处理设备从第二执行环境中获取与调用请求对应的待调用内容,包括:当调用请求的待赋值属性属于第二执行环境中的指定属性时,程序模块处理设备将调用请求的待赋值信息赋值于待赋值属性,得到待调用内容;而当待赋值属性不属于指定属性时,生成赋值错误信息;显示赋值错误信息。
可以理解的是,通过将模块属性中的函数类型属性存储至指定执行环境,而将模块属性中的非函数类型属性存储至指定执行环境的指定属性中,使得程序模块处理设备进行属性赋值时,能够在待赋值的非函数类型属性不存在时,结束属性赋值,实现对第二执行环境的写控制。
步骤107、将第二程序模块的目标相对地址与目标绝对地址进行对应存储,得到第一对应关系。
在本申请实施例中,程序模块处理设备将第二程序模块的目标相对地址与目标绝对地址进行对应存储,得到第一对应关系,包括:程序模块处理设备将目标相对地址与当前第一对应关系中的每个相对地址进行匹配;当匹配结果表示当前第一对应关系中不包括目标相对地址时,将第二程序模块的目标相对地址与目标绝对地址对应存储至当前第一对应关系,得到第一对应关系。
需要说明的是,在存储目标相对地址和目标绝对地址之前,第一程序模块的第一执行环境中的相对地址与绝对地址之间的关系为当前第一对应关系;程序模块处理设备将第二程序模块的目标相对地址与当前第一对应关系中的每个相对地址进行匹配,以判断当前第一对应关系中是否存在与目标相对地址相同的相对地址。当匹配结果表示当前第一对应关系中不包括目标相对地址时,表明当前第一对应关系中不存在与目标相对地址相同的相对地址;此时,程序模块处理设备将第二程序模块的目标相对地址与目标绝对地址对应存储至当前第一对应关系,完成目标相对地址与目标绝对地址的对应存储的当前第一对应关系即为第一对应关系。
在本申请实施例中,程序模块处理设备将目标相对地址与当前第一对应关系中的每个相对地址进行匹配之后,该程序模块处理方法还包括:当匹配结果表示当前第一对应关系中包括目标相对地址时,将当前第一对应关系中与目标相对地址匹配的相对地址进行重命名,得到与当前第一对应关系对应的待存储第一对应关系;并将目标相对地址重命名为待存储相对地址,并将待存储相对地址与目标绝对地址对应存储至待存储第一对应关系,得到第一对应关系。相应地,步骤102中程序模块处理设备从第一对应关系中,得到与目标相对地址对应的目标绝对地址,包括:当基于目标相对地址从第一对应关系获取绝对地址失败时,获取目标相对地址的待存储相对地址,并从第一对应关系中,得到与待存储相对地址对应的目标绝对地址。
需要说明的是,当匹配结果表示当前第一对应关系中包括目标相对地址时,表明当前第一对应关系中存在与目标相对地址相同的相对地址;此时,程序模块处理设备将当前第一对应关系中与目标相对地址匹配的相对地址进行重命名,其中,针对与目标相对地址匹配的相对地址完成重命名之后的当前第一对应关系,即为待存储第一对应关系;待存储相对地址为目标相对地址重命名后的结果;这里,程序模块处理设备所存储的为待存储相对地址与目标绝对地址的对应关系,完成待存储相对地址与目标绝对地址的对应存储的当前第一对应关系即为第一对应关系。另外,程序模块处理设备可以基于绝对地址重命名相对地址,以使相同的相对地址区别开。
可以理解的是,程序模块处理设备在存储目标相对地址和目标绝对地址时,通过判断当前第一对应关系中是否已存在相同的相对地址,实现了相对地址的冲突处理,能够提升程序模块调用的准确性和稳定性。
步骤108、将第二程序模块的目标绝对地址与第二执行环境进行对应存储,得到第二对应关系。
在本申请实施例中,程序模块处理设备还用于对应存储目标绝对地址与第二执行环境,完成目标绝对地址与第二执行环境的对应存储之后,所获得的表示绝对地址与执行环境之间的对应关系即为第二对应关系。
在本申请实施例中,步骤106之后还包括开启写保护的处理;也就是说,程序模块处理设备响应于针对第二程序模块的加载请求,执行第二程序模块,得到第二执行环境之后,该程序模块处理方法还包括:程序模块处理设备将第二执行环境的写标识更新为不可写标识;并在第二执行环境的写标识为不可写标识时,响应于对第二执行环境的属性更新请求,生成属性更新失败信息;最后,显示属性更新失败信息。
需要说明的是,不可写标识表示第二执行环境处于不可写状态;在第二执行环境的写标识为不可写标识时,禁止更新第二执行环境;从而,在第二执行环境的写标识为不可写标识时,如果接收到对第二执行环境的属性更新请求,那么生成属性更新失败信息,以通过生成属性更新失败信息提示第二执行环境当前禁止更新。这里,可以通过显示属性更新失败信息提示第二执行环境当前禁止更新,还可以通过播放属性更新失败信息提示第二执行环境当前禁止更新,等等,本申请实施例对此不作限定。
在本申请实施例中,步骤106中程序模块处理设备响应于针对第二程序模块的加载请求,执行第二程序模块,得到第二执行环境,包括:程序模块处理设备响应于针对第二程序模块的加载请求,在第二程序模块中增加指定加载方法;并响应于指定加载方法的增加,检测指定加载方法在第二程序模块的调用位置;当调用位置为第二程序模块的最外层时,执行第二程序模块,得到第二执行环境。而当调用位置为第二程序模块的内部时,生成调用错误信息。
需要说明的是,指定加载方法是指加载第二程序模块的功能方法;程序模块处理设备将指定加载方法限定在第二程序模块的最外侧,以实现对第二程序模块中的属性的调用保护,进而实现了对第二程序模块的局部变量的调用保护。
在本申请实施例中,步骤108中程序模块处理设备将第二程序模块的目标绝对地址与第二执行环境进行对应存储,得到第二对应关系之后,该程序模块处理方法还包括:程序模块处理设备将第二对应关系同步至第三方访问区域中;并响应于对第二程序模块的第三方调用请求,从第三方访问区域中获取第二执行环境;基于第二执行环境调用第二程序模块。
需要说明的是,第三方访问区域用于第三方的程序模块调用处理,通过将第二对应关系同步至第三方访问区域,使得第三方通过第三方访问区域中的模块环境实现对程序模块的访问,提升程序模块访问的兼容性。
参见图7,图7是本申请实施例提供的程序模块处理方法的流程示意图三,其中,图7中各步骤的执行主体是程序模块处理设备;如图7所示,在本申请实施例中,步骤101之前还包括步骤109和步骤110;也就是说,程序模块处理设备响应于第一程序模块对第二程序模块的调用请求,获得第二程序模块的目标相对地址之前,该程序模块处理方法还包括步骤109和步骤110,下面对各步骤分别进行说明。
步骤109、响应于第一程序模块的访问请求,在第一执行环境中查找所请求调用的请求信息。
步骤110、当在第一执行环境中查找请求信息失败时,将访问请求确定为第一程序模块对第二程序模块的调用请求。
需要说明的是,程序模块处理设备在响应第一程序模块的访问请求时,先在自身执行环境(即为第一执行环境)中查找访问请求所请求调用的请求信息,以基于查找结果进行第二程序模块的调用。
可以理解的是,可以在第一程序模块的第一执行环境中存储常用调用信息,使得在调用其他程序模块时,通过访问自身执行环境就能够实现程序模块的调用,进而能够提升调用效率。
相应地,步骤101可通过步骤1011实现;也就是说,程序模块处理设备响应于第一程序模块对第二程序模块的调用请求,获得第二程序模块的目标相对地址,包括步骤1011,下面对该步骤进行说明。
步骤1011、响应于第一程序模块对第二程序模块的调用请求,将请求信息确定为第二程序模块的目标相对地址。
在本申请实施例中,当程序模块处理设备在第一执行环境中未查找到请求信息时,表明在第一执行环境中查找请求信息失败,并确定该访问请求所请求访问的请求信息为相对地址;从而,程序模块处理设备将访问请求确定为第一程序模块对第二程序模块的调用请求,并将请求信息确定为第二程序模块的目标相对地址。
在本申请实施例中,程序模块处理设备将第二执行环境的写标识更新为不可写标识之后,该程序模块处理方法还包括:程序模块处理设备响应于对写标识的开启操作,将写标识更新为可写标识;并当写标识为可写标识时,将待写属性更新至第二执行环境中。
可以理解的是,通过写标识控制第二执行环境的数据更新;使得在接收到开启操作时,能够通过更改写标识以实现对第二执行环境的数据更新,提升了执行环境写处理的灵活性。
在本申请实施例中,各个执行环境之间是独立的,程序模块处理设备可以为各个执行环境确定至少一个全局模块环境;其中,至少一个全局模块环境是嵌套结构,从而能够降低对全局模块环境的影响。
下面,将说明本申请实施例在一个实际的应用场景中的示例性应用。该示例性应用描述了游戏应用中Lua模块间的调用过程。
需要说明的是,各个Lua模块的各个Lua环境(又称为模块环境)之间是独立的,如此,能够提升_G表的抗污染性,还能够通过访问程序模块独立的模块环境来访问该程序模块,提高程序模块的访问效率。
示例性地,参见图8,图8是本申请实施例提供的一种示例性的模块环境结构示意图;如图8所示,该模块环境结构8-1中示例性的示出了三个Lua模块对应的三个独立的Lua环境(模块环境8-11至模块环境8-13);另外,该模块环境结构8-1中还包括全局环境8-14和全局环境8-15(称为至少一个全局模块),其中,全局环境8-14基于业务应用的名称命名(比如,命名为RedEnv),全局环境8-15为_G表,这里,将全局环境8-15赋值给全局环境8-14的元表(Metatable)的索引方法(_Index());当访问模块环境中的元素时,如果模块环境中没有该元素,则检测该模块环境中是否有元表,如果有,则调用元表的索引方法来返回数据。
可以理解的是,由于每个的Lua环境是独立存在的,从而未限定本地的变量(不加Local的变量)的作用域也在对应的Lua环境中;比如,Lua模块A中包括一个未限定本地的变量α,由于Lua模块B和Lua模块A分别对应的Lua环境之间是独立的,故Lua模块B模块通过“A.α”访问A模块中的变量α;所以,能够明确Lua模块中变量的归属。
需要说明的是,Lua语言中加载文件的方法(Loadfile方法)所包括的参数中,包括用于指定模块环境的参数,从而通过该参数能够为每个加载的程序模块确定独立的模块环境。Lua语言中还包括向指定模块环境存数据的方法(Xpcall方法),可以执行加载文件的方法所返回的数据(Chunk Function)。本申请实施例通过加载文件的方法和向指定模块环境存数据的方法,实现为每个程序模块确定独立模块环境的程序模块加载方法(自定义的Require方法,以下所描述的程序模块加载方法均为自定义的Require方法);该程序模块加载方法覆盖原生的将全局环境作为程序模块的模块环境的程序模块加载方法(原生Require方法)。其中,程序模块加载方法用于加载一个Lua模块,并执行该Lua模块中的程序代码,以获得该Lua模块的模块环境。
参见图9,图9是本申请实施例提供的一种示例性的模块加载流程图;如图9所示,该模块加载过程包括步骤201至步骤207,下面对各步骤分别进行说明。
步骤201、开始加载Lua模块(称为第二程序模块)。
需要说明的是,当采用程序模块加载方法加载Lua模块时,在Lua模块的最外层使用该程序模块加载方法,以实现对程序模块的保护,提升程序模块的调用安全。从而,对程序模块加载方法在Lua模块的位置进行检测;在检测时,可以通过Lua语言中的调试功能(比如,debug.getinfo)确定程序模块加载方法在Lua模块的行号,当调试功能返回的参数结果(Lastlinedefined和Linedefined)小于等于0时,说明程序模块加载方法是在函数中调用的,返回加载位置错误信息;否则执行加载处理。
示例性地,参见图10,图10是本申请实施例提供的一种示例性的加载函数的应用示意图;如图10所示,加载函数10-1(Require)应用在待加载模块10-2(Maaa.Biii.Login.LoginModel LoginModel.……)的最外层。
步骤202、加载Lua模块。
需要说明的是,通过Loadfile方法加载Lua模块。
步骤203、为Lua模块生成独立的模块环境(称为第二执行环境)。
需要说明的是,通过执行Xpcall方法为所加载的Lua模块生成独立的模块环境。
步骤204、注册Lua模块的长短包名对应关系(称为第一对应关系)。
需要说明的是,将Loadfile方法传入的指定模块环境封装为独立的模块环境,比如记录为RedModuleEnv;RedModuleEnv包括用于注册Lua模块的长短包名对应关系的方法(比如RegModuleToParentModule方法),从而将所加载的Lua模块的长短包名对应的键值对存入调用者(称为第一程序模块)的长短包名对应表里;其中,调用者是指调用Lua模块的程序模块,调用者的长短包名对应表位于调用者的RedModuleEnv中;另外,长包名是指完整包名,比如,A.B.C.D;短包名是指Lua模块的名称,比如,D;从而,调用者的长短包名对应表中记录着与D对应的A.B.C.D。
在本申请实施例中,RegModuleToParentModule方法还用于进行长短包名冲突处理;当调用者的长短包名对应表中已包括待存入的短包名时,将长短包名对应表中已有的该短包名自动替换成长包名以下划线衔接的形式。比如,当向长短包名对应表中注册对应着长包名A.B.C.D短包名D时,确定长短包名对应表中已经包括短包名D,对应着长报名M.N.O.D,此时,将长短包名对应表中的该短包名命名为M_N_O_D,而将待存储的短包名D重命名为A_B_C_D。
步骤205、记录Lua模块的全量属性名。
需要说明的是,记录Lua模块的全量属性名,用于进行加载的后处理。后处理是指遍历加载得到的模块环境,将得到的非函数类型的属性记录到预设属性(_All_Fields_,称为指定属性)中,其中,Lua模块的模块环境RedModuleEnv包括预设属性_All_Fields_。
步骤206、为Lua模块开启写保护机制。
需要说明的是,在完成加载后,对Lua模块的模块环境RedModuleEnv开启写保护机制,将模块环境RedModuleEnv对应的预设写控制属性(Writable)设置为不可写标识(False)。另外,模块环境RedModuleEnv的元表中的新索引方法(_NewIndex方法),通过检测函数(Newindex4RedModule函数,Index4R)检测预设写控制属性是否为可写标识(True),如果为可写标识则针对模块环境创建新属性并对创建的新属性进行赋值,如果为不可写标识则报错。
可以理解的是,在Lua模块加载结束之后,禁止对模块环境进行修订,使得加载后的模块环境与Lua模块中定义数据一致,提升了Lua模块的调用安全性。
步骤207、结束Lua模块的加载。
在本申请实施例中,完成加载后的Lua模块,可以直接通过该Lua模块的短包名访问;比如,加载了Lua模块“A.B.C.D”后,可以直接使用“D.xxx”调用该Lua模块。参见图11,图11是本申请实施例提供的一种示例性的模块调用示意图;如图11所示,该示例性的模块调用过程包括步骤301至步骤310,下面对各步骤分别进行说明。
步骤301、开始调用Lua模块。
步骤302、获取待调用变量名。
步骤303、判断待调用变量名是否在当前模块环境中。若是则执行步骤304,若否则执行步骤305。
步骤304、返回待调用变量名对应的待调用变量。之后执行步骤310。
步骤305、基于待调用短包名(称为目标相对地址)在长短包对应表中进行查找。
需要说明的是,当待调用变量名不在当前模块环境中时,确定待调用变量名为待调用短包名;从而,基于待调用短包名在长短包对应表中进行查找。
步骤306、判断是否查找到与待调用短包名对应的目标长包名(称为目标绝对地址)。若是则执行步骤308,若否则执行步骤307。
步骤307、报错。之后执行步骤310。
步骤308、基于目标长包名查找模块加载表。
步骤309、返回查找到的目标模块环境。
步骤310、结束Lua模块的调用。
需要说明的是,针对模块环境还包括属性赋值处理;比如,在调用Lua模块的过程中,针对模块环境进行赋值处理。参见图12,图12是本申请实施例提供的一种示例性的属性赋值的流程图;如图12所示,示例性的属性赋值的过程包括步骤401至步骤409,下面对各步骤分别进行说明。
步骤401、开始属性赋值。
步骤402、判断待赋值属性是否为局部变量。若是则执行步骤403,若否则执行步骤404。
步骤403、对局部变量进行赋值。之后执行步骤409。
步骤404、判断模块环境中是否包括待赋值属性。若是则执行步骤405,若否则执行步骤406。
步骤405、对模块环境中的待赋值属性进行赋值。之后执行步骤409。
步骤406、判断模块环境中的预设属性中是否包括待赋值属性。若是则执行步骤407,若否则执行步骤408。
需要说明的是,调用新索引方法_NewIndex方法在预设属性_All_Fields_中查找待赋值属性,以判断预设属性中是否包括待赋值属性。
步骤407、对预设属性中的待赋值属性进行赋值。之后执行步骤409。
步骤408、赋值报错。
需要说明的是,如果创建一个局部变量而未包括本地限制标识(Local),将触发限制检查,因为没有加本地限制标识的变量将被写入模块环境中,而模块环境中查找不到该变量的初始定义,于是就会触发报错。
参见图13,图13是本申请实施例提供的一种示例性的局部变量检测示意图;如图13所示,在函数13-1(NormallizeBPAsset(assetName))中,针对变量13-11(tSplitStr)进行是否包括本地限制标识的检查,当否时,执行函数13-1则会收到报错;图13中变量13-11包括本地限制标识,故允许执行。
步骤409、结束属性赋值。
可以理解的是,当加载Lua模块时,对待加载的Lua模块赋予独立的模块环境,并在加载该Lua模块的父Lua模块的模块环境中存储该Lua模块的长包名与短包名的对应关系,以及将加载好的该Lua模块以长包名对应模块环境的形式存储在模块加载表中;从而,当使用短包名进行Lua模块访问时,调用该Lua模块的父Lua模块的元表中的索引方法(_Index方法),以从父Lua模块的模块环境中的长短包名对应表中取得该短包名对应的长包名,然后根据长包名在模块加载映射表中获取到该Lua模块的模块环境,从而就能够访问到该模块环境中的内容。另外,模块环境的元表中的新索引方法用于进行属性检查,当往模块环境中插入新的变量或方法时,将触发该属性检查,如果是在Lua模块加载期则允许插入,如果是在Lua模块运行期则报错,以使得Lua模块运行时与Lua模块声明时的内容一致。本申请实施例所实现的模块环境间的关系结构,能够降低对Lua语言全局环境的影响,提升Lua模块的访问效率。
下面继续说明本申请实施例提供的程序模块处理装置455的实施为软件模块的示例性结构,在一些实施例中,如图4所示,存储在存储器450的程序模块处理装置455中的软件模块可以包括:
请求响应模块4551,用于响应于第一程序模块对第二程序模块的调用请求,获得所述第二程序模块的目标相对地址,其中,所述第一程序模块的执行环境为第一执行环境,所述第一执行环境包括相对地址与绝对地址之间的第一对应关系;
地址查询模块4552,用于从所述第一对应关系中,得到与所述目标相对地址对应的目标绝对地址;
环境查询模块4553,用于从绝对地址与执行环境之间的第二对应关系中,得到与所述目标绝对地址对应的第二执行环境;
内容获取模块4554,用于从所述第二执行环境中获取与所述调用请求对应的待调用内容;
程序执行模块4555,用于基于所述待调用内容执行所述第二程序模块。
在本申请实施例中,所述程序模块处理装置455还包括程序加载模块4556,用于响应于针对所述第二程序模块的加载请求,执行所述第二程序模块,得到所述第二执行环境;将所述第二程序模块的所述目标相对地址与所述目标绝对地址进行对应存储,得到所述第一对应关系;将所述第二程序模块的所述目标绝对地址与所述第二执行环境进行对应存储,得到所述第二对应关系。
在本申请实施例中,所述程序加载模块4556,还用于将所述第二执行环境的写标识更新为不可写标识,其中,所述不可写标识表示所述第二执行环境处于不可写状态;在所述第二执行环境的所述写标识为所述不可写标识时,响应于对所述第二执行环境的属性更新请求,生成属性更新失败信息;显示所述属性更新失败信息。
在本申请实施例中,所述程序加载模块4556,还用于响应于针对所述第二程序模块的所述加载请求,执行所述第二程序模块,得到所述第二程序模块对应的模块属性;在所述第二程序模块的指定执行环境的写标识为可写标识时,基于所述模块属性生成所述第二执行环境,其中,所述可写标识表示所述指定执行环境处于可写状态。
在本申请实施例中,所述程序加载模块4556,还用于将所述模块属性中的函数类型属性,存储至所述指定执行环境中;将所述模块属性中的非函数类型属性,存储至所述指定执行环境的指定属性中;将存储所述函数类型属性的所述指定执行环境、以及存储所述非函数类型属性的所述指定属性,确定为所述第二执行环境。
在本申请实施例中,所述内容获取模块4554,还用于当所述调用请求的待赋值属性属于所述第二执行环境中的所述指定属性时,将所述调用请求的待赋值信息赋值于所述待赋值属性,得到所述待调用内容。
在本申请实施例中,所述内容获取模块4554,还用于当所述待赋值属性不属于所述指定属性时,生成赋值错误信息;显示所述赋值错误信息。
在本申请实施例中,所述程序加载模块4556,还用于将所述目标相对地址与当前第一对应关系中的每个相对地址进行匹配;当匹配结果表示所述当前第一对应关系中不包括所述目标相对地址时,将所述第二程序模块的所述目标相对地址与所述目标绝对地址对应存储至所述当前第一对应关系,得到所述第一对应关系。
在本申请实施例中,所述程序加载模块4556,还用于当匹配结果表示所述当前第一对应关系中包括所述目标相对地址时,将所述当前第一对应关系中与所述目标相对地址匹配的所述相对地址进行重命名,得到与当前第一对应关系对应的待存储第一对应关系;将所述目标相对地址重命名为待存储相对地址,并将所述待存储相对地址与所述目标绝对地址对应存储至所述待存储第一对应关系,得到所述第一对应关系。
在本申请实施例中,所述地址查询模块4552,还用于当基于所述目标相对地址从所述第一对应关系获取绝对地址失败时,获取所述目标相对地址的所述待存储相对地址,并从所述第一对应关系中,得到与所述待存储相对地址对应的所述目标绝对地址。
在本申请实施例中,所述程序加载模块4556,还用于响应于针对所述第二程序模块的加载请求,在所述第二程序模块中增加指定加载方法;响应于所述指定加载方法的增加,检测所述指定加载方法在所述第二程序模块的调用位置;当所述调用位置为所述第二程序模块的最外层时,执行所述第二程序模块,得到所述第二执行环境。
在本申请实施例中,所述请求响应模块4551,还用于响应于所述第一程序模块的访问请求,在所述第一执行环境中查找所请求调用的请求信息。
在本申请实施例中,所述请求响应模块4551,还用于当在所述第一执行环境中查找所述请求信息失败时,将所述访问请求确定为所述第一程序模块对所述第二程序模块的所述调用请求;响应于所述调用请求,将所述请求信息确定为所述第二程序模块的所述目标相对地址。
在本申请实施例中,所述程序模块处理装置455还包括关系同步模块4557,用于将所述第二对应关系同步至第三方访问区域中;响应于对所述第二程序模块的第三方调用请求,从所述第三方访问区域中获取所述第二执行环境;基于所述第二执行环境调用所述第二程序模块。
本申请实施例提供了一种计算机程序产品,该计算机程序产品包括计算机可执行指令或者计算机程序,该计算机可执行指令或者计算机程序存储在计算机可读存储介质中。程序模块处理设备的处理器从计算机可读存储介质读取该计算机可执行指令或者计算机程序,处理器执行该计算机可执行指令或者计算机程序,使得该程序模块处理设备执行本申请实施例上述的程序模块处理方法。
本申请实施例提供一种计算机可读存储介质,其中存储有计算机可执行指令或者计算机程序,当计算机可执行指令或者计算机程序被处理器执行时,将引起处理器执行本申请实施例提供的程序模块处理方法,例如,如图5示出的程序模块处理方法。
在一些实施例中,计算机可读存储介质可以是FRAM、ROM、闪存、磁表面存储器、光盘、或CD-ROM等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
在一些实施例中,计算机可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
作为示例,计算机可执行指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(Hyper TextMarkup Language,HTML)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。
作为示例,计算机可执行指令可被部署为在一个电子设备上执行(此时,这一个电子设备即为程序模块处理设备),或者在位于一个地点的多个电子设备上执行(此时,位于一个地点的多个电子设备即为程序模块处理设备),又或者,在分布在多个地点且通过通信网络互连的多个电子设备上执行(此时,分布在多个地点且通过通信网络互连的多个电子设备即为程序模块处理设备)。
可以理解的是,在本申请实施例中,涉及到程序模块和程序模块调用关系等相关的数据,当本申请实施例运用到具体产品或技术中时,需要获得用户许可或者同意,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
综上所述,本申请实施例由于在第一程序模块的第一执行环境中,预先存储了第二程序模块的目标相对地址对应的目标绝对地址;因此,在第一程序模块调用第二程序模块时,能够基于调用请求中的目标相对地址获取到对应的目标绝对地址;又由于预先存储了与目标绝对地址对应的第二执行环境,从而,能够基于目标绝对地址访问到第二执行环境,实现第一程序模块对第二程序模块的调用;由于上述第一程序模块调用第二程序模块的过程是通过访问第二程序模块的第二执行环境实现的,因此,实现了基于程序模块的执行环境访问该程序模块的处理,能够提升程序模块的调用效率;另外,本申请实施例提供的程序模块处理方法,能够降低对全局执行环境的影响,提升执行环境的访问安全性和准确性。
以上所述,仅为本申请的实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本申请的保护范围之内。
Claims (12)
1.一种程序模块处理方法,其特征在于,所述方法包括:
响应于第一程序模块的访问请求,在第一执行环境中查找所请求调用的请求信息,其中,所述第一程序模块的执行环境为第一执行环境,所述第一执行环境包括相对地址与绝对地址之间的第一对应关系,所述绝对地址是指程序模块的完整地址,包括路径名称和程序模块名称;
当在所述第一执行环境中查找所述请求信息失败时,将所述访问请求确定为所述第一程序模块对第二程序模块的调用请求;
响应于所述第一程序模块对所述第二程序模块的所述调用请求,将所述请求信息确定为所述第二程序模块的目标相对地址;
当从所述第一对应关系中获取到与所述目标相对地址对应的目标绝对地址时, 从绝对地址与执行环境之间的第二对应关系中,得到与所述目标绝对地址对应的第二执行环境,其中,所述第一对应关系中的所述目标相对地址和所述目标绝对地址,是在所述第一程序模块首次调用所述第二程序模块时加载所述第二程序模块而存储的;所述第二对应关系表示每个绝对地址与每个执行环境之间的一一对应关系,所述第二执行环境为所述第二程序模块的执行环境;
当从所述第一对应关系中未获取到与所述目标相对地址对应的目标绝对地址时,生成针对所述第二程序模块的加载请求;响应于所述加载请求,执行所述第二程序模块,得到所述第二程序模块对应的模块属性;在所述第二程序模块的指定执行环境的写标识为可写标识时,将所述模块属性中的函数类型属性,存储至所述指定执行环境中,其中,所述可写标识表示所述指定执行环境处于可写状态;将所述模块属性中的非函数类型属性,存储至所述指定执行环境的指定属性中;将存储所述函数类型属性的所述指定执行环境、以及存储所述非函数类型属性的所述指定属性,确定为所述第二执行环境;
从所述第二执行环境中获取与所述调用请求对应的待调用内容;
基于所述待调用内容执行所述第二程序模块。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
将所述第二程序模块的所述目标相对地址与所述目标绝对地址进行对应存储,得到所述第一对应关系;
将所述第二程序模块的所述目标绝对地址与所述第二执行环境进行对应存储,得到所述第二对应关系。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
将所述第二执行环境的写标识更新为不可写标识,其中,所述不可写标识表示所述第二执行环境处于不可写状态;
在所述第二执行环境的所述写标识为所述不可写标识时,响应于对所述第二执行环境的属性更新请求,生成属性更新失败信息;
显示所述属性更新失败信息。
4.根据权利要求1所述的方法,其特征在于,所述从所述第二执行环境中获取与所述调用请求对应的待调用内容,包括:
当所述调用请求的待赋值属性属于所述第二执行环境中的所述指定属性时,将所述调用请求的待赋值信息赋值于所述待赋值属性,得到所述待调用内容。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
当所述待赋值属性不属于所述指定属性时,生成赋值错误信息;
显示所述赋值错误信息。
6.根据权利要求2所述的方法,其特征在于,所述将所述第二程序模块的所述目标相对地址与所述目标绝对地址进行对应存储,得到所述第一对应关系,包括:
将所述目标相对地址与当前第一对应关系中的每个相对地址进行匹配;
当匹配结果表示所述当前第一对应关系中不包括所述目标相对地址时,将所述第二程序模块的所述目标相对地址与所述目标绝对地址对应存储至所述当前第一对应关系,得到所述第一对应关系。
7.根据权利要求6所述的方法,其特征在于,所述将所述目标相对地址与当前第一对应关系中的每个相对地址进行匹配之后,所述方法还包括:
当匹配结果表示所述当前第一对应关系中包括所述目标相对地址时,将所述当前第一对应关系中与所述目标相对地址匹配的所述相对地址进行重命名,得到与当前第一对应关系对应的待存储第一对应关系;
将所述目标相对地址重命名为待存储相对地址,并将所述待存储相对地址与所述目标绝对地址对应存储至所述待存储第一对应关系,得到所述第一对应关系;
所述从所述第一对应关系中,得到与所述目标相对地址对应的目标绝对地址,包括:
当基于所述目标相对地址从所述第一对应关系获取绝对地址失败时,获取所述目标相对地址的所述待存储相对地址,并从所述第一对应关系中,得到与所述待存储相对地址对应的所述目标绝对地址。
8.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应于所述加载请求,在所述第二程序模块中增加指定加载方法;
响应于所述指定加载方法的增加,检测所述指定加载方法在所述第二程序模块的调用位置;
当所述调用位置为所述第二程序模块的最外层时,执行所述第二程序模块,得到所述第二执行环境。
9.根据权利要求2至8任一项所述的方法,其特征在于,所述将所述第二程序模块的所述目标绝对地址与所述第二执行环境进行对应存储,得到所述第二对应关系之后,所述方法还包括:
将所述第二对应关系同步至第三方访问区域中;
响应于对所述第二程序模块的第三方调用请求,从所述第三方访问区域中获取所述第二执行环境;
基于所述第二执行环境调用所述第二程序模块。
10.一种程序模块处理装置,其特征在于,所述装置包括:
请求响应模块,用于响应于第一程序模块的访问请求,在第一执行环境中查找所请求调用的请求信息,其中,所述第一程序模块的执行环境为第一执行环境,所述第一执行环境包括相对地址与绝对地址之间的第一对应关系,所述绝对地址是指程序模块的完整地址,包括路径名称和程序模块名称;当在所述第一执行环境中查找所述请求信息失败时,将所述访问请求确定为所述第一程序模块对第二程序模块的调用请求;响应于所述第一程序模块对所述第二程序模块的所述调用请求,将所述请求信息确定为所述第二程序模块的目标相对地址;
环境查询模块,用于当从所述第一对应关系中获取到与所述目标相对地址对应的目标绝对地址时,从绝对地址与执行环境之间的第二对应关系中,得到与所述目标绝对地址对应的第二执行环境,其中,所述第一对应关系中的所述目标相对地址和所述目标绝对地址,是在所述第一程序模块首次调用所述第二程序模块时加载所述第二程序模块而存储的;所述第二对应关系表示每个绝对地址与每个执行环境之间的一一对应关系,所述第二执行环境为所述第二程序模块的执行环境;
程序加载模块,用于当从所述第一对应关系中未获取到与所述目标相对地址对应的目标绝对地址时,生成针对所述第二程序模块的加载请求;响应于所述加载请求,执行所述第二程序模块,得到所述第二程序模块对应的模块属性;在所述第二程序模块的指定执行环境的写标识为可写标识时,将所述模块属性中的函数类型属性,存储至所述指定执行环境中,其中,所述可写标识表示所述指定执行环境处于可写状态;将所述模块属性中的非函数类型属性,存储至所述指定执行环境的指定属性中;将存储所述函数类型属性的所述指定执行环境、以及存储所述非函数类型属性的所述指定属性,确定为所述第二执行环境;
内容获取模块,用于从所述第二执行环境中获取与所述调用请求对应的待调用内容;
程序执行模块,用于基于所述待调用内容执行所述第二程序模块。
11.一种用于程序模块处理的电子设备,其特征在于,所述电子设备包括:
存储器,用于存储计算机可执行指令或者计算机程序;
处理器,用于执行所述存储器中存储的计算机可执行指令或者计算机程序时,实现权利要求1至9任一项所述的程序模块处理方法。
12.一种计算机可读存储介质,存储有计算机可执行指令或者计算机程序,其特征在于,所述计算机可执行指令或者计算机程序被处理器执行时,实现权利要求1至9任一项所述的程序模块处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311193109.7A CN117076010B (zh) | 2023-09-15 | 2023-09-15 | 程序模块处理方法、装置、设备及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311193109.7A CN117076010B (zh) | 2023-09-15 | 2023-09-15 | 程序模块处理方法、装置、设备及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117076010A CN117076010A (zh) | 2023-11-17 |
CN117076010B true CN117076010B (zh) | 2024-01-19 |
Family
ID=88709882
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311193109.7A Active CN117076010B (zh) | 2023-09-15 | 2023-09-15 | 程序模块处理方法、装置、设备及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117076010B (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8621606B1 (en) * | 2007-12-31 | 2013-12-31 | Symantec Corporation | Systems and methods for identifying external functions called by untrusted applications |
CN105700913A (zh) * | 2015-12-30 | 2016-06-22 | 广东工业大学 | 一种轻量级裸片代码的创建及并行运行方法 |
CN107704464A (zh) * | 2016-08-08 | 2018-02-16 | 北京国双科技有限公司 | 解析静态资源的路径的方法及装置 |
CN108241516A (zh) * | 2018-02-09 | 2018-07-03 | 深圳科立讯通信有限公司 | 嵌入式系统程序加载方法、装置、计算机设备和存储介质 |
CN111666210A (zh) * | 2020-05-20 | 2020-09-15 | 新华三半导体技术有限公司 | 一种芯片验证方法及装置 |
US10929122B1 (en) * | 2019-10-23 | 2021-02-23 | Microsoft Technology Licensing, Llc | Modifying program modules in running applications |
CN112631684A (zh) * | 2020-12-30 | 2021-04-09 | 北京元心科技有限公司 | 可执行程序的运行方法、装置、电子设备及计算机存储介质 |
CN113282375A (zh) * | 2021-07-21 | 2021-08-20 | 武汉天喻信息产业股份有限公司 | 一种虚拟机数据访问方法、装置和计算机可读存储介质 |
CN113608742A (zh) * | 2021-07-08 | 2021-11-05 | 阿里巴巴新加坡控股有限公司 | 检测方法、代码包处理方法、运行控制方法及计算设备 |
CN115248919A (zh) * | 2021-04-27 | 2022-10-28 | 腾讯科技(深圳)有限公司 | 一种函数接口的调用方法、装置、电子设备及存储介质 |
-
2023
- 2023-09-15 CN CN202311193109.7A patent/CN117076010B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8621606B1 (en) * | 2007-12-31 | 2013-12-31 | Symantec Corporation | Systems and methods for identifying external functions called by untrusted applications |
CN105700913A (zh) * | 2015-12-30 | 2016-06-22 | 广东工业大学 | 一种轻量级裸片代码的创建及并行运行方法 |
CN107704464A (zh) * | 2016-08-08 | 2018-02-16 | 北京国双科技有限公司 | 解析静态资源的路径的方法及装置 |
CN108241516A (zh) * | 2018-02-09 | 2018-07-03 | 深圳科立讯通信有限公司 | 嵌入式系统程序加载方法、装置、计算机设备和存储介质 |
US10929122B1 (en) * | 2019-10-23 | 2021-02-23 | Microsoft Technology Licensing, Llc | Modifying program modules in running applications |
CN111666210A (zh) * | 2020-05-20 | 2020-09-15 | 新华三半导体技术有限公司 | 一种芯片验证方法及装置 |
CN112631684A (zh) * | 2020-12-30 | 2021-04-09 | 北京元心科技有限公司 | 可执行程序的运行方法、装置、电子设备及计算机存储介质 |
CN115248919A (zh) * | 2021-04-27 | 2022-10-28 | 腾讯科技(深圳)有限公司 | 一种函数接口的调用方法、装置、电子设备及存储介质 |
CN113608742A (zh) * | 2021-07-08 | 2021-11-05 | 阿里巴巴新加坡控股有限公司 | 检测方法、代码包处理方法、运行控制方法及计算设备 |
CN113282375A (zh) * | 2021-07-21 | 2021-08-20 | 武汉天喻信息产业股份有限公司 | 一种虚拟机数据访问方法、装置和计算机可读存储介质 |
Non-Patent Citations (1)
Title |
---|
Fortran源程序在Windows OOP环境下的应用;许庆国等;计算机工程(第09期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN117076010A (zh) | 2023-11-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11915016B2 (en) | System and method for identifying, indexing, and navigating to deep states of mobile applications | |
CN110389829B (zh) | 多租户环境中扩展对象的分类与分发 | |
US20090007081A1 (en) | System and Method of Generating Applications for Mobile Devices | |
CN108681563B (zh) | 基于一表多用户的服务发布及访问系统 | |
US9935997B2 (en) | System for transforming mobile app into addressable network for stateless access | |
CN112149109A (zh) | 模块化权限控制管理方法及系统 | |
CN111385633A (zh) | 一种基于语音的资源搜索方法、智能终端及存储介质 | |
CN108763084A (zh) | 一种测试用例的生成方法、装置及电子设备 | |
Bell | Introducing the MySQL 8 document store | |
CN117112060A (zh) | 组件库构建方法、装置、电子设备及存储介质 | |
CN116560683A (zh) | 软件更新方法、装置、设备及存储介质 | |
CN110750434A (zh) | 接口测试方法、装置、电子设备和计算机可读存储介质 | |
CN117076010B (zh) | 程序模块处理方法、装置、设备及计算机可读存储介质 | |
US20060074635A1 (en) | Systems and methods for handling multiple static query modules for distinct environments | |
CN108932121B (zh) | 一种面向多租户分布式服务组件研发的模块及方法 | |
CN105610908B (zh) | 一种基于安卓设备的samba服务实现方法及系统 | |
JP2018045619A (ja) | 解析プログラム、解析方法、及び解析装置 | |
WO2016105354A1 (en) | Simulation of a synchronization of records | |
CN116756184B (zh) | 数据库实例处理方法、装置、设备、存储介质及程序产品 | |
JP2006268124A (ja) | 自動作成システム、及びプログラム | |
CN117573161A (zh) | 应用升级方法、装置、设备、存储介质及程序产品 | |
CN116737275A (zh) | 一种词条修改方法、装置、电子设备及存储介质 | |
CN118567745A (zh) | 一种Vue项目配置方法、装置、电子设备及存储介质 | |
CN118672889A (zh) | 虚拟资源的检查方法和装置、存储介质及电子设备 | |
CN117369900A (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 |