CN105335137B - 用于处理源文件的方法和装置 - Google Patents
用于处理源文件的方法和装置 Download PDFInfo
- Publication number
- CN105335137B CN105335137B CN201410353995.XA CN201410353995A CN105335137B CN 105335137 B CN105335137 B CN 105335137B CN 201410353995 A CN201410353995 A CN 201410353995A CN 105335137 B CN105335137 B CN 105335137B
- Authority
- CN
- China
- Prior art keywords
- file
- source file
- indicator
- data symbol
- definition
- 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
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
- G06F8/48—Incremental compilation
-
- 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/42—Syntactic analysis
- G06F8/423—Preprocessors
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及用于处理源文件的方法和装置。提供了一种用于处理源文件以生成目标文件的方法,包括:获取由源文件所引用的头文件;响应于源文件调用在头文件中定义的数据符号,创建数据符号的定义的指示符,不同数据符号的定义对应于不同的指示符;向编译源文件所得的编译结果添加指示符以生成目标文件。还提供了一种用于处理源文件的方法,包括:响应于源文件所引用的头文件被更新,在头文件中查找由源文件调用的数据符号的定义;创建数据符号的定义的指示符;响应于指示符匹配于从源文件生成的目标文件中的指示符,通知无需重新编译源文件。采用本发明,可以记录源文件和头文件之间的依赖关系,并基于依赖关系来降低需要重新编译的源文件的数量。
Description
技术领域
本发明的各实施方式涉及编译(compiling)领域,更具体地,涉及处理源文件(source file)以生成目标文件(object file)的方法和装置。
背景技术
随着计算机技术的发展,目前已经出现了大量的编程语言。并且,目前的很多编程语言的源代码(source code)涉及多种类型的文件格式,例如,对于C语言而言,源代码可以包括源文件(例如,*.c文件)和头文件(header file)(例如,*.h文件);又例如,对于C++语言而言,源代码可以包括源文件(例如,*.cpp文件)和头文件(例如,*.h和*.hpp文件)。
通常而言,源文件可以用于保存程序的具体实现(例如,主体代码部分),而头文件可以保存程序的接口(例如,数据结构和函数的定义等)。源文件可以引用(reference)头文件,例如在C和C++中可以通过“#include”来引用头文件。具体而言,一个源文件可以引用多个头文件,而一个头文件可以被多个源文件引用。因而,在源文件和头文件之间可以存在多对多的复杂引用关系。
开发人员通常会在一个源文件中引用多个头文件(有时可能会引用该源文件实际上不需要的头文件),此时,当多个头文件中的任一头文件被更新时(即使被更新的头文件与源文件完全无关),都需要重新编译该源文件。
应当注意,编译源文件涉及大量处理步骤:例如前端(front-end)处理可以包括词法分析、语法分析、语义分析、中间代码生成等,而后端(back-end)处理涉及代码优化和目标代码(object code)生成等。因而,仅仅编译一个源文件就可能耗费大量时间。
另一方面,随着用户需求的复杂化,单独的编程人员已经很难完成应用程序的开发。每个编程人员可能会开发数十甚至更多的源文件,并且每个源文件还可能会引用一个或者多个头文件。此时,重新编译全部源代码可能会需要数十分钟甚至更长的时间。基于上述问题,如何降低编译源代码所需的时间并提高编译效率,成为一项亟待解决的问题。
发明内容
因而,期望开发出能够降低需要被编译的源代码的数量、进而降低编译源代码所需的时间的技术方案;并且期望可以在尽量不改变现有的编译方案的情况下实现期望该技术方案。
在本发明的一个实施方式中,提供了一种用于处理源文件以生成目标文件的方法,包括:获取由源文件所引用的头文件;响应于源文件调用在头文件中定义的数据符号(data symbol),创建数据符号的定义的指示符,其中不同数据符号的定义对应于不同的指示符;以及向编译源文件所得的编译结果添加指示符以生成目标文件。
在本发明的一个实施方式中,提供了一种用于处理源文件的方法,包括:响应于源文件所引用的头文件被更新,在头文件中查找由源文件调用的数据符号的定义;创建数据符号的定义的第一指示符;以及响应于第一指示符匹配于从源文件生成的目标文件中的指示符,通知无需重新编译源文件,其中目标文件是根据本发明的方法生成的。
在本发明的一个实施方式中,提供了一种用于处理源文件以生成目标文件的装置,包括:获取模块,配置用于获取由源文件所引用的头文件;创建模块,配置用于响应于源文件调用在头文件中定义的数据符号,创建数据符号的定义的指示符,其中不同数据符号的定义对应于不同的指示符;及生成模块,配置用于向编译源文件所得的编译结果添加指示符以生成目标文件。
在本发明的一个实施方式中,提供了一种用于处理源文件的装置,包括:查找模块,配置用于响应于源文件所引用的头文件被更新,在头文件中查找由源文件调用的数据符号的定义;创建模块,配置用于创建数据符号的定义的第一指示符;以及通知模块,配置用于响应于第一指示符匹配于从源文件生成的目标文件中的指示符,通知无需重新编译源文件,其中目标文件是根据本发明的装置生成的。
采用本发明所述的方法和装置,可以在从源文件生成的目标代码中记录该源文件所调用的数据符号的定义的指示符。进一步,可以基于该指示符来判断头文件中被更新的部分对于源文件是否有影响,并且在有影响的情况下重新编译源文件,而在没有影响的情况下不必重新编译源文件。以此方式,可以大大减少将被编译的源代码的数量,进而降低编译时间。
附图说明
通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其他目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
图1示意性示出了适于用来实现本发明实施方式的示例性计算机系统/服务器12的框图;
图2示意性示出了根据一个技术方案的源文件和头文件之间的引用关系的框图;
图3示意性示出了根据本发明一个实施方式的处理源文件的技术方案的框图;
图4A示意性示出了根据本发明一个实施方式的处理源文件以生成目标文件的方法的流程图,以及图4B示意性示出了根据本发明一个实施方式的处理源文件的方法的流程图;
图5示意性示出了根据本发明一个实施方式的处理源文件以生成目标文件的框图;
图6示意性示出了根据本发明一个实施方式的处理源文件的框图;以及
图7A示意性示出了根据本发明一个实施方式的处理源文件以生成目标文件的装置的框图,以及图7B示意性示出了根据本发明一个实施方式的处理源文件装置的框图。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
图1示出了适于用来实现本发明实施方式的示例性计算机系统/服务器12的框图。图1显示的计算机系统/服务器12仅仅是一个示例,不应对本发明实施方式的功能和使用范围带来任何限制。
如图1所示,计算机系统/服务器12以通用计算设备的形式表现。计算机系统/服务器12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
计算机系统/服务器12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机系统/服务器12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。计算机系统/服务器12可以进一步包括其他可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图1未显示,通常称为“硬盘驱动器”)。尽管图1中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其他光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施方式的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括——但不限于——操作系统、一个或者多个应用程序、其他程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施方式中的功能和/或方法。
计算机系统/服务器12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机系统/服务器12交互的设备通信,和/或与使得该计算机系统/服务器12能与一个或多个其他计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,计算机系统/服务器12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机系统/服务器12的其他模块通信。应当明白,尽管图中未示出,可以结合计算机系统/服务器12使用其他硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
图2示意性示出了根据一个技术方案的源文件和头文件之间的引用关系的框图200。如图2所示,在源文件和头文件之间可以存在复杂的引用关系。例如,源文件1 220可以引用头文件1 210,源文件2 222可以引用头文件2 212,源文件3 224可以引用头文件1210,以及源文件4 226可以引用头文件2 212。应当注意,尽管图2中仅示出了一个源文件引用一个头文件的情况,本领域技术人员应当理解,一个源文件还可以引用一个以上的头文件。
在附图2中,头文件1 210包括两个部分,分别是定义1 214和定义2 216。尽管源文件1 220和源文件3 224都引用了头文件1 210,然而每个源文件实际上仅调用了头文件1210中的一部分定义。具体而言,源文件1 220仅调用定义2 216,而源文件3 224仅调用定义1214。
根据目前的一个技术方案,由于源文件1 220引用了头文件1210,即使头文件1210中仅有定义1 214部分被更新(即,被更新的部分与源文件1 220无关),源文件1 220也需要被重新编译。在源代码引用多个头文件的情况下,如果一个头文件被更新就需要重新编译源文件,这需要花费大量时间。
针对上文所述的不足,本发明的各个实施方式提出了一种用于处理源文件以生成目标文件的方法,包括:获取由源文件所引用的头文件;响应于源文件调用在头文件中定义的数据符号,创建数据符号的定义的指示符,其中不同数据符号的定义对应于不同的指示符;以及向编译源文件所得的编译结果添加指示符以生成目标文件。
图3示意性示出了根据本发明一个实施方式的处理源文件的技术方案的框图300。如图3所示,头文件310包括定义1 312和定义2 314,源文件320包括调用322。可以获取源文件320所引用的头文件310,并且基于源文件320对在头文件310中定义的数据符号的调用322,来创建数据符号的定义的指示符332。该指示符332指示:源文件320依赖于头文件310中的数据符号的定义。继而,可以将指示符332插入至编译源文件320所得的编译结果以生成目标文件330。
进一步,在已经生成了目标文件330的情况下,还可以基于指示符332来判断头文件中被源文件所调用的数据符号的定义是否被更新。在头文件中被源文件所调用的数据符号的定义被更新的情况下,重新编译源文件;而在头文件中被源文件所调用的数据符号的定义未被更新(无关于头文件中的其他部分是否被更新)的情况下,不必重新编译源文件。
具体而言,图3示出了头文件310和源文件320,并且源文件320仅与定义2 314相关联(如虚线箭头所示),而与定义1 312无关。此时,如果只有定义1 312被更新(如阴影部分所示),则无需重新编译源文件320;如果定义2 314被更新(无关于定义1 312是否被更新),则需要重新编译源文件320。根据本发明的实施方式,可以大大降低需要被重新编译的源代码的数量。
本领域技术人员应当注意,在本发明的上下文中使用的术语“数据符号”可以指在源代码中定义的各种名称,例如,可以包括数据(诸如各种类型的变量)、函数(用于实现特定功能的程序片段)以及面向对象编程语言中的类。应当注意,在C语言中的“struct”可以理解为一种特殊类型的类,本领域技术人员可以参见下文中针对类的处理操作来实现相应的处理,在此不再赘述。
图4A示意性示出了根据本发明一个实施方式的处理源文件以生成目标文件的方法的流程图400A。具体地,在步骤S402A中,获取由源文件所引用的头文件。当源文件引用头文件时,头文件中的代码会被拷贝至源文件的头部,因而在头文件中定义的各个数据符号可以由源文件来调用。在此实施方式中首先应当获取被引用的头文件,以便分析源文件和头文件中的数据符号的定义之间的依赖关系。
在下文中,将结合源代码来描述本发明的各个实施方式。为了方便描述,在下文中以C++语言为具体示例来描述本发明的各个实施方式。本领域技术人员应当理解,在本发明的上下文中,C++语言仅仅是可以应用本发明所述的技术方案的一个具体示例,本发明所述的技术方案还可以应用于包括但不限于C、C++、Object C、C#、Go等的其他静态编程语言,只要这些静态编程语言的源代码可以划分为源文件和头文件即可。例如,头文件和源文件分别如下文表1和表2所示。
在此实施方式中,可以通过源文件“test.cpp”中的代码行#include“test.h”来找到所引用的文件“test.h”。接着,在步骤S404A中,响应于源文件调用在头文件中定义的数据符号,创建数据符号的定义的指示符,其中不同数据符号的定义对应于不同的指示符。在如表2所示的源文件示例中,代码行“b=a”调用了在头文件test.h中定义的整型变量a,因而源文件与整型变量a的定义之间存在依赖关系。
接着在步骤S406A中,向编译源文件所得的编译结果添加指示符以生成目标文件。在此步骤中的编译结果是基于现有技术的编译步骤获得的编译结果。本领域技术人员应当理解,通过编译源文件可以生成目标文件,因而通过向编译结果中添加指示符,可以表明源文件依赖于关联于该指示符所代表的数据符号。
尽管上文表2所示的源文件中仅调用了一个数据符号,在其他实施方式中,源文件可以调用在多个头文件中定义的多个数据符号,本领域技术人员可以参见上文所述的原理来实现相应的操作。
采用如图4A描述的方法,在目标文件中不但保存了编译源代码获得的编译结果,还保存了源文件依赖于哪个(哪些)数据符号的定义。在后续操作中,基于该指示符,在将来需要编译源文件时可以首先检测源文件所调用的数据符号的定义是否被更新,进而判断是否需要重新编译该源文件。
现在参见图5来详细描述如何实现图4A所示的方法。图5示意性示出了根据本发明一个实施方式的处理源文件以生成目标文件的框图500。具体地,图5示出了以C++语言编写的头文件510、源文件520的示例,以及采用图4A所述的方法生成的目标文件530。头文件510中的代码行512是源文件520调用的数据符号“a”的定义。根据上文参见图4A所示的方法,可以创建指示符1 532,并且在目标文件530中插入指示符1 532。
此时,目标文件530即为根据上文图4A所示的方法而生成的目标文件。在已经生成了插入有指示符的目标文件的基础上,本发明进一步提出了一种用于处理源文件的方法,包括:响应于源文件所引用的头文件被更新,在头文件中查找由源文件调用的数据符号的定义;创建数据符号的定义的第一指示符;以及响应于第一指示符匹配于从源文件生成的目标文件中的指示符,通知无需重新编译源文件,其中目标文件是根据本发明的方法生成的,以及创建数据符号的定义的第一指示符的方法与上文所述的创建数据符号的定义的指示符的方法相同。
不同于现有的技术方案,在本发明的一个实施方式中,只有当头文件中被更新的部分与源文件具有依赖关系(即被更新的部分被源文件调用)时,才通知重新编译源文件;否则无需重新编译。具体地,图4B示意性示出了根据本发明一个实施方式的处理源文件方法的流程图400B。首先,在步骤S402B中,响应于源文件所引用的头文件被更新,在头文件中查找由源文件调用的数据符号的定义。本发明旨在解决当头文件被修改时如何减少待编译源代码的数量,因而,在头文件被更新时才触发如图4B所示的方法。
在步骤S404B中,创建数据符号的定义的指示符。在此步骤中,基于更新后的头文件中的数据符号的定义,来创建数据符号的定义的第一指示符,并且创建指示符的方法与上文图4A中创建指示符的方法相同。
在步骤S406B中,响应于第一指示符匹配于从源文件生成的目标文件中的指示符,通知无需重新编译源文件,其中目标文件是根据如图4A示出的方法生成的。由于在从源文件生成的目标文件中已经记载了基于更新前的头文件中的数据符号的定义生成的指示符,在此步骤中通过将在步骤S404B中生成的指示符与目标文件中的指示符进行比较,即可判断源文件中所调用的数据符号的定义是否被更新。
在本发明的一个实施方式中,如图4B所示的方法进一步包括:响应于指示符不匹配于从源文件生成的目标文件中的任一指示符,通知重新编译源文件。在此实施方式中,不匹配表示源文件所调用的数据符号的定义已经被更新,因而此时需要重新编译源文件。
现在将参见图6,以示例方式描述图4B所述方法的细节。图6示意性示出了根据本发明一个实施方式的处理源文件的框图600,该图示出的操作是图5所示的操作的进一步处理。在图6中,源文件520和目标文件530与图5所示的源文件520和目标文件530是相同的,图5和图6的不同之处在于头文件510和头文件610是不同的。具体而言,图5中的头文件510中的代码行512(int a=1)被更新至图6中的头文件610所示的代码行612(int a=10)。则基于更新后的数据符号的定义“int a=10”,按照图4B中的步骤S404B所示的方法,可以生成指示符1’632(如箭头A’所示)。
应当注意,由于在目标文件530中已经存储了基于更新前的数据符号的定义“inta=1”生成的指示符1 532,因而,可以比较指示符1’632和指示符1 532来判断两者是否匹配。
本领域技术人员可以理解,可以采用多种方法来生成数据符号的定义的指示符。一种简单方法可以是,将数据符号的定义本身作为指示符。以此方式,则指示符1 532可以表示为“int a=1”,而指示符1’632可以表示为“int a=10”。通过比较发现,指示符1 532和指示符1’632并不匹配,因而可以发出通知640,指示需要重新编译源文件520。
在此示例中仅仅示意性示出了生成指示符的一个简单方法,本领域技术人员还可以采用其他的方法,只要所生成的指示符可以唯一地指示数据符号的定义即可。在下文中将结合更多示例来描述生成指示符的其他方法。
在本发明的一个实施方式中,参见图4B所示的方法进一步包括:响应于第一指示符不匹配于从源文件生成的目标文件中的任一指示符,重新编译源文件以生成编译结果;以及向编译结果添加指示符以生成新的目标文件。
在此实施方式中,由于头文件的更新影响了源文件的内容,因而需要重新编译该源文件。继而,通过向编译结果中添加基于更新后的头文件中的数据符号的定义而生成的指示符,来生成新的目标文件。该新的目标文件可以标识更新后的头文件中的数据符号的定义,以便在头文件再次被更新时,用作判断是否需要重新编译源文件的依据。
在下文中将详细描述如图4A所示的方法的更多细节。在本发明的一个实施方式中,响应于源文件调用在头文件中定义的数据符号、创建数据符号的定义的指示符包括:在头文件中查找由源文件调用的数据符号的定义;以及基于数据符号的标识符以及数据符号的定义体(body),创建指示符。
继续上文的示例,变量a的定义是“int a=1”,这表示变量a是整型变量并且初始值为1。例如,可以采用二元组(数据符号的标识符,数据符号的定义体)来表示指示符。在此实施方式中可以以(a,1)来表示指示符,或者还可以在变量的标识符中加入变量的类型,以(inta,1)来表示指示符。本领域技术人员应当理解,二元组仅仅是一个示例性的实施方式,本领域技术人员还可以采用其他方式来存储指示符,例如,可以采用其他维度的元组,或者可以基于预定规则将指示符压缩至更小的数据量。
在本发明的一个实施方式中,基于数据符号的标识符以及数据符号的定义体、创建指示符包括:将数据符号的定义体映射至哈希值;以及基于标识符以及哈希值以创建指示符。
应当注意,数据符号的定义体可能涉及较长的字符串,当字符串的长度过长时,采用上文所示的二元组的方法所创建的指示符的长度将会很大,这可能会造成目标文件的数据量增大。此时,可以基于预定的哈希算法,来求解数据符号的定义体的哈希值。在本发明的上下文中,并不限定采用何种哈希算法,本领域技术人员可以采用目前已知的或者将在未来开发哈希算法来实现,在此不再赘述。
在本发明的一个实施方式中,还可以将数据符号的标识符和定义体两者均映射至相应的哈希值,继而基于两个哈希值来创建指示符。或者,还可以将标识符和定义体两者一起映射至一哈希值,并将该哈希值作为指示符。
应当注意,求取哈希值的步骤可以理解为数据压缩的步骤,此步骤可以确保指示符不会占用过多空间。本领域技术人员可以自定义指示符的数据结构,例如,为了确保指示符不会占用过多的空间,可以指定指示符的长度为128位。或者,本领域技术人员还可以指定其他的长度。
在本发明的一个实施方式中,数据符号可以包括多种类型,例如可以包括以下中的至少任一项:数据、函数以及类。
在本发明的一个实施方式中,数据符号是数据,以及将数据符号的定义体映射至哈希值包括:将数据的值映射至哈希值。
在此实施方式中,数据可以是开发人员定义的变量或常量。具体而言,可以包括数值类型(例如,整型(int)和浮点型(float)等)、字符(char)类型,等等诸多类型。此时,可以将数据的值映射至哈希值。例如,如果头文件中定义了如下数据“float c=1.234”,则可以将数据的值“1.234”映射至哈希值。
在本发明的一个实施方式中,数据符号是函数。例如,头文件中包括如上文表1所示的函数“int add2(…){…}”。在编译时该函数将被插入到源文件中,因而函数的具体实现部分(例如,函数add2中{}内的代码部分)的修改也会被完全拷贝到源文件中,因而不必存储函数的实现部分,而是在指示符中只需存储函数的标识符“add2(…)”部分即可。以此方式,当函数的标识符部分被更新时(例如修改函数名称或者输入变量时),通过目标文件中的指示符可以发现函数是否被更新。
应当注意,内联函数是一种特殊类型的函数,内联函数的全部内容将被直接拷贝至调用函数的代码行的位置。在本发明的一个实施方式中,数据符号是内联函数,以及将数据符号的定义体映射至哈希值包括:将内联函数的实现映射至哈希值。
由于内联函数的定义将被拷贝至调用函数的代码行的位置,因而内联函数的定义体(即,函数的实现)中代码的变化也会影响源文件的内容,因而需要将内联函数的实现映射至哈希值。继续上文的示例,当内联函数为“inline int add(…){…}”时,还需要将函数的实现(即,{}内的代码)映射至哈希值。
在本发明的一个实施方式中,数据符号是类,以及将数据符号的定义体映射至哈希值包括:将类的全部成员数据映射至数据哈希值;将类的全部成员函数映射至函数哈希值;以及基于数据哈希值和函数哈希值创建哈希值。
应当理解,类是一种复杂的数据结构,并且类中可以包括数据和函数。在下文表3中示出了类的示例。
在如表3所示的类的定义中,类的标识符为TDate,而在{}内的代码为类的定义体。定义体包括三个成员数据:int year、month、和day;并且包括三个成员函数:void SetDate(int y,int m,int d)、int IsLeapYear()、和void Print()。此时,可以按照上文所述的方法,来逐个处理各个数据和函数。应当注意,由于此时数据和函数都是类的成员,为了唯一地表示每个数据和成员的名称,可以为各个数据和函数添加前缀“TDate”。
以此方式,可以获得各种类型的数据符号的定义的指示符。应当注意,尽管在本发明的上下文中以数据、函数和类为具体示例示出了如何创建数据符号的定义的指示符,本领域技术人员可以基于本发明的原理,针对在本文中没有详细描述的类型的数据符号来创建指示符。
在本发明的一个实施方式中,向编译源文件所得的编译结果添加指示符、生成目标文件包括:根据编译结果的文件格式定义,向编译结果的扩展字段中插入指示符以生成新的目标文件。
应当注意,不同编译器的提供者所定义的目标文件的格式是不同的,本领域技术人员可以查阅各个提供者的文件格式定义,各种目标文件的格式均具有扩展字段,并且开发人员可以自定义该扩展字段的用途。在本发明的上下文中,可以在目标文件格式所支持的扩展字段中插入指示符,以生成根据本发明所述的目标文件。关于目标文件的格式定义,本领域技术人员可以参见http://en.wikipedia.org/wiki/Executable_and_Linkable_Format,在本发明的上下文中将不再赘述。
本领域技术人员应当理解,尽管在本发明的上下文中以向编译结果的扩展字段插入指示符为具体示例说明了如何生成目标文件,本领域技术人员还可以基于其他方式来实现本发明的方法。例如,可以自行设计编译算法并自定义编译结果的文件格式,以便在编译结果中插入基于本发明的方法生成的指示符。
前面已经参考附图描述了实现本发明的方法的各个实施方式。本领域技术人员可以理解的是,上述方法既可以以软件方式实现,也可以以硬件方式实现,或者通过软件与硬件相结合的方式实现。并且,本领域技术人员可以理解,通过以软件、硬件或者软硬件相结合的方式实现上述方法中的各个步骤,可以提供一种基于相同发明构思的一种设备。即使该设备在硬件结构上与通用处理设备相同,由于其中所包含的软件的作用,使得该设备表现出区别于通用处理设备的特性,从而形成本发明的各个实施方式的设备。本发明中所述设备包括若干装置或模块,所述装置或模块被配置为执行相应步骤。本领域的所述技术人员通过阅读本说明书可以理解如何编写程序实现所述装置或模块执行的动作。由于所述设备与方法基于相同的发明构思,因此其中相同或相应的实现细节同样适用于与上述方法对应的装置或模块,由于其在上文中已经进行了详细和完整的描述,因此在下文中可能不再进行赘述。
图7A示意性示出了根据本发明一个实施方式的处理源文件以生成目标文件的装置的框图700A。具体地,图7A提供了一种用于处理源文件以生成目标文件的装置,包括:获取模块710A,配置用于获取由源文件所引用的头文件;创建模块720A,配置用于响应于源文件调用在头文件中定义的数据符号,创建数据符号的定义的指示符,其中不同数据符号的定义对应于不同的指示符;以及生成模块730A,配置用于向编译源文件所得的编译结果添加指示符以生成目标文件。
在本发明的一个实施方式中,创建模块720A包括:查找模块,配置用于在头文件中查找由源文件调用的数据符号的定义;以及第一创建模块,配置用于基于数据符号的标识符以及数据符号的定义体,创建指示符。
在本发明的一个实施方式中,第一创建模块包括:映射模块,配置用于将数据符号的定义体映射至哈希值;以及第二创建模块,配置用于基于标识符以及哈希值以创建指示符。
在本发明的一个实施方式中,数据符号是数据,以及映射模块包括:第一映射模块,配置用于将数据的值映射至哈希值。
在本发明的一个实施方式中,数据符号是内联函数,以及映射模块包括:第二映射模块,配置用于将内联函数的实现映射至哈希值。
在本发明的一个实施方式中,数据符号是类,以及映射模块包括:数据映射模块,配置用于将类的全部成员数据映射至数据哈希值;函数映射模块,配置用于将类的全部成员函数映射至函数哈希值;以及第三映射模块,配置用于基于数据哈希值和函数哈希值创建哈希值。
在本发明的一个实施方式中,生成模块包括:插入模块,配置用于根据编译结果的文件格式定义,向编译结果的扩展字段中插入指示符以生成目标文件。
图7B示意性示出了根据本发明一个实施方式的处理源文件装置的框图700B。具体地,图7B提供了一种用于处理源文件的装置,包括:查找模块710B,配置用于响应于源文件所引用的头文件被更新,在头文件中查找由源文件调用的数据符号的定义;第一创建模块720B,配置用于创建数据符号的定义的第一指示符;以及通知模块730B,配置用于响应于第一指示符匹配于从源文件生成的目标文件中的指示符,通知无需重新编译源文件,其中目标文件是根据本发明的装置生成的,以及第一创建模块与根据本发明的创建模块使用相同的创建算法。
在本发明的一个实施方式中,进一步包括:第二通知模块,配置用于响应于第一指示符不匹配于从源文件生成的目标文件中的任一指示符,通知重新编译源文件。
在本发明的一个实施方式中,进一步包括:编译模块,配置用于响应于第一指示符不匹配于从源文件生成的目标文件中的任一指示符,重新编译源文件以生成编译结果;以及生成模块,配置用于向编译结果添加指示符以生成目标文件。
本领域技术人员应当理解,由于本发明的方法主要涉及针对头文件和源文件内的代码中的字符处理,因而可以在编译过程的前端处理期间实现本发明的各个实施方式所述的方法。由于本发明的方法并不涉及复杂的计算操作,因而并不会对前端处理造成过多的额外开销。
另外,编译期间的后端处理涉及代码优化和目标代码生成,这些操作需要大量的计算资源和时间开销。通常而言,后端处理的时间开销远远大于前端处理的时间开销(通常在上百倍甚至更高的数量级),因而在前端处理中实现本发明的方法的额外时间开销完全可以忽略不计。
采用本发明的各个实施方式的方法和装置,通过在目标文件中插入源文件所调用的数据符号的指示符,可以明确地标识出该源文件依赖于头文件中的哪些部分。进而,在后续的编译期间仅在源文件所依赖的部分被更新时,才重新编译该源文件;否则无需重新编译源文件。以此方式,可以大大降低编译时间。
本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。
计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
用于执行本发明操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标文件,所述编程语言包括面向对象的编程语言—诸如Java、Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施方式中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本发明的各个方面。
这里参照根据本发明实施方式的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其他可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
也可以把计算机可读程序指令加载到计算机、其他可编程数据处理装置、或其他设备上,使得在计算机、其他可编程数据处理装置或其他设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其他可编程数据处理装置、或其他设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
附图中的流程图和框图显示了根据本发明的多个实施方式的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本发明的各实施方式,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施方式。在不偏离所说明的各实施方式的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施方式的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其他普通技术人员能理解本文披露的各实施方式。
Claims (14)
1.一种用于处理源文件以生成目标文件的方法,包括:
获取由所述源文件所引用的头文件;
将数据符号的定义体映射至第一哈希值,其中在所述头文件中定义所述数据符号;
将数据符号的标识符映射至第二哈希值;
响应于所述源文件调用所述数据符号,基于所述第一哈希值和所述第二哈希值创建所述数据符号的定义的第一指示符,其中不同数据符号的定义对应于不同的指示符;以及
向编译所述源文件所得的编译结果的扩展字段中添加所述第一指示符以生成所述目标文件,其中所述扩展字段基于所述编译结果的文件格式定义;
响应于所述源文件所引用的头文件被更新,在所述头文件中查找由所述源文件调用的数据符号的定义;
基于所述数据符号的定义创建第二指示符;
将创建的所述第一指示符和所述第二指示符进行比较;
响应于所述源文件所引用的头文件被更新,在所述头文件中查找由所述源文件调用的数据符号的定义;以及
响应于所述第一指示符匹配于从所述源文件生成的目标文件中的指示符,通知无需重新编译所述源文件。
2.根据权利要求1所述的方法,其中响应于所述源文件调用所述数据符号,基于所述第一哈希值和所述第二哈希值创建所述数据符号的定义的第一指示符包括:
在所述头文件中查找由所述源文件调用的所述数据符号的所述定义;以及
基于所述数据符号的标识符以及所述数据符号的定义体,创建所述第一指示符。
3.根据权利要求1所述的方法,其中所述数据符号是数据,以及所述将所述数据符号的所述定义体映射至哈希值包括:
将所述数据的值映射至所述哈希值。
4.根据权利要求1所述的方法,其中所述数据符号是内联函数,以及所述将所述数据符号的所述定义体映射至哈希值包括:
将所述内联函数的实现映射至所述哈希值。
5.根据权利要求1所述的方法,其中所述数据符号是类,以及所述将所述数据符号的所述定义体映射至哈希值包括:
将所述类的全部成员数据映射至数据哈希值;
将所述类的全部成员函数映射至函数哈希值;以及
基于所述数据哈希值和所述函数哈希值创建所述哈希值。
6.根据权利要求1所述的方法,进一步包括:
响应于所述第一指示符不匹配于从所述源文件生成的目标文件中的任一指示符,通知重新编译所述源文件。
7.根据权利要求1所述的方法,进一步包括:
响应于所述第一指示符不匹配于从所述源文件生成的目标文件中的任一指示符,重新编译所述源文件以生成编译结果;以及
向所述编译结果添加所述第一指示符以生成新的目标文件。
8.一种用于处理源文件以生成目标文件的装置,包括:
获取模块,配置用于获取由所述源文件所引用的头文件;
映射模块,配置用于将数据符号的定义体映射至第一哈希值,以及将数据符号的标识符映射至第二哈希值,其中在所述头文件中定义所述数据符号;
第一创建模块,配置用于响应于所述源文件调用在所述头文件中定义的数据符号,基于所述第一哈希值和所述第二哈希值创建所述数据符号的定义的第一指示符,其中不同数据符号的定义对应于不同的指示符;以及
生成模块,配置用于向编译所述源文件所得的编译结果的扩展字段中添加所述第一指示符以生成所述目标文件,其中所述扩展字段基于所述编译结果的文件格式定义;
查找模块,配置用于响应于所述源文件所引用的头文件被更新,在所述头文件中查找由所述源文件调用的数据符号的定义;
第二创建模块,配置用于基于所述数据符号的定义创建第二指示符;
比较模块,配置用于将创建的所述第一指示符和所述第二指示符进行比较;
所述查找模块响应于所述源文件所引用的头文件被更新,在所述头文件中查找由所述源文件调用的数据符号的定义;以及
第一通知模块,响应于所述第一指示符匹配于从所述源文件生成的目标文件中的指示符,通知无需重新编译所述源文件。
9.根据权利要求8所述的装置,其中所述第一创建模块:
配置用于在所述头文件中查找由所述源文件调用的所述数据符号的所述定义;以及
配置用于基于所述数据符号的标识符以及所述数据符号的定义体,创建所述第一指示符。
10.根据权利要求8所述的装置,其中所述数据符号是数据,以及所述映射模块包括:
第一映射模块,配置用于将所述数据的值映射至所述哈希值。
11.根据权利要求8所述的装置,其中所述数据符号是内联函数,以及所述映射模块包括:
第二映射模块,配置用于将所述内联函数的实现映射至所述哈希值。
12.根据权利要求8所述的装置,其中所述数据符号是类,以及所述映射模块包括:
数据映射模块,配置用于将所述类的全部成员数据映射至数据哈希值;
函数映射模块,配置用于将所述类的全部成员函数映射至函数哈希值;以及
第三映射模块,配置用于基于所述数据哈希值和所述函数哈希值创建所述哈希值。
13.根据权利要求8所述的装置,进一步包括:
第二通知模块,配置用于响应于所述第一指示符不匹配于从所述源文件生成的目标文件中的任一指示符,通知重新编译所述源文件。
14.根据权利要求8所述的装置,进一步包括:
编译模块,配置用于响应于所述第一指示符不匹配于从所述源文件生成的目标文件中的任一指示符,重新编译所述源文件以生成编译结果;以及
生成模块,配置用于向所述编译结果添加所述第一指示符以生成新的目标文件。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410353995.XA CN105335137B (zh) | 2014-07-23 | 2014-07-23 | 用于处理源文件的方法和装置 |
US14/734,796 US10083017B2 (en) | 2014-07-23 | 2015-06-09 | Processing source file |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410353995.XA CN105335137B (zh) | 2014-07-23 | 2014-07-23 | 用于处理源文件的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105335137A CN105335137A (zh) | 2016-02-17 |
CN105335137B true CN105335137B (zh) | 2019-01-18 |
Family
ID=55166820
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410353995.XA Active CN105335137B (zh) | 2014-07-23 | 2014-07-23 | 用于处理源文件的方法和装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US10083017B2 (zh) |
CN (1) | CN105335137B (zh) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10120679B2 (en) * | 2015-07-10 | 2018-11-06 | Google Llc | Automatic imports and dependencies in large-scale source code repositories |
JP6759851B2 (ja) * | 2016-08-22 | 2020-09-23 | 富士通株式会社 | プログラム生成プログラム、プログラム生成方法、プログラム生成装置及びコンパイルプログラム |
CN106325970A (zh) * | 2016-10-17 | 2017-01-11 | 宁德时代新能源科技股份有限公司 | 编译方法和编译系统 |
CN107678748B (zh) * | 2017-09-21 | 2020-05-12 | 杭州迪普科技股份有限公司 | 一种源代码文件编译方法及装置 |
CN107656736A (zh) * | 2017-09-28 | 2018-02-02 | 上海鼎为电子科技(集团)有限公司 | 提高安卓系统编译速度的方法及装置 |
CN107992307B (zh) * | 2017-12-11 | 2021-04-13 | 北京奇虎科技有限公司 | 一种函数编译方法及装置 |
CN108021368B (zh) * | 2017-12-11 | 2021-09-07 | 北京奇虎科技有限公司 | 表征操作系统内核的方法、装置及终端设备 |
CN108153529A (zh) * | 2017-12-22 | 2018-06-12 | 杭州迪普科技股份有限公司 | 一种文件编译的方法及装置 |
CN108446112A (zh) * | 2018-03-27 | 2018-08-24 | 北京邦邦共赢网络科技有限公司 | 一种调用对象的方法和装置 |
CN109634591B (zh) * | 2018-12-29 | 2022-03-01 | 杭州迪普科技股份有限公司 | 一种文件处理方法及装置 |
CN110286934B (zh) * | 2019-06-30 | 2023-04-18 | 潍柴动力股份有限公司 | 一种静态代码的检查方法及装置 |
CN110262803B (zh) * | 2019-06-30 | 2023-04-18 | 潍柴动力股份有限公司 | 一种依赖关系的生成方法及装置 |
CN110377276B (zh) * | 2019-07-19 | 2023-05-23 | 潍柴动力股份有限公司 | 源代码文件管理方法及设备 |
CN110688320B (zh) * | 2019-09-30 | 2023-05-23 | 潍柴动力股份有限公司 | 全局变量的检测方法、装置及终端设备 |
CN113296777B (zh) * | 2020-04-10 | 2022-05-27 | 阿里巴巴集团控股有限公司 | 依赖分析和程序编译方法、设备及存储介质 |
CN111538488B (zh) * | 2020-04-17 | 2023-05-02 | 荏原冷热系统(中国)有限公司 | 一种单片机驱动程序生成方法及装置 |
CN112114811A (zh) * | 2020-08-19 | 2020-12-22 | 上海元城汽车技术有限公司 | 一种编译方法、装置和设备 |
CN113220357A (zh) * | 2021-04-15 | 2021-08-06 | 东风电驱动系统有限公司 | 一种适应多功能的软件配置方法及系统 |
CN113791769A (zh) * | 2021-09-23 | 2021-12-14 | 上海淇玥信息技术有限公司 | 一种复杂结构的数据取值方法、装置和电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5680622A (en) * | 1994-06-30 | 1997-10-21 | Borland International, Inc. | System and methods for quickly detecting shareability of symbol and type information in header files |
US5854932A (en) * | 1995-08-17 | 1998-12-29 | Microsoft Corporation | Compiler and method for avoiding unnecessary recompilation |
CN1529237A (zh) * | 1998-03-24 | 2004-09-15 | 太阳微系统有限公司 | 用于在运行时提高函数的执行性能的方法和计算系统 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5692196A (en) | 1994-08-26 | 1997-11-25 | Silicon Graphics, Inc. | System and method for conditionally compiling a software compilation unit |
US6078744A (en) | 1997-08-01 | 2000-06-20 | Sun Microsystems | Method and apparatus for improving compiler performance during subsequent compilations of a source program |
US6704927B1 (en) * | 1998-03-24 | 2004-03-09 | Sun Microsystems, Inc. | Static binding of dynamically-dispatched calls in the presence of dynamic linking and loading |
US7219330B2 (en) * | 2003-06-26 | 2007-05-15 | Microsoft Corporation | Extensible metadata |
US8327343B2 (en) | 2005-10-20 | 2012-12-04 | Cisco Technology, Inc. | Method and system for optimizing source code |
KR20090011974A (ko) | 2007-07-27 | 2009-02-02 | (주)케이티에프테크놀로지스 | 컴파일 대상 파일 추출 방법 |
CA2675692C (en) | 2009-08-28 | 2012-03-13 | Ibm Canada Limited - Ibm Canada Limitee | Compiler-assisted program source code filter |
US8621448B2 (en) | 2010-09-23 | 2013-12-31 | Apple Inc. | Systems and methods for compiler-based vectorization of non-leaf code |
US8677314B1 (en) | 2011-08-18 | 2014-03-18 | Google Inc. | Modifying a source code file to reduce dependencies included therein |
US8464234B2 (en) * | 2011-10-24 | 2013-06-11 | Google Inc. | Pre-parsed headers for compilation |
US8869125B2 (en) * | 2011-12-27 | 2014-10-21 | Infosys Limited | Systems and methods for demarcating information related to one or more blocks in an application |
-
2014
- 2014-07-23 CN CN201410353995.XA patent/CN105335137B/zh active Active
-
2015
- 2015-06-09 US US14/734,796 patent/US10083017B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5680622A (en) * | 1994-06-30 | 1997-10-21 | Borland International, Inc. | System and methods for quickly detecting shareability of symbol and type information in header files |
US5854932A (en) * | 1995-08-17 | 1998-12-29 | Microsoft Corporation | Compiler and method for avoiding unnecessary recompilation |
CN1529237A (zh) * | 1998-03-24 | 2004-09-15 | 太阳微系统有限公司 | 用于在运行时提高函数的执行性能的方法和计算系统 |
Also Published As
Publication number | Publication date |
---|---|
US10083017B2 (en) | 2018-09-25 |
US20160026443A1 (en) | 2016-01-28 |
CN105335137A (zh) | 2016-02-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105335137B (zh) | 用于处理源文件的方法和装置 | |
CN107632842B (zh) | 规则配置和发布方法、系统、设备及存储介质 | |
CN105335133B (zh) | 用于生成业务规则模型的方法和装置 | |
US11036937B2 (en) | Contraction aware parsing system for domain-specific languages | |
Zipser et al. | A model oriented approach to the mapping of annotation formats using standards. | |
CN105446725B (zh) | 用于模型驱动开发的方法和系统 | |
CN108139891B (zh) | 用于生成建议以纠正未定义标记错误的方法和系统 | |
US10255308B2 (en) | Conforming data structure instances to schema versions | |
CN109597606A (zh) | 使用规则引擎进行业务决策的方法、设备和存储介质 | |
CN105335412A (zh) | 用于数据转换、数据迁移的方法和装置 | |
US10394756B2 (en) | System and method for customizing archive of a device driver generator tool for a user | |
CN103853535B (zh) | 修改中间件的方法和装置 | |
CN105446705B (zh) | 用于确定配置文件的特性的方法和装置 | |
CN109408528A (zh) | 一种数据库脚本生成方法、装置、计算装置和存储介质 | |
CN108595187A (zh) | 安卓安装包集成软件开发工具包的法、装置及存储介质 | |
CN109739600A (zh) | 数据处理方法、介质、装置和计算设备 | |
CN110389786A (zh) | 内核管理方法、设备和计算机程序产品 | |
CN105630763A (zh) | 用于提及检测中的消歧的方法和系统 | |
CN110109891A (zh) | 用于数据迁移的方法、设备和计算机程序产品 | |
US9684497B1 (en) | Optimized compiling of a template function | |
US20220019907A1 (en) | Dynamic In-Memory Construction of a Knowledge Graph | |
CN109324731A (zh) | 信息展现方法和装置 | |
CN116028062A (zh) | 目标代码的生成方法、npu指令的显示方法及装置 | |
CN107102930A (zh) | 一种json格式日志的生成方法及装置 | |
US7917893B2 (en) | Using a system of annotations to generate views and adapters |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |