CN106796522B - 用于更新源代码文件的系统和方法 - Google Patents
用于更新源代码文件的系统和方法 Download PDFInfo
- Publication number
- CN106796522B CN106796522B CN201680003121.9A CN201680003121A CN106796522B CN 106796522 B CN106796522 B CN 106796522B CN 201680003121 A CN201680003121 A CN 201680003121A CN 106796522 B CN106796522 B CN 106796522B
- Authority
- CN
- China
- Prior art keywords
- file
- source code
- patch
- code file
- original source
- 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
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/14—Details of searching files based on file metadata
- G06F16/148—File search processing
-
- 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/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
- G06F9/4856—Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Library & Information Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Stored Programmes (AREA)
Abstract
描述了一种有助于进行高效且有效的应用程序维护和补丁分发的方法和系统。一种设备包括:存储器,用于存储应用源代码文件和创建热补丁文件的指令,其中所述应用源代码文件包括更新源代码文件以及进行应用更新前的初始源代码文件;处理器,用于创建所述热补丁文件,其中:所述热补丁文件是基于一对优化的源代码文件集之间的差异创建的,这对优化的源代码文件集是对第一初始源代码文件集进行优化以及对第二源代码文件集进行单独优化得到的;所述第二文件集包括所述更新源代码文件以及基于指示所述源代码文件之间相关的图方式从所述第一文件集中选择出的关联的文件。
Description
相关申请案交叉申请
本发明要求于2015年1月22日递交的发明名称为“用于更新源代码文件的系统和方法”的第14/603,136号美国非临时专利申请案的在先申请优先权,该在先申请的内容以引入的方式并入本文。
技术领域
本发明通常涉及计算机编程语言中源代码文件更新领域。
背景技术
在商业、科学、教育以及娱乐大多数领域中,许多电子技术如数字计算机、计算器、音频设备、视频设备和电话系统等有助于在数据分析和通信方面提高生产率并降低成本。这些活动经常涉及计算机编程和源代码处理。对源代码文件进行维护和更新是复杂且繁琐的。
源代码文件通常是动态或静态的,两种源代码文件各有其优点和缺点。静态类型的源代码在运行时执行较快,然而较难维护和更新。动态类型的源代码较易维护和更新,但运行相对较慢。在实际情况中,对所述动态类型的源代码进行各种预编译优化来以使其运行更快。然而,进行预编译优化的传统方法增加了复杂性,基本上抵消了动态类型的源代码在维护和更新方面的诸多优势。
动态脚本语言的一个重要特征在于:所述代码可以由解释器直接执行,无需编译过程。这一特征有助于简化热补丁过程。实际上,如果没有对所述动态源代码进行预编译优化且应用的大量文件中的其中一个源代码文件存在漏洞或编程缺陷,则应用维护者仅能将与所述漏洞对应的原始源代码文件用补丁或修复后的源代码文件替换,并将其重新加载到语言解释器中(在打补丁时其他大量的源代码文件保持不变)。然而,当通过预编译优化来解决动态代码运行慢的问题时,预编译优化会给传统的热补丁处理尝试带来挑战。在一传统示例中,第一文件(文件1)中定义常数ABC=100,第二文件(文件2)在运算K=ABC+25中使用所述ABC常数。在进行传统的预编译优化时(如常数传播优化),将文件2中的ABC替换为100,则优化后的文件是K=125。然而,如果文件1中有更改(如定义ABC=200),且所述维护者遵循传统的热补丁处理方法(仅替换文件1而不触及文件2),则打补丁将无法解决所述问题,因为没有对应地去适当考虑对文件2的影响。
为了解决在动态代码应用中预编译优化带来的复杂性和潜在问题,传统方案中通常通过全应用范围预编译来替换所述应用中的全部源代码文件,并重新加载所述全部源文件(例如,与静态代码方法类似)。然而,这些传统方法通常导致三个问题,这些问题减少或消除了与动态类型源代码相关的维护和上传方面的优势。第一个问题是增加了打补丁负荷。即使打补丁主要是针对替换和重新加载修复后的所述文件,但所述传统方法却要求将所有文件进行全局替换和重新加载。第二个问题是增加了预编译复杂性。对企业应用进行全局范围的预编译通常需要很长时间(如几小时或几天等)。原始热补丁模式中则不需要执行这样的步骤。第三个问题是损失了热补丁持续运行的特征。由于一些文件属于特定类型(如基本库或启动加载程序等)且在未中止所述应用时无法被替换,因此所述应用维护者可能会中止该应用来重新加载所有文件。
动态脚本语言如JavaScript、Python、PHP和Lua等广泛应用于构建大型应用。其中一些示例包括:Web前端应用(如Map、Gmail、Calendar、Docs等基于Google网页的工具);Web后端应用(如使用PHP的Facebook应用等);游戏行业应用(如使用Lua的Blizzard公司的魔兽世界等)以及手机应用(如使用Object-C的苹果iOS应用等)。通过传统方法来维护和更新大型应用中含动态脚本语言的一些文件通常是耗时且耗资源的。
发明内容
描述了一种有助于进行高效且有效的应用程序维护和补丁分发的方法和系统。在一实施例中,一种设备包括:存储器,用于存储应用源代码文件和创建热补丁文件的指令,其中所述热补丁文件促进了对所述应用源代码文件的更新,所述应用源代码文件包括更新源代码文件以及进行更新前的初始源代码文件;处理器,用于创建所述热补丁文件,其中:所述热补丁文件是基于一对优化的源代码文件集之间的差异创建的,这对优化的源代码文件集是对第一初始源代码文件集进行优化以及对第二源代码文件集进行单独优化得到的;所述第二文件集包括更新源代码文件以及从所述第一文件集中智能选择出的关联的源代码文件,其中所述第二文件集中的源代码文件比所述第一文件集少;所述源代码文件是动态脚本语言文件;所述第一源代码文件集包括进行更新前的初始源代码文件。
在一种示例性实现方式中,所述处理器创建了用于追踪该第一文件集中所述初始源代码文件之间关联的影响图,其中所述影响图用于识别从所述第一文件集中智能选择出的所述关联的源代码文件。对与所述关联的初始源代码文件有关的所述影响图进行的查询返回两类结果,包括:由于所述更新源代码文件的更改可能也会发生更改的初始源代码文件;以及含输入到所述更新源代码文件的初始源代码文件。所述更新源代码文件包含的语句可能不同于其中一个初始源代码文件中的语句,使用与所述更新源代码文件包括的所述语句有关的查询来对与关联的初始源代码文件有关的影响图进行查询。一部分所述源代码文件包含在动态模块中,且初始补丁文件与所述动态模块关联。所述初始补丁文件用于纠正其中一个初始源代码文件中的漏洞,所述热补丁文件包括对第一个初始源代码文件的更改,而所述更新源代码文件包括对另一初始源代码文件的修改。
在一实施例中,实现一种用于更新应用文件的方法。对多个原始源代码文件进行第一预编译优化,得到多个预优化的原始源代码文件。初始补丁文件与所述多个原始源代码文件中的第一个文件的更改关联。所述方法包括:确定所述多个原始源代码文件中的第二个文件是否与所述初始补丁文件关联,其中如果所述多个原始源代码文件中的第二个文件与所述初始补丁文件关联,则受影响的源代码文件集包含所述多个原始源代码文件中的第二个文件。对所述初始补丁文件和所述受影响的源代码文件集进行第二预编译优化,得到多个与补丁关联的预优化源代码文件。基于以下操作创建新的热补丁文件:将1)所述多个与补丁关联的预优化源代码文件与2)对应的多个预优化的原始源代码文件进行比较。所述新的热补丁文件包括与所述多个预优化的原始源代码文件中一个对应的文件不同的所述多个与补丁关联的预优化源代码文件中的一个文件。
在一可选实施例中,一种装置包括:处理器,用于更新受到热补丁文件影响的应用程序的源代码文件,且如果所述热补丁文件不是启动加载程序文件,则在加载所述热补丁文件时继续运行所述应用,无需重新加载不受所述热补丁文件影响的其他源代码文件。还包括存储器,用于存储针对所述处理器的指令和信息,其中所述信息包括与所述应用关联的多个文件,所述应用包括受到所述热补丁文件影响的文件。所述多个应用文件是动态脚本语言文件。所述热补丁文件不同于初始更新文件。
所述处理器将所述多个应用文件中的一个文件替换为所述热补丁文件,并在避免编译所述热补丁文件时重新加载到语言解释器中。
应理解的是,可以采用各种技术(如常数广播、死码删除和循环不变码移动等),这些技术可以带来各种不同的结果。当确定采用优化方法时也需要考虑各种因素(如优化时使用的处理资源,以及优化的运行文件中引入的复杂性等)。此处使用的术语“优化”指的是基于某种考虑或标准生成能够改进所述原始源代码文件性能(如针对优化中引入的复杂性提高运行速度等)的文件集的过程。所述术语“优化”是编程以及编译等计算机技术的合计,此处用于此目的。此处使用的术语“优化”不一定指的是应用运行速度的绝对优化(如最快和最佳等)。
附图说明
附图并入且构成说明书的一部分,用于示例性解释本发明的原则,而非将本发明限定于此处描述的特定实现方式。除非另有说明,附图不是按照比例绘制的。
图1为本发明实施例提供的一种示例性计算机编程环境的方框图;
图2为本发明实施例提供的一种示例性影响图;
图3为本发明实施例提供的一种示例性应用源代码文件的方框图;
图4为本发明实施例提供的一种示例性系统架构的方框图;
图5为本发明实施例提供的一种示例性更新实现方式的方框图;
图6为本发明实施例提供的一种示例性运行源代码文件的方框图;
图7为本发明实施例提供的一种示例性方法的流程图。
具体实施方式
现将详细地对本发明的各种实施例、附图示出的示例做出参考。虽然会结合这些实施例进行描述,但可以理解的是它们并不用于将本发明限制于这些实施例。相反,本发明公开旨在覆盖可以包括在由所附权利要求书限定的本发明公开的精神和范围内的替代物、更改和等同物。另外,在以下本发明的详细描述中,阐述了许多特定细节以便提供对本发明的透彻理解。然而,可以理解的是,实际应用中,可以不包括本发明的这些特定细节。在其它实例中没有详细描述众所周知的方法、流程、部件和电路,以免对本发明的各方面造成不必要地模糊。
描述了一种用于计算机程序发展的方法和系统,其有助于进行高效且有效的应用程序维护和补丁分发。在一实施例中,采用小的有效热补丁文件对优化的动态脚本文件进行更新或“打补丁”。创建的所述热补丁文件利用更新影响文件来避免多个全局预编译优化过程。在运行环境中,在将不受所述热补丁文件影响的源代码文件进行重新加载的需求最小化时,所述热补丁文件有助于应用操作延续性。所述更新或打补丁与各种应用维护环境和更新环境(如分布式的、本地的以及网络化的等)是兼容的。
图1为本发明实施例提供的一种示例性环境100的方框图。所述环境100包括系统101和系统102,其中所述系统101和所述系统102可以相隔很远。所述系统101创建热补丁文件103,所述热补丁文件103将转发到所述系统102。所述系统102执行应用且使用所述热补丁103来更新所述应用包含的文件。
所述系统101包括处理组件110和存储器120,其中所述处理组件110基于多个原始应用文件和初始补丁文件创建热补丁文件。所述初始补丁文件与正被更新的其中一个原始应用文件对应。所述处理组件110对所述多个原始应用文件进行第一优化以创建第一优化文件集。对与所述初始补丁文件关联的所述原始应用文件进行识别和更新以反映所述初始补丁文件中包含的更改。
所述处理组件110对得到的更新文件进行第二优化以创建第二优化文件集。将所述第一优化文件集与所述第二文件集进行比较。与所述第一文件集中对应文件不同的所述第二文件集中的文件包含在热补丁文件中。
所述处理器110访问并使用所述存储器120中存储的信息。所述信息包括:所述多个原始应用文件122;所述初始补丁文件123;以及指示所述处理器创建所述热补丁文件103的指令,包括对受到所述初始补丁文件123的更新影响的所述原始应用文件122进行识别并更新。所述原始应用文件122包括源代码文件131、132、133和134。所述初始补丁文件123包括源代码文件151。
所述系统102包括处理组件170和存储器180,其中在运行应用时所述处理组件170访问热补丁文件103。至少一个应用文件受到所述热补丁文件103的影响,所述处理组件170对受到该热补丁文件103影响的所述文件(如打补丁后的代码文件193等)进行更新。如果所述热补丁文件103不是启动加载程序文件,则不中止所述应用且不重新加载未受所述热补丁文件103影响的文件(如源代码文件191、192和194等)。因此,不需要进行全局预优化以及全局重新加载过程。所述处理器170访问并利用所述存储器180中存储的信息,其中所述信息包括与所述应用关联的多个文件(如源代码文件191、192和194等),所述应用包括受到所述热补丁文件103的更新所影响的文件(如打补丁后的代码文件193等)。
在一种示例性实现方式中,所述系统101可以位于应用供应商处,而所述系统102位于远端的客户位置。客户在所述系统102中运行供应商提供的应用。所述供应商使用系统101来创建、分发和维护所述应用,包括创建所述热补丁文件103,其中所述热补丁文件103将转发到所述客户以更新所述应用文件。可以通过各种方式(如通过网络或者如光盘、闪存盘等便携式计算机可读介质)将所述热补丁文件传送到所述系统102。
应理解的是,可以采用各种技术(如常数广播、死码删除和循环不变码移动等),这些技术可以带来各种不同的结果。当确定采用优化方法时也需要考虑各种因素(如优化时使用的处理资源,以及优化的运行文件中引入的复杂性等)。此处使用的术语“优化”指的是基于某种考虑或标准生成能够改进所述原始源代码文件性能(如针对优化中引入的复杂性提高运行速度等)的文件集的过程。所述术语“优化”是编程以及编译等计算机技术的合计,此处用于此目的。此处使用的术语“优化”不一定指的是应用运行速度的绝对优化(如最快和最佳等)。
在一实施例中,影响图用来识别与初始更新或补丁文件关联的原始应用文件。所述影响图是在优化所述原始或初始源代码文件时创建的。该图是有向图,其中节点表示源代码文件,边表示从优化数据源开始到优化后的文件结束的优化影响。在一示例中,第一文件(文件1)中定义常数ABC=100,第二文件(文件2)在运算中使用所述ABC常数。常数传播优化中将文件2中的ABC替换为100。在该示例中,所述图中有从文件1到文件2的边。
在一示例性实施例中,计算机实现的系统101包括:第一预编译优化模块,用于在处理器中对多个原始源代码文件进行第一预编译优化,得到多个预优化的原始源代码文件;补丁文件访问模块,用于访问与所述多个原始源代码文件中的第一个文件的更改关联的初始补丁文件;确定模块,用于确定所述多个原始源代码文件中的第二个文件是否与所述初始补丁文件关联,其中如果所述第二个文件与所述初始补丁文件关联,则受影响的源代码文件集包含所述第二个文件;第二预编译优化模块,用于对所述初始补丁文件和所述受影响的源代码文件集进行第二预编译优化,得到多个与补丁关联的预优化源代码文件;比较模块,用于将所述多个与补丁关联的预优化源代码文件与对应的多个预优化的原始源代码文件进行比较,并且识别新的热补丁文件,其中所述新的热补丁文件包括与所述多个预优化的原始源代码文件中对应的文件不同的所述多个与补丁关联的预优化源代码文件中的文件。在一些实施例中,所述计算机实现的系统101可以包括其他或者附加模块,用于执行所述实施例中描述的任一或组合的步骤。
图2为本发明实施例提供的一种示例性影响图的图。所述影响图包括与多个原始源代码文件对应的多个节点A、B、C、D、E、F、和G,以及反映优化操作(从优化数据源开始到优化后的文件结束)影响的各个边。节点A为执行各种功能的节点B和C定义常数。将节点A的输出输入到节点B和C,将节点B和C的输出输入到节点D,将节点C的输出输入到节点E,且将节点E的输出输入到节点F和G。在热补丁阶段中,如果存在打补丁或修复后的原始源代码文件,则使用所述图来定位或选择相关或关联的文件(例如,节点B和C与节点D关联等),且在优化中使用所选择的文件。在“小范围”预优化中使用所述关联的更新源代码文件(例如,源代码文件的范围或数量比原先进行的全局优化小)。所述选择可以覆盖大量不同的源代码文件。
在传统方法中,不创建影响图且不使用所述影响图来识别关联的文件。在一示例性实现方式中,查询所述影响图可以带来包括以下两类节点的输出:图中通过与所述补丁文件关联的节点可到达的节点,以及图中可以到达与所述补丁文件关联的节点的节点。第一类指的是由于所述补丁文件的修改可以被更改的文件,而第二类指的是使用所述补丁文件来进行预编译优化的文件。
在一实施例中,源代码文件包含在不同类别或集合的源代码文件中。例如,在引入补丁文件前,有包含用户写程序代码(如写程序指令、声明、语句或函数等)创建的源代码文件的初始应用文件集。有包含对所述初始应用集的源代码文件进行用户写更改或更新所创建的源代码文件的更新主文件集。有对所述原始源代码文件(也叫做“预优化”文件)进行编译优化得到的源代码文件集等等。
图3为本发明实施例提供的一种示例性应用源代码文件的方框图。将所述源代码文件按照各种类别或集合排列。初始文件集210包括源代码文件211、212、213、214、215、216、217、218和219。更新主文件集220包括源代码文件221。更新主文件集230包括源代码文件231。更新辅文件集240包括源代码文件241和242。更新辅文件集250包括源代码文件251和252。不同类别或集合中的源代码文件之间可以具有各种操作关系,包括相互之间直接对应、相互之间间接关联以及相互之间操作上没有关联。为确保能通过打补丁将合适的源代码文件进行更新,确定和追踪所述源代码文件之间的关系是很重要的。
在一实施例中,所述初始文件集中的第一源代码文件包括用户做出的特征更改(如重写指令或定义常数等),其中所述特征更改直接与初始补丁文件的特征更改或更新对应。例如,所述源代码文件213的指令CAR=GID–50直接对应于源代码221的指令更改,而所述源代码文件215的常数定义FT=175直接对应于所述源代码231的常数定义FT=148的更改。所述初始应用文件集中的第二源代码文件包括与所述初始补丁文件的更改间接关联的特征。例如,所述源代码文件211包括常数定义GID=200,其不根据所述初始补丁文件221直接更改,而是与所述初始补丁文件221中更改后的指令CAR=CID+10间接关联。类似地,所述源代码文件214包括指令Print(CAR),其不根据所述初始补丁文件221直接更改,而是与所述初始补丁文件221中更改后的指令CAR=CID+10间接关联(因为所述初始补丁文件221不“直接”包括所述PRINT指令,但所述补丁文件221中的更改会改变所述文件214中变量CAR的最后打印输出)。
在一示例性实现方式中,所述初始应用集包括的一些源代码文件(如与初始补丁文件间接相关的源代码文件)也可以包含在所述更新辅文件集中。所述更新辅文件集240包括的源代码文件241和242与所述初始文件集210中的源代码文件211和214相同,所述更新辅文件集250包括的源代码文件251和252与所述初始文件集210中的源代码文件218和219相同。应理解的是,所述更新辅文件集可以有各种配置。所述更新辅文件集可以直接使用所述初始集中的源代码文件,或所述更新辅文件集可以使用所述更新辅文件集的备份。
在一示例性实现方式中,仅预优化的有更改的更新文件包含在热补丁中且被重新加载。尽管有比输入补丁文件更多受到影响的文件,但是范围通常比应用中包含的所有源代码文件要小得多。由于受影响的文件范围小,预优化比传统的全局范围预优化速度快。如果更新的文件不属于启动加载程序,则所述受影响的文件也不属于所述启动加载程序。因此,所述应用的维护者在不中止所述应用时也可以采用补丁。
图4为本发明实施例提供的一种示例性架构的方框图。预编译优化器381对初始文件集310(如包括源代码文件311、312、313和314)进行优化得到初始预优化文件集320(如包括源代码文件321、322、323和324),其中所述初始预优化文件集320将被转发到运行应用395中。所述预编译优化器还可以用于创建影响图370,其有助于追踪源代码文件311、312、313和314之间的关联(如追踪哪个文件包含另一文件使用的值,或哪个文件包含影响另一文件操作或指令的指令等)。
更新主文件集330包括源代码文件331,其包括针对所述应用的更改或更新。在一示例性实现方式中,初始补丁文件331的更新直接对应于源代码文件312,而所述初始补丁文件331是针对所述源代码文件312的一种“替换”。然而,所述源代码文件331包含在所述更新主文件330中,且直接对应于所述原始源代码文件312。需要注意的是所述源代码文件331不一定直接对应于热补丁文件390中包括的“替换”源代码文件391,其将在详细描述的后续部分进一步说明。应理解的是,在另一示例性实现方式中,所述更新主文件集包括一个以上初始补丁文件331。
将询问所述原始源代码文件中哪些文件与所述初始补丁文件331间接关联的查询转发到影响图370。如上所述,所述影响图370追踪所述原始应用文件之间的关联,包括追踪所述源代码文件312与其他源代码文件311、313和314之间的间接关联。
在一示例性实现方式中,所述影响图370将所述源代码文件312识别为与所述源代码文件314关联,且由于所述源代码文件312直接对应于所述初始补丁文件331,因此所述影响图370指示所述源代码文件314与所述初始补丁文件331关联。访问源代码331并作为源代码文件341包含在更新辅文件集340中。应理解的是,初始文件集310中包括的其他源代码文件可以与其他初始补丁文件(未示出)关联。预编译优化器382对来自该更新主文件集330中的所述初始补丁文件331和来自该更新辅文件集340中的所述源代码文件341进行优化,输出更新后的预优化文件集350(如包括源代码文件351和352)。
将所述初始预优化文件集320(如包括源代码文件321、322、323和324)和所述更新后的预优化文件集350(如包括源代码文件351和352)转发到比较器383,所述比较器383确定了所述更新后的预优化文件集350中包含的哪些源代码文件不同于所述初始预优化文件集320中的源代码文件。得到的不同的源代码文件391包含在热补丁文件集390中,且将所述热补丁文件集390转发到应用395。在一示例性实现方式中,使用所述初始预优化文件320来运行所述应用,然后在稍后的时间里将所述热补丁文件390转发到所述应用395,用来在无需中止所述应用下更新所述应用。
在一实施例中,图4中上半部分进行的预编译优化381是对所述初始文件集310中包含的文件进行的全局优化(例如,类似于传统的全局方法)。图4中后半部分执行的预编译优化382是对所述主更新文件集和所述更新辅文件集中的源代码文件的组合优化,其避免了对所述初始文件集310中的其他源代码文件的再优化。所述初始文件集310中包含的源文件可以是基于动态脚本语言的应用文件。
图5为本发明实施例提供的一种示例性更新实现方式的方框图。
初始文件集410包括四个源代码文件411、412、413和414,其中这些文件输入到预优化器481,而所述预优化器481反过来输出初始预优化文件集420。所述初始预优化文件集420不再使用源代码文件411中的FID和GID变量定义以及源代码文件413包括的CAR=GID–50指令,因此将这些语句从源代码文件421和423中移除。预优化器481也生成影响图470。所述初始补丁文件221用于查询所述影响图470,其反映了所述源代码文件411和414与所述源代码文件413之间间接关联。对源代码文件331、411和414进行优化得到更新后的预优化文件集450(包括源代码文件451、452和453)。比较器483将所述初始预优化文件集420和所述更新预优化文件集450中的源代码文件进行比较,被识别为不同的源代码文件(如源代码文件491)包含在热补丁文件490中。在进行比较后,仅源代码文件424(“文件4”)发生了变化,且最后一个热补丁文件是新的源代码文件453(新“文件4”)。最后,将所述热补丁文件集运用到运行应用中。
图6为本发明实施例提供的运行源代码文件的一种示例性实现方式的方框图。应用运行文件510在更新前包括源代码文件421、422、423和424,应用运行文件520在更新后包括源代码文件421、422、423和453。将含指令PRINT(150)的所述源代码文件424替换为包括含指令为PRINT(210)的源代码文件453的热补丁文件。生成的热补丁文件可能不同于初始补丁文件。在运行应用中简单地采用所述初始补丁文件431不能带来精确可靠的结果。如果将所述初始补丁文件431简单地运用到所述更新的应用运行文件520中,则所述补丁文件不能查找到GID定义(因为源代码文件421已经不再包括GID定义),且不正确的原始值150而非更新值210将会被打印出。
图7为本发明实施例提供的一种示例性方法700的流程图。所述方法700中的操作可以由计算机系统中的处理器执行(例如,类似于处理组件110等)。
在块710,对多个原始源代码文件进行第一预编译优化,得到多个预优化的原始源代码文件。
在块720,访问与所述多个原始源代码文件中的第一个文件的更改关联的初始补丁文件。
在块730,确定所述多个原始源代码文件中的第二个文件是否与所述初始补丁文件关联,其中如果所述多个原始源代码文件中的第二个文件与所述初始补丁文件关联,则受影响的源代码文件集包含所述多个原始源代码文件中的第二个文件。在一实施例中,确定所述多个原始源代码文件中的另一个文件是否与所述初始补丁文件关联的过程包括:1)创建影响图,其中所述影响图包括所述多个原始源代码文件之间的关联;2)查询所述影响图以识别哪个原始源代码文件与补丁源代码文件关联。
在块740,对所述初始补丁文件和所述受影响的源代码文件集进行第二预编译优化,得到多个与补丁关联的预优化源代码文件。
在块750,将所述多个与补丁关联的预优化源代码文件与对应的多个预优化的原始源代码文件进行比较。通过所述比较结果来识别新的热补丁文件中包含的源代码文件。所述新的热补丁文件包括与所述多个预优化的原始源代码文件中一个对应的文件不同的所述多个预优化补丁源代码文件中的一个文件。所述热补丁文件不同于所述初始补丁文件。与补丁关联的预优化源代码文件比预优化的原始源代码文件少。
在一实施例中,所述多个原始源文件中的一部分文件包含在动态模块中,且补丁文件与所述动态模块关联。通过采用新的维护和更新方法来减少使用若干动态模块的系统中的打补丁操作,其中所述若干动态模块是从源文件中预编译得到的。采用动态或静态语言来写所述模块,且所述模块支持动态替换。如果所述源文件中有漏洞补丁,则需要识别所述动态模块且在动态模块层上进行替换。所述动态模块支持动态替换,且所述动态模块在进行热补丁操作时被替换。
在一实施例中,实现其他优化。所述影响图的边源是文件,将粒度减小到语句层(或编译器抽象语法树节点层)。在打补丁过程中,识别所述补丁文件中更改的语句,且使用该语句来查询所述影响图。这种优化还可以进一步减小查询结果的范围,且减少预优化和打补丁的时间。
相对于基于传统静态语言的应用中的更新或打补丁,此处描述的新的实施例在系统结构和打补丁过程方面都不同。在打补丁系统结构侧,不同于传统静态语言,新的过程引入了影响图。在处理侧,有与影响图查询和预编译结果比较相关的其他步骤。这两个步骤有助于减少打补丁过程中的预编译操作,且还有助于减少打补丁负荷。
本文中所述的实施例是以计算机可执行指令(例如程序模块)的大背景来讨论的,这些计算机指令位于某种形式的计算机可读介质,并由一个或多个计算机或其它设备执行。举例来说,计算机可读存储介质可以包括非瞬时性计算机存储介质。非瞬时性计算机可读存储介质包括除暂存传播信号之外的所有计算机可读介质。计算机可读的存储介质包括在用于存储计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术中所实现的易失性和非易失性、可移动和不可移动介质。一般而言,程序模块包括例程、程序、对象、组件以及数据结构等,其执行特定任务或实现特定抽象数据类型。根据各种实施例中的需要,程序模块的功能可以组合或分布。
尽管本文中已经揭示某些优选实施例和方法,但所属领域的技术人员将从前述揭示内容显而易见,在不脱离本发明的精神和范围的情况下可以对此类实施例和方法进行变化和更改。希望本发明将仅限于所附权利要求书以及可适用法律的规则和原理所需的范围。
Claims (18)
1.一种用于更新源代码文件的设备,其特征在于,包括:
处理器,所述处理器被配置为:
对多个原始源代码文件进行第一预编译优化,得到多个预优化的原始源代码文件;
访问与所述多个原始源代码文件中的第一个文件的更改关联的初始补丁文件;
确定所述多个原始源代码文件中的第二个文件是否与所述初始补丁文件关联,其中如果所述第二个文件与所述初始补丁文件关联,则受影响的源代码文件集包含所述第二个文件;
对所述初始补丁文件和所述受影响的源代码文件集进行第二预编译优化,得到多个与补丁关联的预优化源代码文件;
将所述多个与补丁关联的预优化源代码文件与对应的多个预优化的原始源代码文件进行比较,并且识别新的热补丁文件,其中所述新的热补丁文件包括与所述多个预优化的原始源代码文件中对应的文件不同的所述多个与补丁关联的预优化源代码文件中的文件,所述新的热补丁文件不同于所述初始补丁文件。
2.根据权利要求1所述的设备,其特征在于,与补丁关联的预优化源代码文件比预优化的原始源代码文件少。
3.根据权利要求1或2所述的设备,其特征在于,所述确定包括:
创建影响图,其中所述影响图包括所述多个原始源代码文件之间的关联;
查询所述影响图以识别所述多个原始源代码文件中的哪些文件与所述初始补丁文件关联。
4.根据权利要求3所述的设备,其特征在于,所述影响图包括与所述多个原始源代码文件对应的多个节点以及表示从优化数据源开始到优化后的文件结束的优化影响的图边。
5.根据权利要求1或2所述的设备,其特征在于,所述多个原始源文件中的一部分文件包含在动态模块中,且所述初始补丁文件与所述动态模块关联。
6.根据权利要求5所述的设备,其特征在于,所述动态模块支持动态替换,且所述动态模块在进行热补丁操作时被替换。
7.根据权利要求3所述的设备,其特征在于,所述多个原始源文件中的一部分文件包含在动态模块中,且所述初始补丁文件与所述动态模块关联。
8.根据权利要求4所述的设备,其特征在于,所述多个原始源文件中的一部分文件包含在动态模块中,且所述初始补丁文件与所述动态模块关联。
9.根据权利要求7或8所述的设备,其特征在于,所述动态模块支持动态替换,且所述动态模块在进行热补丁操作时被替换。
10.一种用于更新源代码文件的方法,其特征在于,包括:
在处理器中对多个原始源代码文件进行第一预编译优化,得到多个预优化的原始源代码文件;
访问与所述多个原始源代码文件中的第一个文件的更改关联的初始补丁文件;
确定所述多个原始源代码文件中的第二个文件是否与所述初始补丁文件关联,其中如果所述第二个文件与所述初始补丁文件关联,则受影响的源代码文件集包含所述第二个文件;
对所述初始补丁文件和所述受影响的源代码文件集进行第二预编译优化,得到多个与补丁关联的预优化源代码文件;
将所述多个与补丁关联的预优化源代码文件与对应的多个预优化的原始源代码文件进行比较,并且识别新的热补丁文件,其中所述新的热补丁文件包括与所述多个预优化的原始源代码文件中对应的文件不同的所述多个与补丁关联的预优化源代码文件中的文件,所述新的热补丁文件不同于所述初始补丁文件。
11.根据权利要求10所述的方法,其特征在于,与补丁关联的预优化源代码文件比预优化的原始源代码文件少。
12.根据权利要求10或11所述的方法,其特征在于,所述确定包括:
创建影响图,其中所述影响图包括所述多个原始源代码文件之间的关联;
查询所述影响图以识别所述多个原始源代码文件中的哪些文件与所述初始补丁文件关联。
13.根据权利要求12所述的方法,其特征在于,所述影响图包括与所述多个原始源代码文件对应的多个节点以及表示从优化数据源开始到优化后的文件结束的优化影响的图边。
14.根据权利要求10或11所述的方法,其特征在于,所述多个原始源文件中的一部分文件包含在动态模块中,且所述初始补丁文件与所述动态模块关联。
15.根据权利要求14所述的方法,其特征在于,所述动态模块支持动态替换,且所述动态模块在进行热补丁操作时被替换。
16.根据权利要求12所述的方法,其特征在于,所述多个原始源文件中的一部分文件包含在动态模块中,且所述初始补丁文件与所述动态模块关联。
17.根据权利要求13所述的方法,其特征在于,所述多个原始源文件中的一部分文件包含在动态模块中,且所述初始补丁文件与所述动态模块关联。
18.根据权利要求16或17所述的方法,其特征在于,所述动态模块支持动态替换,且所述动态模块在进行热补丁操作时被替换。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/603,136 | 2015-01-22 | ||
US14/603,136 US9569199B2 (en) | 2015-01-22 | 2015-01-22 | Systems and methods to update source code files |
PCT/CN2016/071485 WO2016116051A1 (en) | 2015-01-22 | 2016-01-20 | Systems and methods to update source code files |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106796522A CN106796522A (zh) | 2017-05-31 |
CN106796522B true CN106796522B (zh) | 2019-11-26 |
Family
ID=56416450
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680003121.9A Active CN106796522B (zh) | 2015-01-22 | 2016-01-20 | 用于更新源代码文件的系统和方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US9569199B2 (zh) |
EP (1) | EP3204849B1 (zh) |
KR (1) | KR102010508B1 (zh) |
CN (1) | CN106796522B (zh) |
WO (1) | WO2016116051A1 (zh) |
Families Citing this family (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9639343B2 (en) * | 2014-08-29 | 2017-05-02 | Nxp Usa, Inc. | Method for altering execution of a program, debugger, and computer-readable medium |
US20170300317A1 (en) * | 2016-03-24 | 2017-10-19 | Knight Point Systems, Inc. | System and method for patching software in a target computer system device |
US20200192648A1 (en) * | 2017-04-26 | 2020-06-18 | Everynet Bv | Differential Optimizing Code Transformation |
CN107908402A (zh) * | 2017-08-15 | 2018-04-13 | 口碑(上海)信息技术有限公司 | Java服务端热修复方法和系统 |
CN108182083B (zh) * | 2017-12-06 | 2021-12-24 | 中国航空工业集团公司西安航空计算技术研究所 | 一种支持断点调试的取指译码电路 |
CN108037947B (zh) * | 2017-12-11 | 2021-09-07 | 北京奇虎科技有限公司 | 补丁包加载方法及其装置、终端 |
CN108415719B (zh) * | 2018-03-29 | 2019-03-19 | 网易(杭州)网络有限公司 | 代码热更新方法和装置、存储介质、处理器及终端 |
CN109491698B (zh) * | 2018-12-29 | 2022-07-08 | 武汉思普崚技术有限公司 | 基于热补丁的系统更新方法及装置 |
CN109739487B (zh) * | 2019-01-04 | 2022-03-29 | 广州市玄武无线科技股份有限公司 | 一种业务逻辑处理方法、设备及计算机可读存储介质 |
CN109828772B (zh) * | 2019-02-19 | 2022-03-11 | 百度在线网络技术(北京)有限公司 | 热更新方法、操作系统、终端设备和存储介质 |
US20200371778A1 (en) * | 2019-05-21 | 2020-11-26 | X Development Llc | Automated identification of code changes |
US10997056B1 (en) * | 2019-10-09 | 2021-05-04 | Fujitsu Limited | Generation of explanatory and executable repair examples |
CN110865837B (zh) * | 2019-11-14 | 2023-08-18 | 青岛海信移动通信技术有限公司 | 一种进行系统升级的方法和终端 |
CN113805928A (zh) * | 2020-06-12 | 2021-12-17 | 中兴通讯股份有限公司 | 热补丁文件生成、一致性检测方法、装置、设备和介质 |
CN111913730A (zh) * | 2020-07-15 | 2020-11-10 | 上海莉莉丝科技股份有限公司 | 用户无感的应用程序内更新方法及用户端、程序服务器 |
US11392364B2 (en) | 2020-09-28 | 2022-07-19 | Red Hat, Inc. | Adaptive hot reload for class changes |
CN112612502A (zh) * | 2020-12-23 | 2021-04-06 | 苏州三六零智能安全科技有限公司 | 补丁生成方法、装置、设备及存储介质 |
US11237952B1 (en) * | 2021-04-07 | 2022-02-01 | State Farm Mutual Automobile Insurance Company | Runtime class recompilation during mutation testing |
US11163675B1 (en) | 2021-04-07 | 2021-11-02 | State Farm Mutual Automobile Insurance Company | Mutation testing in parallel threads |
US11847433B2 (en) * | 2021-09-10 | 2023-12-19 | Microsoft Technology Licensing, Llc | Source code editing combining edit and continue with hot reload |
US11573787B1 (en) * | 2021-09-10 | 2023-02-07 | Microsoft Technology Licensing, Llc | Hot reloading a running application with an unsaved source code change |
CN115309403A (zh) * | 2022-08-09 | 2022-11-08 | 鼎捷软件股份有限公司 | 自动编译系统及其方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6594822B1 (en) * | 1999-02-19 | 2003-07-15 | Nortel Networks Limited | Method and apparatus for creating a software patch by comparing object files |
CN101799763A (zh) * | 2009-02-10 | 2010-08-11 | 华为技术有限公司 | 内核在线补丁的方法、装置和系统 |
CN103870310A (zh) * | 2014-02-18 | 2014-06-18 | 小米科技有限责任公司 | 程序编译方法及相关装置 |
CN103984582A (zh) * | 2014-06-04 | 2014-08-13 | 网易(杭州)网络有限公司 | 一种热更新方法和装置 |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7251812B1 (en) * | 2001-10-31 | 2007-07-31 | Microsoft Corporation | Dynamic software update |
TWI278750B (en) * | 2002-09-05 | 2007-04-11 | Mediatek Inc | System and method which updates firmware in a non-volatile memory without using a processor |
US7784044B2 (en) * | 2002-12-02 | 2010-08-24 | Microsoft Corporation | Patching of in-use functions on a running computer system |
US20050257205A1 (en) * | 2004-05-13 | 2005-11-17 | Microsoft Corporation | Method and system for dynamic software updates |
US8606950B2 (en) * | 2005-06-08 | 2013-12-10 | Logitech Europe S.A. | System and method for transparently processing multimedia data |
US7853934B2 (en) * | 2005-06-23 | 2010-12-14 | Hewlett-Packard Development Company, L.P. | Hot-swapping a dynamic code generator |
US8203563B2 (en) * | 2006-06-16 | 2012-06-19 | Nvidia Corporation | System, method, and computer program product for adjusting a programmable graphics/audio processor based on input and output parameters |
US8266597B2 (en) * | 2008-06-16 | 2012-09-11 | International Business Machines Corporation | Dynamically patching computer code using breakpoints |
US20100083324A1 (en) * | 2008-09-30 | 2010-04-01 | Microsoft Corporation | Synchronized Video Playback Among Multiple Users Across A Network |
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 |
US8607208B1 (en) * | 2008-10-01 | 2013-12-10 | Oracle International Corporation | System and methods for object code hot updates |
US8468516B1 (en) * | 2008-12-19 | 2013-06-18 | Juniper Networks, Inc. | Creating hot patches for embedded systems |
US9292343B2 (en) * | 2010-06-30 | 2016-03-22 | Oracle International Corporation | Method and system for performing deployment management |
CN103309683B (zh) | 2012-03-07 | 2016-08-03 | 京信通信系统(中国)有限公司 | 硬件设备的软件补丁嵌入方法及装置 |
US9256419B2 (en) | 2012-04-23 | 2016-02-09 | Hewlett Packard Enterprise Development Lp | Dynamic software updates |
US9489286B2 (en) * | 2013-01-30 | 2016-11-08 | Nec Corporation | Method and system for computer assisted hot-tracing mechanism |
US9158914B2 (en) * | 2013-04-19 | 2015-10-13 | Crowdstrike, Inc. | Executable component injection utilizing hotpatch mechanisms |
CN103559449B (zh) | 2013-11-15 | 2016-09-21 | 华为技术有限公司 | 一种代码改动的检测方法及装置 |
-
2015
- 2015-01-22 US US14/603,136 patent/US9569199B2/en active Active
-
2016
- 2016-01-20 CN CN201680003121.9A patent/CN106796522B/zh active Active
- 2016-01-20 WO PCT/CN2016/071485 patent/WO2016116051A1/en active Application Filing
- 2016-01-20 KR KR1020177014909A patent/KR102010508B1/ko active IP Right Grant
- 2016-01-20 EP EP16739798.3A patent/EP3204849B1/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6594822B1 (en) * | 1999-02-19 | 2003-07-15 | Nortel Networks Limited | Method and apparatus for creating a software patch by comparing object files |
CN101799763A (zh) * | 2009-02-10 | 2010-08-11 | 华为技术有限公司 | 内核在线补丁的方法、装置和系统 |
CN103870310A (zh) * | 2014-02-18 | 2014-06-18 | 小米科技有限责任公司 | 程序编译方法及相关装置 |
CN103984582A (zh) * | 2014-06-04 | 2014-08-13 | 网易(杭州)网络有限公司 | 一种热更新方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
KR102010508B1 (ko) | 2019-08-13 |
CN106796522A (zh) | 2017-05-31 |
EP3204849A1 (en) | 2017-08-16 |
EP3204849A4 (en) | 2017-12-06 |
KR20170078802A (ko) | 2017-07-07 |
US9569199B2 (en) | 2017-02-14 |
WO2016116051A1 (en) | 2016-07-28 |
EP3204849B1 (en) | 2022-04-06 |
US20160216962A1 (en) | 2016-07-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106796522B (zh) | 用于更新源代码文件的系统和方法 | |
US9430224B2 (en) | Hot-update method and apparatus | |
US8495598B2 (en) | Control flow graph operating system configuration | |
US8935683B2 (en) | Inline function linking | |
US9753701B2 (en) | Generating logic with scripting language in software as a service enterprise resource planning | |
US20190243665A1 (en) | Application runtime configuration using design time artifacts | |
US9280339B1 (en) | Class replacer during application installation | |
US20130067449A1 (en) | Application packages using block maps | |
Zheng et al. | AStitch: enabling a new multi-dimensional optimization space for memory-intensive ML training and inference on modern SIMT architectures | |
US9841953B2 (en) | Pluggable components for runtime-image generation | |
US9317258B2 (en) | Dynamic validation of models using constraint targets | |
US10203943B2 (en) | Static analysis and reconstruction of deep link handling in compiled applications | |
US10275234B2 (en) | Selective bypass of code flows in software program | |
US20110214110A1 (en) | Compiler Mechanism for Handling Conditional Statements | |
US9122561B2 (en) | Program integration that accommodates restrictions on merge-locations | |
US10268461B2 (en) | Global data flow optimization for machine learning programs | |
US11262986B2 (en) | Automatic software generation for computer systems | |
US10958514B2 (en) | Generating application-server provisioning configurations | |
CN105393216B (zh) | 运行时内存调节 | |
US20210081184A1 (en) | Method and apparatus for enabling autonomous acceleration of dataflow ai applications | |
Vergilio et al. | Comparative Performance and Energy Efficiency Analysis of JVM Variants and GraalVM in Java Applications | |
US20120330878A1 (en) | Conventions for inferring data models | |
US11360751B2 (en) | Systems and methods for dependency analysis | |
KR102361534B1 (ko) | 컴파일러를 이용한 난독화 방법 및 시스템 | |
US8543971B2 (en) | Specifying on the fly sequential assembly in SOA environments |
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 |