CN108415719A - 代码热更新方法和装置、存储介质、处理器及终端 - Google Patents
代码热更新方法和装置、存储介质、处理器及终端 Download PDFInfo
- Publication number
- CN108415719A CN108415719A CN201810273659.2A CN201810273659A CN108415719A CN 108415719 A CN108415719 A CN 108415719A CN 201810273659 A CN201810273659 A CN 201810273659A CN 108415719 A CN108415719 A CN 108415719A
- Authority
- CN
- China
- Prior art keywords
- code
- language
- intermediate code
- heat
- translated
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/656—Updates while running
-
- 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
- G06F8/44—Encoding
-
- 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/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45508—Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
-
- 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/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
- G06F9/4552—Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM
-
- 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/51—Source to source
-
- 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/52—Binary to binary
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种代码热更新方法和装置、存储介质、处理器及终端。其中,该方法包括:将待热更新的代码翻译成第一类型中间码,其中,所述第一类型中间码采用目标类型操作***的编译器编译;将所述第一类型中间码翻译成待运行的字节码,其中,所述待运行的字节码采用所述目标类型操作***的解释器解释运行;通过所述解释器解释运行所述待运行的字节码,以将所述待热更新的代码进行热更新。本发明解决了相关技术在对C#代码进行热更新时需要在C#代码与脚本语言Lua间进行类型转换,导致执行效率较低的技术问题。
Description
技术领域
本发明涉及计算机领域,具体而言,涉及一种代码热更新方法和装置、存储介质、处理器及终端。
背景技术
目前,对于非越狱的IOS操作***不允许数据段可执行权限,通常需要将C#代码转换为一种能够被ARM(英文全称为Advanced RISC Machines)处理器高效解释运行的字节码,以达到通过解释器绕过IOS操作***的限制,实现C#代码的热更新。相关技术通常使用脚本语言Lua实现C#代码的热更新,其中最具有代表性的方案是XLua,XLua为Unity、.Net、Mono等C#环境增加Lua脚本编程的能力。借助XLua,Lua可以方便的和C#相互调用。但是,XLua方案存在以下缺点:
1、执行效率低下,Lua使用动态类型而且几乎没有优化,并且Lua与C#交互时需要转换类型。
2、开发成本高,开发人员需要同时编写Lua和C#代码。
针对相关技术在对C#代码进行热更新时需要在C#代码与脚本语言Lua间进行类型转换,导致执行效率较低的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种代码热更新方法和装置、存储介质、处理器及终端,以至少解决相关技术在对C#代码进行热更新时需要在C#代码与脚本语言Lua间进行类型转换,导致执行效率较低的技术问题。
根据本发明实施例的一个方面,提供了一种代码热更新方法,包括:将待热更新的代码翻译成第一类型中间码,其中,所述第一类型中间码采用目标类型操作***的编译器编译;将所述第一类型中间码翻译成待运行的字节码,其中,所述待运行的字节码采用所述目标类型操作***的解释器解释运行;通过所述解释器解释运行所述待运行的字节码,以将所述待热更新的代码进行热更新。
进一步地,所述将所述第一类型中间码翻译成待运行的字节码包括:将所述第一类型中间码翻译成第一语言,其中,所述第一语言为C++语言的子集;将所述第一语言翻译成第二类型中间码,其中,所述第二类型中间码用于对所述第一语言进行优化;将所述第二类型中间码翻译成第二语言,其中,所述第二语言为中央处理器指令集的子集;将所述第二语言翻译成所述待运行的字节码。
进一步地,所述将待热更新的代码翻译成第一类型中间码包括:将所述待热更新的代码编译为第三类型中间码,其中,所述第三类型中间码为C#语言的中间码;将所述第三类型中间码翻译成第三语言,其中,所述第三语言为C++语言;将所述第三语言编译成所述第一类型中间码。
进一步地,在所述将待热更新的代码翻译成第一类型中间码之前,所述方法还包括:确定安装在所述目标类型操作***中的待更新的目标应用;将所述待更新的目标应用的部分代码或者全部代码确定为所述待热更新的代码。
根据本发明实施例的另一方面,还提供了一种代码热更新装置,包括:第一翻译单元,用于将待热更新的代码翻译成第一类型中间码,其中,所述第一类型中间码采用目标类型操作***的编译器编译;第二翻译单元,用于将所述第一类型中间码翻译成待运行的字节码,其中,所述待运行的字节码采用所述目标类型操作***的解释器解释运行;热更新单元,用于通过所述解释器解释运行所述待运行的字节码,以将所述待热更新的代码进行热更新。
进一步地,所述第二翻译单元包括:第一翻译模块,用于将所述第一类型中间码翻译成第一语言,其中,所述第一语言为C++语言的子集;第二翻译模块,用于将所述第一语言翻译成第二类型中间码,其中,所述第二类型中间码用于对所述第一语言进行优化;第三翻译模块,用于将所述第二类型中间码翻译成第二语言,其中,所述第二语言为中央处理器指令集的子集;第四翻译模块,用于将所述第二语言翻译成所述待运行的字节码。
进一步地,所述第一翻译单元包括:第一编译模块,用于将所述待热更新的代码编译为第三类型中间码,其中,所述第三类型中间码为C#语言的中间码;第五翻译模块,用于将所述第三类型中间码翻译成第三语言,其中,所述第三语言为C++语言;第二编译模块,用于将所述第三语言编译成所述第一类型中间码。
进一步地,所述装置还包括:第一确定单元,用于在所述将待热更新的代码翻译成第一类型中间码之前,确定安装在所述目标类型操作***中的待更新的目标应用;第二确定单元,用于将所述待更新的目标应用的部分代码或者全部代码确定为所述待热更新的代码。
根据本发明实施例的另一方面,还提供了一种存储介质,所述存储介质包括存储的程序,其中,所述程序运行时执行上述任一项所述的代码热更新方法。
根据本发明实施例的另一方面,还提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行上述任一项所述的代码热更新方法。
根据本发明实施例的另一方面,还提供了一种终端,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项所述的代码热更新方法。
在本发明实施例中,通过将待热更新的代码翻译成第一类型中间码,其中,所述第一类型中间码采用目标类型操作***的编译器编译;将所述第一类型中间码翻译成待运行的字节码,其中,所述待运行的字节码采用所述目标类型操作***的解释器解释运行;通过所述解释器解释运行所述待运行的字节码,以将所述待热更新的代码进行热更新,达到了无需进行代码之间的转换亦可以快速实现代码热更新的目的,从而实现了提高代码热更新的效率的技术效果,进而解决了相关技术在对C#代码进行热更新时需要在C#代码与脚本语言Lua间进行类型转换,导致执行效率较低的技术问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的代码热更新方法的流程图;
图2是根据本发明实施例的C#代码热更新的示意图;以及
图3是根据本发明实施例的代码热更新装置的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、***、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
根据本发明实施例,提供了一种代码热更新的方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机***中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图1是根据本发明实施例的代码热更新方法的流程图,如图1所示,该方法包括如下步骤:
步骤S102,将待热更新的代码翻译成第一类型中间码,其中,所述第一类型中间码采用目标类型操作***的编译器编译;
步骤S104,将所述第一类型中间码翻译成待运行的字节码,其中,所述待运行的字节码采用所述目标类型操作***的解释器解释运行;
步骤S106,通过所述解释器解释运行所述待运行的字节码,以将所述待热更新的代码进行热更新。
通过上述步骤,将待热更新的代码翻译成第一类型中间码,其中,所述第一类型中间码采用目标类型操作***的编译器编译;将所述第一类型中间码翻译成待运行的字节码,其中,所述待运行的字节码采用所述目标类型操作***的解释器解释运行;通过所述解释器解释运行所述待运行的字节码,以将所述待热更新的代码进行热更新,达到了无需进行代码之间的转换亦可以快速实现代码热更新的目的,从而实现了提高代码热更新的效率的技术效果,进而解决了相关技术在对C#代码进行热更新时需要在C#代码与脚本语言Lua间进行类型转换,导致执行效率较低的技术问题。
在步骤S102提供的方案中,待热更新的代码可以为C#代码、C++代码、Objective-C代码、Swift代码、Rust代码等,本发明实施例待热更新的代码的类型不做具体限定,此处本发明以待热更新的代码为C#代码为例进行说明。
需要说明的是,本发明实施例对待热更新的代码的获取方式不做具体限定。
可选地,在将待热更新的代码翻译成第一类型中间码之前,本发明实施例还可以首先获取待热更新的代码,可以包括以下步骤:
步骤S100,确定安装在目标类型操作***中的待更新的目标应用;
步骤S101,将待更新的目标应用的部分代码或者全部代码确定为待热更新的代码。
针对上述步骤S100至步骤S101,需要说明的是,目标类型操作***可以为IOS操作***、Android操作***、Windows操作***等,本发明实施例对目标类型操作***不做具体限定,此处以目标类型操作***为IOS操作***为例进行说明。还需要说明的是,目标类型操作***中可以安装有至少一个应用,其中,本发明实施例对应用的类型不做具体限定,例如游戏应用、即时通信应用、浏览器应用等。至少一个应用中可以包括待更新的目标应用,其中,本发明实施例对待更新的目标应用的类型也不做具体限定,例如目标应用可以为游戏应用、即时通信应用、浏览器应用等。
可选地,对目标应用的更新可以包括但并不限于:对目标应用中的某一个或者多个逻辑功能进行更新、目标应用中增加某一个或者多个逻辑功能、目标应用中删除某一个或者多个逻辑功能等。
可选地,在确定待更新的目标应用之后,本发明实施例可以根据目标应用所需要更新的内容对应地将目标应用中的部分或者全部代码确定为待热更新的代码。例如,假设目标应用中只需要更新某一个逻辑功能,则可以将该需要更新的逻辑功能对应的代码确定为待热更新的代码。
通过步骤S100至步骤S101,本发明实施例可以实现获取到待热更新的代码的目的。在实际应用场景中,本发明实施例还可以采用其他方式获取到待热更新的代码,此处不再一一举例说明。
在获取到待热更新的代码之后,本发明实施例可以将待热更新的代码翻译成第一类型中间码,其中,第一类型中间码可以采用上述目标类型操作***的编译器编译,例如目标类型操作***为IOS***,则第一类型中间码可以为LLVM(英文全称为Low LevelVirtual Machine,底层虚拟机)中间码。
可选地,步骤S102,将待热更新的代码翻译成第一类型中间码可以包括以下步骤:
步骤S1022,将所述待热更新的代码编译为第三类型中间码,其中,所述第三类型中间码为C#语言的中间码;
步骤S1024,将所述第三类型中间码翻译成第三语言,其中,所述第三语言为C++语言;
步骤S1026,将所述第三语言编译成所述第一类型中间码。
需要说明的是,通过上述步骤S1022至步骤S1026,可以实现将待热更新的代码翻译成第一类型中间码的目的。
在一种可选的示例中,待热更新的代码可以为C#代码,本发明实施例可以利用C#语言的编译器Mono将C#语言编译为C#语言的中间码IL(也即第三类型中间码);然后,本发明实施例可以利用IL2CPP将IL翻译成C++98(也即第三语言);然后,本发明实施例可以利用C++编译器Clang将C++98编译成LLVM中间码(也即第一类型中间码)。
需要说明的是,在上述可选示例中所使用的编译工具并不仅限于上述的举例,本发明还可以采用其他编译工具,此处不再一一举例说明。还需要说明的是,将C#代码翻译成LLVM中间码还可以通过其他方式,此处也不再一一举例说明。
本发明实施例通过将待热更新的代码翻译成采用目标类型操作***的编译器编译的第一类型中间码,可以实现对待热更新的代码进行编译的目的。
在步骤S104提供的方案中,在将待热更新的代码翻译成第一类型中间码之后,本发明实施例可以将得到的第一类型中间码翻译成待运行的字节码,其中,该待运行的字节码可以采用上述目标类型操作***的解释器解释运行,以便于通过解释器解释运行该待运行的字节码实现对待热更新的代码进行热更新。
可选地,步骤S104将第一类型中间码翻译成待运行的字节码可以包括以下步骤:
步骤S1042,将第一类型中间码翻译成第一语言,其中,第一语言为C++语言的子集;
步骤S1044,将第一语言翻译成第二类型中间码,其中,第二类型中间码用于对第一语言进行优化;
步骤S1046,将第二类型中间码翻译成第二语言,其中,第二语言为中央处理器指令集的子集;
步骤S1048,将第二语言翻译成待运行的字节码。
需要说明的是,通过上述步骤S1042至步骤S1048,可以实现将第一类型中间码翻译成待运行的字节码的目的。
在一种可选的示例中,待热更新的代码可以为C#代码,通过上述步骤S102可以将C#代码翻译成LLVM中间码。然后,本发明实施例可以将LLVM中间码翻译成第一语言,其中,第一语言可以为C++语言的子集,也就是说,第一语言可以为C++语言的简化版,因此可以使用标准的C++编译器进行编译,例如VC++、G++、Clang等。将LLVM中间码翻译成第一语言,原因是LLVM中间码并不是一个适合直接解释的语言。然后,本发明实施例可以将第一语言翻译成第二类型中间码,可选地,第二类型中间码可以为LISP(计算机程序设计语言)中间码,其中,LISP中间码可以用于优化第一语言,可以包括但并不限于:限制第一语言的文本大小;提高第一语言的代码执行速度。然后,本发明实施例可以将LISP中间码翻译成第二语言,其中,第二语言可以为X64的子集,其中,X64可以为底层中央处理器CPU指令集,第二语言可以为X64的简化版。然后,本发明实施例可以将第二语言翻译成待运行的字节码Bytecode,其中,该待运行的字节码Bytecode可以采用IOS操作***的解释器Interpreter解释运行,以实现C#代码的热更新。
需要说明的是,在上述可选示例中所使用的编译工具并不仅限于上述的举例,本发明还可以采用其他编译工具,此处不再一一举例说明。还需要说明的是,将LLVM中间码翻译成待运行的字节码Bytecode还可以通过其他方式,此处也不再一一举例说明。
本发明实施例通过将待热更新的代码翻译成采用目标类型操作***的编译器编译的第一类型中间码,然后再将第一类型中间码翻译成采用目标类型操作***的解释器解释运行的待运行的字节码,以便于通过解释器解释运行该待运行的字节码实现对待热更新的代码进行热更新的目的。
在步骤S106提供的方案中,在得到待运行的字节码之后,本发明实施例可以通过目标类型操作***中的解释器解释运行该待运行的字节码,以实现将待热更新的代码进行热更新。
在一种可选的示例中,待热更新的代码可以为C#代码,通过上述步骤S102可以将C#代码翻译成LLVM中间码;通过上述步骤S104可以将LLVM中间码翻译成待运行的字节码Bytecode;然后通过解释器Interpreter解释运行待运行的字节码Bytecode,以实现C#代码的热更新。
本发明实施例可以应用于对C#代码进行热更新的场景中。
图2是根据本发明实施例的C#代码热更新过程的示意图,如图2所示,为了实现C#代码的热更新,本发明实施例可以使用C#语言的编译器Mono将C#语言编译为C#语言的中间码IL;然后利用IL2CPP将IL翻译成C++98;然后利用C++编译器Clang将C++98翻译成LLVM;然后将LLVM翻译成C++的简化版,此处称为C++Light(相当于上述实施例中的第一语言),其中,C++Light可以为C++语言的子集,因此可以使用标准的C++编译器进行编译,例如VC++、G++、Clang等。将LLVM翻译成C++Light,原因是LLVM并不是一个适合直接解释的语言;然后可以将C++Light翻译成LISP,其中,LISP可以用于优化第一语言;然后将LISP翻译成X64的简化版,此处称为X64Light;然后将X64Light翻译成待运行的字节码Bytecode;最后通过解释器Interpreter解释运行Bytecode,以实现C#代码的热更新。
通过上述一系列编译和翻译实现了C#代码的解释运行,也即实现了C#代码的热更新。
需要说明的是,本发明可以兼容C++98和C++11,同时也可以兼容C#2.0,C#3.0及C#4.0。因为本发明对LLVM进行了完全的翻译,所以无论什么版本的语言,只要能翻译成LLVM,本发明的解释器就可以运行它,也就可以实现C#代码的热更新。
本发明的核心是实现了一套完整的解释器,并将C#代码通过一系列的翻译转换,得到一个便于ARM高效执行的字节码,通过解释器解释运行,由此实现C#代码的热更新。
本发明具有以下优点:
1、性能高,本发明没有动态内存分配,可以使用静态类型,支持跨语言函数接口(Foreign Function Interface,简称为FFI),即一个语言调用另一种语言的接口,又可通过LLVM进行各种优化。
2、一致性高,本发明只使用C#语言,没有使用第二种语言。
根据本发明实施例,还提供了一种代码热更新装置的装置实施例,需要说明的是,该代码热更新装置可以用于执行本发明实施例中的代码热更新方法,也即本发明实施例中的代码热更新方法可以在该代码热更新装置中执行。
图3是根据本发明实施例的代码热更新装置的示意图,如图3所示,该代码热更新装置可以包括:
第一翻译单元32,用于将待热更新的代码翻译成第一类型中间码,其中,第一类型中间码采用目标类型操作***的编译器编译;第二翻译单元34,用于将第一类型中间码翻译成待运行的字节码,其中,待运行的字节码采用目标类型操作***的解释器解释运行;热更新单元36,用于通过解释器解释运行待运行的字节码,以将待热更新的代码进行热更新。
需要说明的是,该实施例中的第一翻译单元32可以用于执行本发明实施例中的步骤S102,该实施例中的第二翻译单元34可以用于执行本发明实施例中的步骤S104,该实施例中的热更新单元36可以用于执行本发明实施例中的步骤S106。上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。
可选地,第二翻译单元34可以包括:第一翻译模块342,用于将第一类型中间码翻译成第一语言,其中,第一语言为C++语言的子集;第二翻译模块344,用于将第一语言翻译成第二类型中间码,其中,第二类型中间码用于对第一语言进行优化;第三翻译模块346,用于将第二类型中间码翻译成第二语言,其中,第二语言为中央处理器指令集的子集;第四翻译模块348,用于将第二语言翻译成待运行的字节码。
需要说明的是,该实施例中的第一翻译模块342可以用于执行本发明实施例中的步骤S1042,该实施例中的第二翻译模块344可以用于执行本发明实施例中的步骤S1044,该实施例中的第三翻译模块346可以用于执行本发明实施例中的步骤S1046,该实施例中的第四翻译模块348可以用于执行本发明实施例中的步骤S1048。上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。
可选地,第一翻译单元32可以包括:第一编译模块322,用于将待热更新的代码编译为第三类型中间码,其中,第三类型中间码为C#语言的中间码;第五翻译模块324,用于将第三类型中间码翻译成第三语言,其中,第三语言为C++语言;第二编译模块326,用于将第三语言翻译成第一类型中间码。
需要说明的是,该实施例中的第一编译模块322可以用于执行本发明实施例中的步骤S1022,该实施例中的第五翻译模块324可以用于执行本发明实施例中的步骤S1024,该实施例中的第二编译模块326可以用于执行本发明实施例中的步骤S1026。上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。
可选地,代码热更新装置还可以包括:第一确定单元30,用于在将待热更新的代码翻译成第一类型中间码之前,确定安装在目标类型操作***中的待更新的目标应用;第二确定单元31,用于将待更新的目标应用的部分代码或者全部代码确定为待热更新的代码。
需要说明的是,该实施例中的第一确定单元30可以用于执行本发明实施例中的步骤S100,该实施例中的第二确定单元31可以用于执行本发明实施例中的步骤S101。上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。
为了实现上述目的,根据本发明的另一方面,本发明实施例还提供了一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行上述所述的代码热更新方法。
为了实现上述目的,根据本发明的另一方面,本发明实施例还提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行上述所述的代码热更新方法。
为了实现上述目的,根据本发明的另一方面,本发明实施例还提供了一种终端,包括存储器和处理器,其中,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述所述的代码热更新方法。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (11)
1.一种代码热更新方法,其特征在于,包括:
将待热更新的代码翻译成第一类型中间码,其中,所述第一类型中间码采用目标类型操作***的编译器编译;
将所述第一类型中间码翻译成待运行的字节码,其中,所述待运行的字节码采用所述目标类型操作***的解释器解释运行;
通过所述解释器解释运行所述待运行的字节码,以将所述待热更新的代码进行热更新。
2.根据权利要求1所述的方法,其特征在于,所述将所述第一类型中间码翻译成待运行的字节码包括:
将所述第一类型中间码翻译成第一语言,其中,所述第一语言为C++语言的子集;
将所述第一语言翻译成第二类型中间码,其中,所述第二类型中间码用于对所述第一语言进行优化;
将所述第二类型中间码翻译成第二语言,其中,所述第二语言为中央处理器指令集的子集;
将所述第二语言翻译成所述待运行的字节码。
3.根据权利要求1所述的方法,其特征在于,所述将待热更新的代码翻译成第一类型中间码包括:
将所述待热更新的代码编译为第三类型中间码,其中,所述第三类型中间码为C#语言的中间码;
将所述第三类型中间码翻译成第三语言,其中,所述第三语言为C++语言;
将所述第三语言编译成所述第一类型中间码。
4.根据权利要求1至3中任一项所述的方法,其特征在于,在所述将待热更新的代码翻译成第一类型中间码之前,所述方法还包括:
确定安装在所述目标类型操作***中的待更新的目标应用;
将所述待更新的目标应用的部分代码或者全部代码确定为所述待热更新的代码。
5.一种代码热更新装置,其特征在于,包括:
第一翻译单元,用于将待热更新的代码翻译成第一类型中间码,其中,所述第一类型中间码采用目标类型操作***的编译器编译;
第二翻译单元,用于将所述第一类型中间码翻译成待运行的字节码,其中,所述待运行的字节码采用所述目标类型操作***的解释器解释运行;
热更新单元,用于通过所述解释器解释运行所述待运行的字节码,以将所述待热更新的代码进行热更新。
6.根据权利要求5所述的装置,其特征在于,所述第二翻译单元包括:
第一翻译模块,用于将所述第一类型中间码翻译成第一语言,其中,所述第一语言为C++语言的子集;
第二翻译模块,用于将所述第一语言翻译成第二类型中间码,其中,所述第二类型中间码用于对所述第一语言进行优化;
第三翻译模块,用于将所述第二类型中间码翻译成第二语言,其中,所述第二语言为中央处理器指令集的子集;
第四翻译模块,用于将所述第二语言翻译成所述待运行的字节码。
7.根据权利要求5所述的装置,其特征在于,所述第一翻译单元包括:
第一编译模块,用于将所述待热更新的代码编译为第三类型中间码,其中,所述第三类型中间码为C#语言的中间码;
第五翻译模块,用于将所述第三类型中间码翻译成第三语言,其中,所述第三语言为C++语言;
第二编译模块,用于将所述第三语言编译成所述第一类型中间码。
8.根据权利要求5至7中任一项所述的装置,其特征在于,所述装置还包括:
第一确定单元,用于在所述将待热更新的代码翻译成第一类型中间码之前,确定安装在所述目标类型操作***中的待更新的目标应用;
第二确定单元,用于将所述待更新的目标应用的部分代码或者全部代码确定为所述待热更新的代码。
9.一种存储介质,其特征在于,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行权利要求1至4中任一项所述的方法。
10.一种处理器,其特征在于,所述处理器用于运行程序,其中,所述程序运行时执行权利要求1至4中任一项所述的方法。
11.一种终端,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行所述权利要求1至4中任一项所述的方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810273659.2A CN108415719B (zh) | 2018-03-29 | 2018-03-29 | 代码热更新方法和装置、存储介质、处理器及终端 |
PCT/CN2019/077642 WO2019184687A1 (zh) | 2018-03-29 | 2019-03-11 | 代码热更新方法和装置、存储介质、处理器及终端 |
US16/981,710 US11720344B2 (en) | 2018-03-29 | 2019-03-11 | Code hot-update method and device, storage medium, processor, and terminal |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810273659.2A CN108415719B (zh) | 2018-03-29 | 2018-03-29 | 代码热更新方法和装置、存储介质、处理器及终端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108415719A true CN108415719A (zh) | 2018-08-17 |
CN108415719B CN108415719B (zh) | 2019-03-19 |
Family
ID=63134003
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810273659.2A Active CN108415719B (zh) | 2018-03-29 | 2018-03-29 | 代码热更新方法和装置、存储介质、处理器及终端 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11720344B2 (zh) |
CN (1) | CN108415719B (zh) |
WO (1) | WO2019184687A1 (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109918112A (zh) * | 2019-03-15 | 2019-06-21 | 网易(杭州)网络有限公司 | 游戏热更新方法、装置和存储介质 |
WO2019184687A1 (zh) * | 2018-03-29 | 2019-10-03 | 网易(杭州)网络有限公司 | 代码热更新方法和装置、存储介质、处理器及终端 |
CN112163231A (zh) * | 2020-09-17 | 2021-01-01 | 北京一人一亩田网络科技有限公司 | iOS应用自动化打包预缓存数据的方法、装置、电子设备及计算机可读介质 |
CN114115964A (zh) * | 2022-01-24 | 2022-03-01 | 在线途游(北京)科技有限公司 | 一种用于Unity的热更新方法、装置、计算设备及计算机可读存储介质 |
CN114594981A (zh) * | 2022-05-09 | 2022-06-07 | 在线途游(北京)科技有限公司 | 一种用于在热更新时解决泛型兼容性问题的方法和装置 |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114610364A (zh) * | 2022-03-22 | 2022-06-10 | 北京字节跳动网络技术有限公司 | 应用程序更新、应用程序开发方法、装置及计算机设备 |
CN115167868B (zh) * | 2022-07-29 | 2022-12-09 | 阿里巴巴(中国)有限公司 | 代码编译方法、装置、设备及计算机存储介质 |
CN118276861A (zh) * | 2022-12-29 | 2024-07-02 | 华为终端有限公司 | 一种编译方法、电子设备及*** |
CN116483376B (zh) * | 2023-05-05 | 2023-10-03 | 广州正是网络科技有限公司 | C#代码自动生成方法、***及存储介质 |
CN117540827B (zh) * | 2024-01-08 | 2024-04-09 | 杭州吉利汽车数字科技有限公司 | 模型热更新方法、装置、设备及计算机可读存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120096449A1 (en) * | 2010-07-22 | 2012-04-19 | Junfeng Yang | Methods, Systems, and Media for Protecting Applications from Races |
CN103838614A (zh) * | 2014-02-19 | 2014-06-04 | 华为技术有限公司 | 一种数据处理方法及装置 |
CN104991793A (zh) * | 2015-06-15 | 2015-10-21 | 上海海漾软件技术有限公司 | 一种用于应用程序分包的方法、装置以及*** |
CN105487885A (zh) * | 2015-11-23 | 2016-04-13 | 盛趣信息技术(上海)有限公司 | 手游热更新方法 |
US9477461B1 (en) * | 2014-03-12 | 2016-10-25 | Cloud Linux Zug GmbH | Systems and methods for generating and applying operating system live updates |
CN106569794A (zh) * | 2016-09-23 | 2017-04-19 | 北京五八信息技术有限公司 | 应用程序开发装置 |
Family Cites Families (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6075942A (en) * | 1998-05-04 | 2000-06-13 | Sun Microsystems, Inc. | Encoding machine-specific optimization in generic byte code by using local variables as pseudo-registers |
US20060265703A1 (en) * | 2005-04-21 | 2006-11-23 | Holt John M | Computer architecture and method of operation for multi-computer distributed processing with replicated memory |
CN100462890C (zh) | 2005-06-16 | 2009-02-18 | 北京航空航天大学 | 智能卡安全环境的控制方法 |
US7818736B2 (en) * | 2005-09-14 | 2010-10-19 | International Business Machines Corporation | Dynamic update mechanisms in operating systems |
US7570796B2 (en) * | 2005-11-18 | 2009-08-04 | Kla-Tencor Technologies Corp. | Methods and systems for utilizing design data in combination with inspection data |
US8131661B2 (en) * | 2008-03-03 | 2012-03-06 | Nec Laboratories America, Inc. | Efficient decision procedure for bounded integer non-linear operations using SMT(LIA) |
US8261247B2 (en) * | 2008-10-01 | 2012-09-04 | Oracle International Corporation | Method of modifying code of a running computer program based on symbol values discovered from comparison of running code to corresponding object code |
US8266604B2 (en) * | 2009-01-26 | 2012-09-11 | Microsoft Corporation | Transactional memory compatibility management |
US8356165B2 (en) * | 2009-09-14 | 2013-01-15 | Advanced Micro Devices, Inc. | Selecting regions of hot code in a dynamic binary rewriter |
US8375373B2 (en) * | 2010-04-19 | 2013-02-12 | Microsoft Corporation | Intermediate language support for change resilience |
US8539458B2 (en) * | 2011-06-10 | 2013-09-17 | Microsoft Corporation | Transforming addressing alignment during code generation |
CN104182267B (zh) * | 2013-05-21 | 2019-10-25 | 南京中兴新软件有限责任公司 | 编译方法、解释方法、装置及用户设备 |
US9335986B1 (en) * | 2013-12-11 | 2016-05-10 | Amazon Technologies, Inc. | Hot patching to update program code and/or variables using a separate processor |
US9519466B2 (en) * | 2013-12-20 | 2016-12-13 | Oracle International Corporation | Executable code for constrained computing environments |
EP3126973A4 (en) | 2014-03-31 | 2017-12-06 | Irdeto B.V. | Method, apparatus, and computer-readable medium for obfuscating execution of application on virtual machine |
CN103984582B (zh) * | 2014-06-04 | 2017-05-31 | 网易(杭州)网络有限公司 | 一种热更新方法和装置 |
US9569199B2 (en) * | 2015-01-22 | 2017-02-14 | Futurewei Technologies, Inc. | Systems and methods to update source code files |
CN105511942B (zh) * | 2015-12-02 | 2019-02-19 | 华为技术有限公司 | 语言虚拟机中热点中间代码的识别方法以及装置 |
CN107967139B (zh) | 2016-10-17 | 2021-07-27 | 网易(杭州)网络有限公司 | 游戏的热更新方法及装置 |
US11816406B2 (en) * | 2017-05-15 | 2023-11-14 | Microchip Technology Inc. | High-level synthesis (HLS) method and apparatus to specify parallelism in computer hardware |
CN108415719B (zh) | 2018-03-29 | 2019-03-19 | 网易(杭州)网络有限公司 | 代码热更新方法和装置、存储介质、处理器及终端 |
-
2018
- 2018-03-29 CN CN201810273659.2A patent/CN108415719B/zh active Active
-
2019
- 2019-03-11 WO PCT/CN2019/077642 patent/WO2019184687A1/zh active Application Filing
- 2019-03-11 US US16/981,710 patent/US11720344B2/en active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120096449A1 (en) * | 2010-07-22 | 2012-04-19 | Junfeng Yang | Methods, Systems, and Media for Protecting Applications from Races |
CN103838614A (zh) * | 2014-02-19 | 2014-06-04 | 华为技术有限公司 | 一种数据处理方法及装置 |
US9477461B1 (en) * | 2014-03-12 | 2016-10-25 | Cloud Linux Zug GmbH | Systems and methods for generating and applying operating system live updates |
CN104991793A (zh) * | 2015-06-15 | 2015-10-21 | 上海海漾软件技术有限公司 | 一种用于应用程序分包的方法、装置以及*** |
CN105487885A (zh) * | 2015-11-23 | 2016-04-13 | 盛趣信息技术(上海)有限公司 | 手游热更新方法 |
CN106569794A (zh) * | 2016-09-23 | 2017-04-19 | 北京五八信息技术有限公司 | 应用程序开发装置 |
Non-Patent Citations (3)
Title |
---|
ALONE_MONKEY: ""关于LLVM,这些东西你必须知道"", 《伯乐在线》 * |
INDIEACE: ""用Unity做游戏,你需要深入了解以下IL2CPP"", 《简书》 * |
QIYER: ""移动端热更新方案(Ios+Android)"", 《简书》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019184687A1 (zh) * | 2018-03-29 | 2019-10-03 | 网易(杭州)网络有限公司 | 代码热更新方法和装置、存储介质、处理器及终端 |
US11720344B2 (en) | 2018-03-29 | 2023-08-08 | Netease (Hangzhou) Network Co., Ltd. | Code hot-update method and device, storage medium, processor, and terminal |
CN109918112A (zh) * | 2019-03-15 | 2019-06-21 | 网易(杭州)网络有限公司 | 游戏热更新方法、装置和存储介质 |
CN109918112B (zh) * | 2019-03-15 | 2022-10-04 | 网易(杭州)网络有限公司 | 游戏热更新方法、装置和存储介质 |
CN112163231A (zh) * | 2020-09-17 | 2021-01-01 | 北京一人一亩田网络科技有限公司 | iOS应用自动化打包预缓存数据的方法、装置、电子设备及计算机可读介质 |
CN114115964A (zh) * | 2022-01-24 | 2022-03-01 | 在线途游(北京)科技有限公司 | 一种用于Unity的热更新方法、装置、计算设备及计算机可读存储介质 |
CN114594981A (zh) * | 2022-05-09 | 2022-06-07 | 在线途游(北京)科技有限公司 | 一种用于在热更新时解决泛型兼容性问题的方法和装置 |
CN114594981B (zh) * | 2022-05-09 | 2022-08-09 | 在线途游(北京)科技有限公司 | 一种用于在热更新时解决泛型兼容性问题的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN108415719B (zh) | 2019-03-19 |
WO2019184687A1 (zh) | 2019-10-03 |
US20210034356A1 (en) | 2021-02-04 |
US11720344B2 (en) | 2023-08-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108415719B (zh) | 代码热更新方法和装置、存储介质、处理器及终端 | |
CN101697131B (zh) | 一种可重定位文件动态加载的方法及装置 | |
CN108121594B (zh) | 一种进程管理方法及装置 | |
CN112052006B (zh) | 一种软件代码编译方法及*** | |
CN110149800B (zh) | 一种用于处理与源程序的源代码相关联的抽象语法树的装置 | |
EP2378413B1 (en) | Methods and systems to implement non-ABI conforming features across unseen interfaces | |
US20070067471A1 (en) | Message translation systems and methods | |
JP4041248B2 (ja) | コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法 | |
CN106648681A (zh) | 一种可编程语言编译装载***及方法 | |
JP3706065B2 (ja) | 様々なソース言語の実行メディアへの移植 | |
JP4638484B2 (ja) | データ処理装置におけるデータ整合性 | |
CN106960140A (zh) | 虚拟机指令的混淆方法及装置、虚拟机保护*** | |
US20020170044A1 (en) | Method and system for register allocation | |
CN106796525A (zh) | 按需加载动态脚本语言代码以减少内存使用 | |
CN114327477A (zh) | 智能合约执行方法、装置、电子装置和存储介质 | |
CN113220326B (zh) | 智能合约升级方法及区块链*** | |
US8806460B2 (en) | Method and apparatus for avoiding register interference | |
CN115658140A (zh) | 一种sdk的打包方法、装置、终端以及存储介质 | |
CN113220327B (zh) | 智能合约升级方法及区块链*** | |
EP1136910A2 (en) | A method of compiling code in an object oriented programming language | |
CN113050948A (zh) | 动态库优化方法、装置、设备及存储介质 | |
JP3630086B2 (ja) | プログラム変換装置、プログラム変換方法及び記録媒体 | |
JP3889227B2 (ja) | プログラム実行装置、プログラム実行方法、記録媒体、及び制御プログラム | |
CN117806645A (zh) | 一种程序语言的程序自适应执行***和方法 | |
CN112783502A (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 |