语言代码编译方法、装置、设备及介质制造方法及图纸

技术编号:37469369 阅读:13 留言:0更新日期:2023-05-06 09:47
本申请涉及计算机语言技术领域,提出了一种语言代码编译方法、装置、设备及介质,该方法包括:获取欲保留的未被引用的代码;根据每个未被引用的代码对应的目标类的特性,确定与其对应的目标钩子函数;将每个未被引用的代码的目标钩子函数注册到预先构造的静态容器中;将所述静态容器挂载到目标程序的入口主函数中。通过本申请的技术方案,防止进行语言编译时移除掉没被引用但开发者关注的类及其函数。除掉没被引用但开发者关注的类及其函数。除掉没被引用但开发者关注的类及其函数。

【技术实现步骤摘要】
语言代码编译方法、装置、设备及介质


[0001]本申请涉及计算机语言
,尤其涉及一种语言代码编译方法、装置、设备及介质。

技术介绍

[0002]dart2js是Google开源的一个编译工具,主要用于将Dart语言代码转换成JavaScript语言代码,dart2js支持指定级别的代码优化,在级别1及以上级别,如果代码没有被引用到,这部分代码就会被删除,例如程序代码引用到了某个类,但是只会保留此类中被业务代码引用到的函数,此类中没有被引用到的函数将会被删除。这样,需要尽可能的优化代码体积,但同时保留某些类及其函数,在某些场景下,如:动态下发的代码,方便后续能调用这些类及其函数。

技术实现思路

[0003]本申请实施例提供了一种语言代码编译方法、装置、设备及介质,从而dart源码在编译成js的过程中,防止dart2js编译时移除掉没被引用但开发者关注的类及其函数。
[0004]第一方面,本申请实施例提供了一种语言代码编译方法,包括:
[0005]获取欲保留的未被引用的代码;
[0006]根据每个未被引用的代码对应的目标类的特性,确定与其对应的目标钩子函数;
[0007]将每个未被引用的代码的目标钩子函数注册到预先构造的静态容器中;
[0008]将所述静态容器挂载到目标程序的入口主函数中。
[0009]在一个实施例中,优选地,根据每个未被引用的代码对应的目标类的特性,确定与其对应的目标钩子函数,包括:
[0010]当所述目标类不存在父类且不存在子类时,确定与其对应的目标钩子函数为第一类钩子函数,所述第一类钩子函数用于构造所述目标类的实例,并返回其函数集合。
[0011]在一个实施例中,优选地,根据每个未被引用的代码对应的目标类的特性,确定与其对应的目标钩子函数,包括:
[0012]当所述目标类不存在父类且仅存在一个子类时,确定与其对应的目标钩子函数为第二类钩子函数,所述第二类钩子函数用于为所述目标类构造一个子类。
[0013]在一个实施例中,优选地,根据每个未被引用的代码对应的目标类的特性,确定与其对应的目标钩子函数,包括:
[0014]当所述目标类不存在父类且存在多个子类时,确定与其对应的目标钩子函数为第三类钩子函数,所述第三类钩子函数用于构造任意两个子类的实例,并返回两个实例对子类中函数引用的集合。
[0015]在一个实施例中,优选地,根据每个未被引用的代码对应的目标类的特性,确定与其对应的目标钩子函数,包括:
[0016]当所述目标类存在父类且不存在子类时,确定是否移除所述父类对应的未被引用
的代码;
[0017]当确定移除所述父类对应的未被引用的代码时,确定与其对应的目标钩子函数为第一类钩子函数,所述第一类钩子函数用于构造所述目标类的实例,并返回其函数集合;
[0018]当确定欲保留所述父类对应的未被引用的代码时,确定与其对应的目标钩子函数为第四类钩子函数,所述第四类钩子函数用于构造所述目标类和其父类的实例,并返回对应的函数集合;
[0019]在一个实施例中,优选地,根据每个未被引用的代码对应的目标类的特性,确定与其对应的目标钩子函数,包括:
[0020]当所述目标类存在父类且存在一个子类时,确定与其对应的目标钩子函数为第二类钩子函数,所述第二类钩子函数用于为所述目标类构造一个子类。
[0021]在一个实施例中,优选地,根据每个未被引用的代码对应的目标类的特性,确定与其对应的目标钩子函数,包括:
[0022]当所述目标类存在父类且存在多个子类时,确定与其对应的目标钩子函数为第三类钩子函数,所述第三类钩子函数用于构造任意两个子类的实例,并返回两个实例对子类中函数引用的集合。
[0023]第二方面,本申请实施例提供了一种语言代码编译装置,包括:
[0024]获取模块,用于获取欲保留的未被引用的代码;
[0025]确定模块,用于根据每个未被引用的代码对应的目标类的特性,确定与其对应的目标钩子函数;
[0026]注册模块,用于将每个未被引用的代码的目标钩子函数注册到预先构造的静态容器中;
[0027]挂载模块,用于将所述静态容器挂载到目标程序的入口主函数中。
[0028]在一个实施例中,优选地,确定模块用于:
[0029]当所述目标类不存在父类且不存在子类时,确定与其对应的目标钩子函数为第一类钩子函数,所述第一类钩子函数用于构造所述目标类的实例,并返回其函数集合。
[0030]在一个实施例中,优选地,确定模块用于:
[0031]当所述目标类不存在父类且仅存在一个子类时,确定与其对应的目标钩子函数为第二类钩子函数,所述第二类钩子函数用于为所述目标类构造一个子类。
[0032]在一个实施例中,优选地,确定模块用于:
[0033]当所述目标类不存在父类且存在多个子类时,确定与其对应的目标钩子函数为第三类钩子函数,所述第三类钩子函数用于构造任意两个子类的实例,并返回两个实例对子类中函数引用的集合。
[0034]在一个实施例中,优选地,确定模块用于:
[0035]当所述目标类存在父类且不存在子类时,确定是否移除所述父类对应的未被引用的代码;
[0036]当确定移除所述父类对应的未被引用的代码时,确定与其对应的目标钩子函数为第一类钩子函数,所述第一类钩子函数用于构造所述目标类的实例,并返回其函数集合;
[0037]当确定欲保留所述父类对应的未被引用的代码时,确定与其对应的目标钩子函数为第四类钩子函数,所述第四类钩子函数用于构造所述目标类和其父类的实例,并返回对
应的函数集合;
[0038]在一个实施例中,优选地,确定模块用于:
[0039]当所述目标类存在父类且存在一个子类时,确定与其对应的目标钩子函数为第二类钩子函数,所述第二类钩子函数用于为所述目标类构造一个子类。
[0040]在一个实施例中,优选地,确定模块用于:
[0041]当所述目标类存在父类且存在多个子类时,确定与其对应的目标钩子函数为第三类钩子函数,所述第三类钩子函数用于构造任意两个子类的实例,并返回两个实例对子类中函数引用的集合。
[0042]第三方面,提供了一种计算机设备,包括存储器、处理器以及存储在存储器中并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述传染病空间预测方法的步骤。
[0043]第四方面,提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时实现上述传染病空间预测方法的步骤。
[0044]以上语言代码编译方法、装置、设备及介质所实现的方案中,可以获取欲保留的未被引用的代码;根据每个未被引用的代码对应的目标类的特性,确定与其对应的目标钩子函数;将每个未被引用的代码的目标钩子函数注册到预先构造的静态容器中;将所述静态容器挂载到目标程序的入口主函数中。在本专利技术中,提出本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种语言代码编译方法,其特征在于,包括:获取欲保留的未被引用的代码;根据每个未被引用的代码对应的目标类的特性,确定与其对应的目标钩子函数;将每个未被引用的代码的目标钩子函数注册到预先构造的静态容器中;将所述静态容器挂载到目标程序的入口主函数中。2.根据权利要求1所述的语言代码编译方法,其特征在于,根据每个未被引用的代码对应的目标类的特性,确定与其对应的目标钩子函数,包括:当所述目标类不存在父类且不存在子类时,确定与其对应的目标钩子函数为第一类钩子函数,所述第一类钩子函数用于构造所述目标类的实例,并返回其函数集合。3.根据权利要求1所述的语言代码编译方法,其特征在于,根据每个未被引用的代码对应的目标类的特性,确定与其对应的目标钩子函数,包括:当所述目标类不存在父类且仅存在一个子类时,确定与其对应的目标钩子函数为第二类钩子函数,所述第二类钩子函数用于为所述目标类构造一个子类。4.根据权利要求1所述的语言代码编译方法,其特征在于,根据每个未被引用的代码对应的目标类的特性,确定与其对应的目标钩子函数,包括:当所述目标类不存在父类且存在多个子类时,确定与其对应的目标钩子函数为第三类钩子函数,所述第三类钩子函数用于构造任意两个子类的实例,并返回两个实例对子类中函数引用的集合。5.根据权利要求1所述的语言代码编译方法,其特征在于,根据每个未被引用的代码对应的目标类的特性,确定与其对应的目标钩子函数,包括:当所述目标类存在父类且不存在子类时,确定是否移除所述父类对应的未被引用的代码;当确定移除所述父类对应的未被引用的代码时,确定与其对应的目标钩子函数为第一类钩子函数,所述第一类钩子函数用于构造所述目标类的实例...

【专利技术属性】
技术研发人员:刘剑杨春柳
申请(专利权)人:北京小川在线网络技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1