CN114443052A - 一种il指令运行时的动态特例化方法和装置 - Google Patents
一种il指令运行时的动态特例化方法和装置 Download PDFInfo
- Publication number
- CN114443052A CN114443052A CN202210079062.0A CN202210079062A CN114443052A CN 114443052 A CN114443052 A CN 114443052A CN 202210079062 A CN202210079062 A CN 202210079062A CN 114443052 A CN114443052 A CN 114443052A
- Authority
- CN
- China
- Prior art keywords
- instruction
- dynamic
- interpreter
- real address
- parameter
- 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.)
- Pending
Links
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/60—Software deployment
- G06F8/65—Updates
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本申请提供了一种IL指令运行时的动态特例化方法、装置、计算设备和计算机可读存储介质,该方法在IL动态指令第一次执行时将指令执行需要的实际地址保存下来,并将指令修改为解释器可以识别的特例化后的指令。当解释器下一次执行该指令时,根据特例化后的指令直接调用实际地址,无需进行查询的动作,从而提升了解释器的执行速度,进而提高了热更新的效率。
Description
技术领域
本申请涉及计算机编译技术领域,特别涉及一种IL指令运行时的动态特例化方法、装置、计算设备和计算机可读存储介质。
背景技术
在移动互联网领域,通常使用热更新的方式来实现APP的功能更新或Bug修复,用户打开APP时即可实现更新,不用重新下载整个APP,从而实现了良好的用户体验。现有技术中,一种流行的方案是基于C#的热更新方案,该方案利用解释器执行热更新部分动态库中的IL指令来实现热更新。由于IL指令中有大量指令依赖于运行时阶段的查询步骤,较为费时,导致解释器的运行效率较低,热更新的速度较慢。
发明内容
有鉴于此,本申请例提供了一种IL指令运行时的动态特例化方法、装置、计算设备和计算机可读存储介质,以解决现有技术中存在的技术缺陷。
根据本申请实施例的第一方面,提供了一种IL指令运行时的动态特例化方法,包括:
使用解释器对动态库中的IL语言进行解释执行;
当IL指令集中的动态指令第一次被执行时,获取并保存该动态指令参数所对应的实际地址p;
将动态指令的参数替换为所述实际地址p;
将动态指令修改为特例化后的指令,当解释器下一次执行到所述指令时直接调用所述实际地址p。
根据本申请实施例的第二方面,提供了一种IL指令运行时的动态特例化装置,包括:
指令执行单元,用于对动态库中的IL语言进行解释执行;
保存单元,用于当IL指令集中的动态指令第一次被执行时,获取并保存该动态指令参数所对应的实际地址p;
替换单元,用于将动态指令的参数替换为所述实际地址p;
编辑单元,将动态指令修改为特例化后的指令;
当所述指令执行单元非首次执行所述动态指令时直接调用所述实际地址p。
根据本申请实施例的第三方面,提供了一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述指令时实现所述IL指令运行时的动态特例化方法的步骤。
根据本申请实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现所述IL指令运行时的动态特例化方法的步骤。
通过本申请实施例中的方法和装置,对IL2CPP的结构进行改进,将一个仅支持AOT静态编译的运行时改造为一个支持AOT+解释器的运行时,实现了跨平台的高效热更新方案的基础,并对解释器运行方式进行了优化。当IL动态指令第一次执行时,将指令执行需要的实际地址保存下来,并对指令的ID进行修改,修改为解释器可以识别的特例化后的指令。当解释器下一次执行该指令时,根据特例化后的指令直接调用实际地址,无需进行查询的动作,从而提升了解释器的执行速度,进而提高了热更新的效率。
附图说明
图1是本申请实施例提供的计算设备的结构框图;
图2是本申请实施例提供的IL指令运行时的动态特例化方法的一流程示意图;
图3是本申请实施例提供的IL指令运行时的动态特例化方法中对指令参数进行替换的一示意图;
图4是本申请实施例提供的IL指令运行时的动态特例化方法中对指令ID进行修改的一示意图。
图5是本申请实施例提供的IL指令运行时的动态特例化装置的结构示意图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
在本申请一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请一个或多个实施例。在本申请一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本申请一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“响应于确定”。
在本申请中,提供了一种IL指令运行时的动态特例化方法及装置、计算设备和计算机可读存储介质,用于C#的热更新方案中用来提升热更新的速度,在下面的实施例中逐一进行详细说明。
图1示出了根据本申请一实施例的计算设备100的结构框图。该计算设备100的部件包括但不限于存储器110和处理器120。处理器120与存储器110通过总线130相连接,数据库150用于保存数据。
计算设备100还包括接入设备140,接入设备140使得计算设备100能够经由一个或多个网络160通信。这些网络的示例包括公用交换电话网(PSTN)、局域网(LAN)、广域网(WAN)、个域网(PAN)或诸如因特网的通信网络的组合。接入设备140可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(NIC))中的一个或多个,诸如IEEE802.11无线局域网(WLAN)无线接口、全球微波互联接入(Wi-MAX)接口、以太网接口、通用串行总线(USB)接口、蜂窝网络接口、蓝牙接口、近场通信(NFC)接口,等等。
在本申请的一个实施例中,计算设备100的上述部件以及图1中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图1所示的计算设备结构框图仅仅是出于示例的目的,而不是对本申请范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
计算设备100可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或PC的静止计算设备。计算设备100还可以是移动式或静止式的服务器。
现有技术中,通常采用基于Lua的各种框架如Xlua或基于C#的运行时ILRuntime来实现APP的热更新。
基于Lua的方案虽然能够实现热更新,但是也存在多个缺陷,例如:
在C#项目中,如果使用Lua来实现热更新逻辑,需要团队成员需要同时对Lua和C#都特别熟悉,提高了开发的成本。
由于运行期间需要在C#和Lua之间频繁切换,且Lua调用C#的代码速度较慢,因此会降低游戏运行效率;
无法使用集成开发调试环境,代码的单步调试,性能分析都缺乏良好的工具支持,难以满足大型工程的要求。
由于以上缺陷,现有技术中还提出了一种基于C#实现的ILRuntime工具,用来实现同一种语言下的热更新方案。ILRuntime为基于C#的平台如Unity,提供了一个纯C#实现,快速、方便且可靠的IL运行时,使得在不支持JIT的硬件环境(如iOS)能够实现代码的热更新。其实现原理是,ILRuntime借助第三方Mono.Cecil库来读取热更新DLL的PE信息,以及其中类型的所有信息,最终得到IL汇编码,然后通过解释器解释DLL中的IL指令,逐条翻译并执行。该方式将不同类型的开发语言编写的热更新代码编译成IL字节码,通过建立的IL汇编器编译到DLL文件中,当客户端加载该DLL文件时,执行IL字节码,然后初始化ILRuntime,加载热更新代码。
虽然ILRuntime克服了Lua在热更新场景下的部分缺陷,但是它自身也存在着不少缺陷,首先由于它使用了外置解释器,热更脚本使用的类型系统与CLR的类型系统并不统一,造成大量的不兼容问题,需要进行诸多额外的操作如跨域继承,辅助反射等,开发效率很低;其次,在使用高级的语言特性组合时,如反射、泛型时,容易出现错误,稳定性较差;纯计算的性能弱于Lua,计算密集型的代码不适合使用。
因此,在现有技术中,对于使用C#平台,如Unity开发的应用,没有一种方便、高效、且成本低的热更新解决方案。
在Unity开发平台中,IL2CPP是一种新的脚本后处理(Scripting Backend)方式,针对平台编译输出的IL(中间语言)进行处理,将IL语言转换为静态的C++代码,然后再由各个平台的C++编译器直接编译成能执行的原生汇编代码,从而实现Unity的跨平台开发。这种方式除了执行效率快以外,还可以利用各个平台的C++编译器对代码执行编译期优化,这样可以进一步减小最终游戏的尺寸并提高游戏运行速度,因此,几乎所有基于Unity的开发过程都使用了IL2CPP工具。
其中,IL2CPP主要由两部分组成:
·AOT(Ahead Of Time)静态编译编译器(il2cpp.exe);
·运行时库(libil2cpp);
AOT编译器将IL转换为C++代码,再交给各平台的C++编译器进行编译,由于使用的是AOT静态编译,因此在编译时就必须完全确定需要用到的类型;运行时库则会提供诸如垃圾回收、线程/文件获取、内部调用直接修改托管数据结构的原生代的服务与抽象。
无论是Lua还是ILRuntime,都采用了解释器的原理来对热更新的代码进行解释执行,不生成本地机器码,从而实现了各个平台上的热更新。因此也可以通过为IL2CPP工具增加解释器的方式来实现热更新功能。
通过为IL2CPP工具添加IL解释器的方式使得IL2CPP工具具备了AOT编译器、运行时环境和IL解释器功能,具有了多个不同平台的编译和热更新基础。其中,对于无需更新的代码使用AOT静态编译成C++代码,进而被目标平台编译为本地可执行程序;对于热更新程序集中的代码,则通过IL解释器进行解释执行。
然而,在现有的解释器中,标准的IL指令集中有大量指令依赖于运行时查询元数据或者其他上下文信息,因此在执行相关指令时耗费了比较多的时间,影响了解释器的执行效率。例如函数调用Callvirt指令,其包含一个token参数;执行该指令时需要根据token查表,这是一个比较费时的操作。即使采用现有技术中常见的缓存技术,也会涉及到多线程并发查询或hashmap查询操作,仍然有较大的计算开销。
在本申请实施例中,为了解决上述问题,提出了一种IL指令运行时的动态特例化方法和装置、计算设备和计算机可读存储介质。
说明书附图1中的处理器120可以执行图2所示的IL指令运行时的动态特例化方法中的步骤。图2中示出了实现IL指令运行时的动态特例化方法的流程图,包括步骤202至步骤208。
步骤202:使用解释器对动态库中的IL语言进行解释执行。
为IL2CPP工具添加IL解释器后,使得该工具具备了AOT编译器、CLR运行时环境和IL解释器功能,具有了多个不同平台的编译和热更新基础。
进一步的,通过System.Reflection.Assembly.Load方法加载热更新的程序集到运行时的程序集列表中,并通过解释器对程序集中的IL语言进行解释执行。
步骤204:当动态指令第一次执行时,获取并保存该动态指令的参数所对应的实际地址p。
在一种具体的实施方式中,IL指令集中的指令CallVirt调用对象中的后期绑定方法。也就是说,该方法是根据obj的运行时类型来选择的,而不是根据编译时的方法指针来选择的,即指令CallVirt是一个动态的指令。
指令CallVirt在调用函数时,会调用一个方法元数据token,方法元数据token提供了要调用的方法的名称、类和签名。指令CallVirt根据该token在虚表v-table的实例中进行查询,查询到需要调用的函数的地址MethodInfo*,进而完成函数的调用。
由此可见,在标准的IL指令,例如CallVirt中,调用一个函数需要进行表查询动作,耗费了大量的时间。
因此,在本实施例中,当第一次执行CallVirt指令后,将根据token查询到的函数的地址MethodInfo*进行记录。
在另一个具体的实施方式中,IL指令集中的指令Ldfld用于将指定对象中的字段值压入堆栈,对象的字段由必须指向字段成员的元数据token指定。该字段可以是实例字段或静态字段,可见该指令同样需要根据token在字段的元数据表中进行查询。
因此,在本实施例中,当第一次执行Ldfld指令后,即可获得字段的类型以及字段在Baseclass中的offset,并将该字段的offset和size记录下来。
本领域技术人员应当知晓,在IL指令集中存在多个动态指令,即在运行时才能确定其具体执行内容的指令。在上述实施例中,所列举的动态指令仅为例举而非穷举,本领域技术人员可以根据实际需求对相关的IL动态指令进行本实施例中的操作,在此不再赘述。
步骤206:将动态指令的参数替换为参数所对应的实际地址。
在该步骤中,为了加快解释器的执行速度,将步骤204中所获取的动态指令的参数所对应的实际地址对原始的参数进行替换。
在另一种具体的实现方式中,在动态指令后预留若干个字节长度的空间,将该动态指令的参数所对应的实际地址写入该空间,以完成替换。
如图3所示,例如,在指令CallVirt<token>后预留多个字节,将token对应的函数地址MethodInfo*写入其中;又例如,在指令Ldfld<token>后预留若干个字节,将该token对应的指令实际所需要的字段地址<offset>和<size>写入其中。
步骤208:将动态指令修改为特例化后的指令,解释器下一次执行到该指令时根据特例化后的指令直接调用实际地址p。
在该步骤中,对原始的动态指令的ID进行修改,使其在下一次被解释器执行时跳过原来的token参数,直接执行参数所对应的实际地址。
当解释器第一次执行完CallVirt指令,获取并保存动态指令的参数所对应的实际地址后,需要对CallVirt指令的ID进行替换;否则,解释器在下次执行该指令时,该指令仍然会使用token进行查询,从而无法提高解释器的运行效率。
在一种具体的实施方式中,当动态指令CallVirt第一次执行完之后,将该指令修改为特例化后的指令,例如CallVirtJIT,如图4所示;
当解释器下一次执行到该指令时,根据特例化后的指令CallVirtJIT直接获取需要的实际地址p进行指令的执行,从而无需进行查询步骤,极大的提高了解释器的执行速度。
在另一种具体的实施方式中,当动态指令CallVirt第一次执行完之后,获取动态指令的指令码,对该指令码进行修改,将其修改为解释器可以识别的特例化后的指令码。当解释器下一次执行到该指令时,根据特例化后的指令码直接获取需要的实际地址p进行指令的执行,也无需进行查询步骤。
在上述实施例中,对IL2CPP的结构进行改进,将一个仅支持AOT静态编译的运行时改造为一个支持AOT+解释器的运行时,实现了跨平台的高效热更新方案的基础;进一步地,对解释器运行方式进行了优化,当IL动态指令第一次执行时,将指令执行需要的实际地址保存下来,并对指令的ID进行修改,修改为解释器可以识别的特例化后的指令。当解释器下一次执行该指令时,根据特例化后的指令直接调用指令执行需要的实际地址,无需根据参数进行查询的动作,从而提升了解释器的执行速度,进而提高了热更新的效率。
与上述方法实施例相对应,本申请还提供了一种IL指令运行时的动态特例化装置的实施例,图5示出了本申请一个实施例的一种IL指令运行时的动态特例化装置的结构示意图。如图5所示,该装置包括:
指令执行单元,用于对动态库中的IL语言进行解释执行;
保存单元,用于当IL指令集中的动态指令第一次被执行时,获取并保存该动态指令参数所对应的实际地址p;
替换单元,用于将动态指令的参数替换为所述实际地址p;
编辑单元,将动态指令修改为特例化后的指令;
当所述指令执行单元非首次执行所述动态指令时直接调用所述实际地址p。
上述为本实施例的一种IL指令运行时的动态特例化装置的示意性方案。需要说明的是,该IL指令运行时的动态特例化装置的技术方案与上述的IL指令运行时的动态特例化方法的技术方案属于同一构思,该IL指令运行时的动态特例化装置的技术方案未详细描述的细节内容,均可以参见上述IL指令运行时的动态特例化方法的技术方案的描述。
本申请一实施例中还提供一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述指令时实现所述的IL指令运行时的动态特例化方法的步骤。
上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的IL指令运行时的动态特例化方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述IL指令运行时的动态特例化方法的技术方案的描述。
本申请一实施例还提供一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现如前所述IL指令运行时的动态特例化方法的步骤。
上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的IL指令运行时的动态特例化方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述IL指令运行时的动态特例化方法的技术方案的描述。
上述对本申请特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本申请所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上公开的本申请优选实施例只是用于帮助阐述本申请。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本申请的内容,可作很多的修改和变化。本申请选取并具体描述这些实施例,是为了更好地解释本申请的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本申请。本申请仅受权利要求书及其全部范围和等效物的限制。
Claims (8)
1.一种IL指令运行时的动态特例化方法,其特征在于,包括:
使用解释器对动态库中的IL语言进行解释执行;
当IL指令集中的动态指令第一次被执行时,获取并保存该动态指令参数所对应的实际地址p;
将动态指令的参数替换为所述实际地址p;
将动态指令修改为特例化后的指令,当解释器下一次执行到所述指令时直接调用所述实际地址p。
2.根据权利要求1所述的方法,其中,所述动态指令为在运行时确定其具体执行内容的指令。
3.根据权利要求1所述的方法,其中,所述将动态指令的参数替换为所述实际地址p还包括:
在动态指令后预留若干个字节长度的空间,将该动态指令的参数所对应的实际地址p写入该空间。
4.根据权利要求1所述的方法,其中,所述将动态指令修改为特例化后的指令还包括:
将所述动态指令的指令码修改为解释器可以识别的特例化指令码。
5.根据权利要求1所述的方法,其中,该方法在CLR运行时环境中执行。
6.一种IL指令运行时的动态特例化装置,其特征在于,包括:
指令执行单元,用于对动态库中的IL语言进行解释执行;
保存单元,用于当IL指令集中的动态指令第一次被执行时,获取并保存该动态指令参数所对应的实际地址p;
替换单元,用于将动态指令的参数替换为所述实际地址p;
编辑单元,将动态指令修改为特例化后的指令;
当所述指令执行单元非首次执行所述动态指令时直接调用所述实际地址p。
7.一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,其特征在于,所述处理器执行所述指令时实现权利要求1-5任意一项所述方法的步骤。
8.一种计算机可读存储介质,其存储有计算机指令,其特征在于,该指令被处理器执行时实现权利要求1-5任意一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210079062.0A CN114443052A (zh) | 2022-01-24 | 2022-01-24 | 一种il指令运行时的动态特例化方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210079062.0A CN114443052A (zh) | 2022-01-24 | 2022-01-24 | 一种il指令运行时的动态特例化方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114443052A true CN114443052A (zh) | 2022-05-06 |
Family
ID=81368977
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210079062.0A Pending CN114443052A (zh) | 2022-01-24 | 2022-01-24 | 一种il指令运行时的动态特例化方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114443052A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114594981A (zh) * | 2022-05-09 | 2022-06-07 | 在线途游(北京)科技有限公司 | 一种用于在热更新时解决泛型兼容性问题的方法和装置 |
-
2022
- 2022-01-24 CN CN202210079062.0A patent/CN114443052A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114594981A (zh) * | 2022-05-09 | 2022-06-07 | 在线途游(北京)科技有限公司 | 一种用于在热更新时解决泛型兼容性问题的方法和装置 |
CN114594981B (zh) * | 2022-05-09 | 2022-08-09 | 在线途游(北京)科技有限公司 | 一种用于在热更新时解决泛型兼容性问题的方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108920133B (zh) | 跨语言编程方法、装置、电子设备及存储介质 | |
US10146515B1 (en) | Live code updates | |
CN111770113A (zh) | 一种执行智能合约的方法、区块链节点和节点设备 | |
US20050108690A1 (en) | System and method of generating applications for mobile devices | |
CN111061638B (zh) | 一种iOS系统调试的方法、装置及服务器 | |
CN114115964B (zh) | 一种用于Unity的热更新方法、装置、计算设备及计算机可读存储介质 | |
US9164735B2 (en) | Enabling polymorphic objects across devices in a heterogeneous platform | |
US20190114165A1 (en) | Using semantic annotations to control compatibility behaviors | |
US20150186165A1 (en) | Emulating pointers | |
CN109739508B (zh) | 源代码编译方法、装置、系统及存储介质 | |
US20100218174A1 (en) | Dynamic compiling and loading at runtime | |
CN111768184A (zh) | 一种执行智能合约的方法及区块链节点 | |
CN114443052A (zh) | 一种il指令运行时的动态特例化方法和装置 | |
CN109558121B (zh) | 接口驱动程序的开发方法、装置、设备及存储介质 | |
CN113220326B (zh) | 智能合约升级方法及区块链系统 | |
KR20230058608A (ko) | 외래 코드의 에뮬레이션을 지원하기 위한 네이티브 에뮬레이션 호환 애플리케이션 바이너리 인터페이스 | |
JP4768984B2 (ja) | コンパイル方法、コンパイルプログラムおよびコンパイル装置 | |
CN110018831B (zh) | 程序处理方法、装置及计算机可读存储介质 | |
CN115048184A (zh) | 一种解释器指令的优化执行方法和装置 | |
CN115794162A (zh) | 一种用于在热更新时对差分更新进行优化的方法和装置 | |
CN113220327B (zh) | 智能合约升级方法及区块链系统 | |
KR20230058378A (ko) | 코드 스트림 폴딩을 지원하는 하이브리드 바이너리 | |
CN114594981B (zh) | 一种用于在热更新时解决泛型兼容性问题的方法和装置 | |
CN115997195A (zh) | 具有一致性参考地址的双架构函数指针 | |
Okafor et al. | Transforming SQLITE to Run on a Bare PC. |
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 |