用于构造基于组件的应用的可执行代码的方法和系统的制作方法

文档序号:6602854阅读:134来源:国知局
专利名称:用于构造基于组件的应用的可执行代码的方法和系统的制作方法
技术领域
本发明一般涉及基于组件的(component-based)代码生成,并且更具体地涉及用 于构造基于组件的应用的增量(incremental)方法。
背景技术
基于组件的应用是使用多个互连的功能组件或操作器(operator)建立(build) 的应用。在该环境中,组件是小块代码,其执行如数据转换、过滤、注释、分类、解复用和划分 的一般操作。两个组件可以通过流相互作用,所述流携带潜在无限量的数据。组件可能根 据指定序列以预定方式对数据操作以产生一些输出。典型地,这些组件的每一个根据涉及代码生成和代码编译的两步处理建立。代码 生成步骤包括从应用的陈述性描述生成可执行代码。具体地,假定特定类型的组件,代码生 成涉及调用对应于该类型的代码生成器,并且为其提供用于组件的合适的配置参数。代码 生成器然后为组件生成通用编程语言(例如,C或C++编程语言)的专用代码。代码编译步 骤包括将专用代码编译为可在目标平台(例如,基于因特尔X86指令组架构的计算机)上 执行的对象代码。通用建立工具典型地用于协调生成和/或编译步骤。这种建立工具的一 些示例是 “make ”、“ gnumake ”、"nmake ”、“ jam” 和 “ant ” 工具。在一些情况下,包含基于组件的应用的陈述性描述的文件可以改变。结果,与应 用相关联的一些组件可以改变,使用于那些组件的代码的重新生成成为必要。依赖于时间 戳数据来确定代码是否已经改变的传统建立工具不但重新生成所有组件的代码,而且还完 全重新编译重新生成的代码。因此,甚至为实际上还没有改变(例如,还没有改变它们处理 数据的方式)的组件也重新生成和重新编译代码,仅仅因为它们的时间戳比对象代码的更 新。

发明内容
用于为基于组件的应用构造可执行代码的方法的一个实施例包括接收编译用于 基于组件的应用的源代码的请求,其中请求识别源代码,并且其中源代码包括多个源代码 组件,源代码组件的每一个实现应用的不同组件;以及执行用于每个源代码组件的一系列 步骤,其中所述一系列步骤包括为源代码组件导出导出的签名;检索对应于用于源代码 组件的可执行代码的当前可用实例的存储的签名;比较导出的签名和存储的签名;当导出 的签名不匹配存储的签名时,将源代码组件编译为可执行代码;以及当导出的签名匹配存 储的签名时,从库中获得用于源代码组件的可执行代码。


参照实施例可以进行本发明的更具体描述,使得可以详细理解本发明的上述特征 的方式,一些实施例在附图中图示。然而,要注意附图仅图示本发明的典型实施例,因此不 认为限制其范围,由于本发明可以允许其它等效的实施例。
图1是图示可以适于从本发明受益的第一示例性基于组件的应用的框图;图2是图示根据本发明的编译器的一个实施例的框图;图3是图示根据本发明的用于生成基于组件的应用的代码的方法的一个实施例 的流程图;图4是图示可以适于从本发明受益的第二示例性基于组件的应用的框图;以及图5是使用通用计算设备实现的代码生成方法的高级框图。
具体实施例方式在一个实施例中,本发明是用于增量地构造基于组件的应用的方法和装置。本发 明的实施例采用基于元数据的签名技术,以避免不必要地重新生成和重新编译可执行组件 代码。具体地,元数据用于描述定义应用的每个组件的配置。签名从该用于每个组件的元 数据计算,并且与为组件生成的可执行代码相关联地保持在代码库中。在代码生成时,搜索 代码库,并且如果在那里发现存储的代码对应于要为其生成新的代码的组件,则检索对应 于存储的代码的签名。如果存储的代码的签名不同于为新的代码计算的签名,则根据新的 代码重新生成用于该组件的代码。如果签名没有不同,则不重新生成用于该组件的代码。图1是图示可以适于从本发明受益的第一示例性基于组件的应用100的框图。具 体地,示例性基于组件的应用100是流处理应用;然而,要理解本发明基本上可以用在任何 类型的基于组件的应用开发架构中,并且不限于流处理应用。应用100包括通过流相互连接的多个组件或“操作器” 102^1023下文中统称为 “操作器102” )。操作器102配置为对进入流数据104进行操作,并且将操作的结果输出 (也可以以流的形式)到数据库106。在一个实施例中,每个操作器102是多个可能类型之一,包括但不限于源 (Source)(例如,操作器Ii^1,其用于从外部数据源读取数据)、功能元件(Functor)(例 如,操作器1022、1023、1026和1027,其用于对流数据执行如过滤的基本数据变换)、集合 (Aggregate)(例如,操作器1024,其用于逻辑地将流数据分组为各概要)、连接(Join)(例 如,操作器1025,其用于将两个流相关)、以及宿(Sink)(例如,操作器102n,其用于使数据具 体化)。这些操作器102的每个可以以特定方式配置。换句话说,每个操作器102是特定类 型的可配置组件。因此,在示例性流处理应用100的环境中,每个操作器102可以称为“操 作器实例”。例如,示例性应用100可以配置来处理金融数据流,如实况股市传播。在这样的应 用中,源操作器102i可以从进入数据流104读取输入,并且将该输入传递到第一和第二功 能元件操作器1022和1023。第一功能元件操作器1022可以传递交易并且从输入数据流计 算量价,而第二功能元件操作器1023可能传递来自进入数据流的股票报价。然后交易和量 价从第一功能元件操作器1022传递到集合操作器1024,其可以计算进入数据流中每个股票 订单或符号的移动平均。集合操作器1024然后可以将移动平均传递到第三功能元件操作器 1026,其计算进入数据流中股票的交易量加权平均价(VWAP)。连接操作器1025可以接收来 自第二功能元件操作器1023的股票报价和来自第三功能元件操作器1026的交易量加权平 均价,并且计算交易指数(bargain index)。连接操作器1025然后可以将交易指数传递到 第四功能元件操作器1027,其可以在将数据传递到宿操作器102n之前丢弃具有零值交易指数的消息,宿操作器102n然后将结果写入到数据库106。如上所述,编译如示例性应用100的流处理应用涉及从应用的逻辑描述生成可执 行的代码。给定特定类型的操作器实例,代码生成涉及调用相应的代码生成器,并且提供合 适的配置参数给代码生成器。代码生成器为操作器实例生成通用编程语言(例如,C或C++ 编程语言)的专用代码。生成的代码然后编译为可在目标平台上执行的对象代码。编译通 常使用通用建立工具(如“make”工具)执行。例如,考虑以高级编程语言表示的以下两个示例性功能元件操作器实例,其中 两个功能元件操作器用于通过处理来自称为TradeQuote的最初流的数据生成新的流 (TradeFi Iter和QuoteFi Iter)。这些示例和下面示出的那些以SPADE编程语言书写, SPADE HefMIg-Wfi Gedik ^Λ "SPADE :The System SDeclarative Stream Processing Engine”,SIGMOD 会议 2008 :1123_1134 中进一步详细描述。Stream TradeFiIter(ticker:String, myvwap:Float,volume:Float): = Functor (TradeQuote) [ttype =,,Trade,,& volume > 0. 0](表 达式1){myvwap: = price 氺 volume}Stream QuoteFilter(ticker:String, askprice:Float, asksize:Float): = Functor (TradeQuote) [ttype =,,Quote,,& askprice > 0. 0] {} (表 达式2)表达式1和表达式2表示相应的功能元件操作器实例的陈述性描述的高级编程语
言翻译。表达式1和表达式2中的两个功能元件操作器实例以不同方式清楚地配置。具体 地,每个操作器实例生成的流的模式(schema)是不同的(S卩,用于TradeFilter的模式对 用于QuoteFilter的模式)。此外,如过滤条件(即,ttype =” Trade” & volume > 0. O对 ttype =,,Quote,,& askprice > 0. 0)的一些参数是不同的(即,它们产生的作为结果的流 消息是不同的,并且在表达式1中,基于输入元组的属性值计算称为myvwap的新的消息属 性)。此外,属性分配是不同的。这指示与功能元件操作器实例相关联的代码生成器将为至 少这两个功能元件操作器实例生成不同代码。图2是图示根据本发明的编译器200的一个实施例的框图。在图2的环境中,称 为“编译器”的实体执行代码生成和编译,如下面进一步详细讨论的。例如,编译器200可 以实现来生成用于基于组件的应用(如图1中图示的基于组件的应用100)的操作器实例 或组件的代码。如图所示,编译器200接收用于提出的操作器实例的配置参数202 (例如, 流处理应用的环境中的流模式、过滤判定(predicate)等),并且将用于提出的操作器实例 的相应对象代码输出到目标机器204。可以以硬件、软件或两者的组合实现编译器200。编 译器200可以包括多个元件,如签名比较器、签名数据库和代码生成器。编译器200的一个 示例是SPADE编程语言编译器,如根据本发明修改的。如图所示,编译器200包括签名比较引擎206、库或签名数据库208、多个代码生成 器ZlOiHOj下文中统称“代码生成器210”)、以及后端212。当编译器200接收用于基于 组件的程序的提出的操作器实例的配置参数202时,其将配置参数202传递到签名比较处 理器206。如参照图3进一步详细讨论的,签名比较处理器206从配置参数202导出用于提出的操作器实例的签名。签名比较处理器206然后比较导出的签名与为操作器实例的之前 生成版本存储的签名。从签名数据库208检索存储的签名。如果签名比较引擎206基于签名比较确定应该为提出的操作器实例生成可执行 代码,则签名比较处理器206将配置参数202传递到代码生成器210,其对应于由提出的操 作器实例表示的操作器的类型(例如,源、功能元件、集合、连接、宿等)。代码生成器210为 操作器实例生成通用编程语言的专用代码,并且将专用代码传递到后端编译器(例如,C或 C++编程语言编译器)212。后端编译器212将专用代码编译为可在目标机器204上执行的 对象代码,然后将对象代码提供到目标机器204。图3是图示根据本发明的、用于生成用于基于组件的应用的代码的方法300的一 个实施例的流程图。例如,可以通过图2中图示的编译器200的签名比较处理器206实现 方法300。例如,当基于组件的应用改变并且重新运行编译器时,可以实现方法300。在步骤302初始化方法300,并且进到步骤304,其中方法300接收指令以重新生 成用于基于组件的应用的代码。因此,该指令要求为应用中的至少一个操作器实例的提出 版本生成代码,其中操作器实例的当前版本存在于应用的当前版本中。在步骤306,方法300导出用于操作器实例的提出版本的签名。在一个实施例中, 签名是可扩展标记语言(XML)文档,其捕获操作器实例的提出版本的配置参数。在该示例 中,签名表示可以用于将操作器的可修改方面绑的配置参数。在该示例中,签名表示可以用 于将操作器的可修改方面绑定到特定设置的配置参数。因此,签名捕获可以触发不同代码 的生成的所有相关操作器参数。例如,在数据流处理应用的环境中,用于操作器实例的签名 可以包括流模式、过滤判定、连接和分组设置等。在一个实施例中,从与操作器实例相关联 的元数据导出操作器实例的签名。例如,方法300可以从操作器实例的源代码提取配置参 数,并且生成元数据的基于串或XML的表示作为签名。在一个实施例中,元数据中的编译时 间可估计常数表示用在运行时间加载的位置保持器(Place holder)(例如,修改的配置参 数)代替。该元数据捕获与操作器实例相关联的所有配置参数。在步骤308,方法从代码库检索与操作器实例的当前版本相关联的签名。在一个实 施例中,代码库与为操作器实例生成的代码一起保持与应用相关联的每个操作器实例的签名。在步骤310,方法300比较提出的操作器实例和当前操作器实例的签名,以便确定 签名是否匹配。如上所讨论的,从与操作器实例相关联的所有配置参数的元数据导出捕获 操作器实例的签名。给定这些配置参数,与操作器类型相关联的代码生成器可以为操作器 实例创建适合的代码。因此,如果用于两个操作器实例的元数据相同,则为那些操作器实例 生成的代码(以及签名)也是相同的。然而,如果用于两个操作器实例的元数据是不同的, 则为那些操作器实例生成的代码(以及签名)也是不同的。在一个实施例中,全文(infull) 比较签名,并且必须按顺序匹配到各个位以便发现匹配。如果方法300在步骤310断定提出的操作器实例和当前操作器实例的签名不匹 配,则方法300进到步骤312,并且重新生成用于操作器实例的代码(S卩,根据操作器实例的 提出的版本生成代码)。方法300然后在步骤316中终止之前存储重新生成的代码和签名 (例如,在图2的签名数据库208中)。可替代地,如果方法300在步骤310断定提出的操作器实例和当前操作器实例的签名匹配,则方法300进到步骤314,并且在步骤316中终止之前确定用于操作器实例的代 码不需要重新生成(即,操作器实例的提出的版本与操作器实例的当前版本相同)。从而,方法300避免为没有从应用的之前版本改变的操作器实例不必要的重新生 成代码。相同的操作器实例应该共享相同的代码。例如,考虑以下高级代码,其创建在表达 式1和表达式2中描述的程序段的31个实例。for_begin@day 1 to day 31 # for each daystream TradeFilteriday(ticker:String, myvwap:Float, volume:Float): = Functor (TradeQuoteiday) [ttype =,,Trade,,& volume > 0. 0]{myvwap: = price 氺 volume}stream QuoteFilteriday(ticker:String, askprice:Float, asksize:Float): = Functor (TradeQuote) [ttype =,,Quote,,& askprice > 0. 0] {}for_end(表达式 3)根据方法300,有利的是避免为表达式3中的62(即,31乘2)个操作器实例重新 生成代码,而是仅为两个操作器实例重新生成代码(因为组件的相同组将重新用于31天的
每一天)。方法300的一个值得注意的例外是其中用于操作器类型的代码生成器已经改变 (例如,由于高级语言编译器的新版本的可用性)的情况。在这种情况下,即使操作器实 例的新版本和操作器实例的当前版本的签名匹配,也仍必须重新生成用于操作器实例的代 码。可以使用文件时间戳检测代码生成器中的改变。例如,如果已经比最后生成的代码更 近地修改代码生成器,则建立工具可以重新生成代码而不用检查操作器实例的签名。方法300的基于签名的技术还可以用于避免当基于组件的应用包含重复的操作 器实例时的不必要的代码的重新生成和重新编码。如上所讨论的,为每个操作器实例生成 签名,并且为每个唯一签名调用一次相应的代码生成器。因此,共享相同签名的操作器实例 变为相同操作器类型的实例,并且共享相同的代码。共享用于操作器实例的代码依次可以 通过避免不必要的代码生成显著地减少编译时间。然而,在操作器实例之间的代码共享在一些情况下可能过于严格,因为不能取得 操作器实例之间的相似的全部优点。例如,考虑以下代码引用(excerpt),其中在此情况下, 用于将从文件输入的数据转换为要流出的消息的大量源操作器的配置中的小改变导致过 度的代码生成for_begin@day 1 to day 3 # for each daystream TradeFilteriday(ticker:String, myvwap:Float, volume:Float): = Source ()[file://taq_data_+toString(iday), binformat]{}for_end(表达式 4)具体地,为每个操作器实例生成操作器实例代码的不同编程语言(例如,C或C++ 编程语言)实现。例如,参照表达式4的代码引用,注意到每个源操作器从由不同的统一资 源标识符(URI)指定的文件读取数据,该URI在基于传统技术的实现中将被嵌入生成的代 码中,使得为操作器的不同实例生成的代码稍稍不同。因此,本发明的实施例进一步寻求避免当应用包含重复的操作器实例时的不必要的代码重新生成,所述重复的操作器实例仅在依赖于编译时间已知的常数的参数配置不 同。参数配置中的编译时间常数可以转换为当操作器实例采运行时间初始化时要由操作器 实例加载的变量。例如,表达式4中的文件名称可以通过在生成的代码中包括额外逻辑以 便从操作器实例的变量提取文件名称,转换为操作器实例的变量。以此方式,表达式4中的 所有源操作器实例可以共享代码,但是可以在运行时间提供不同变量,因为操作器处理逻 辑本身保持不变。在一个实施例中,该代码共享技术应用于部分恒定的操作器参数,只要可变(非 恒定)参数匹配不同的操作器实例。在一个实施例中,从操作器实例的签名排除编译时间 常数(上面讨论的),即使它们是操作器实例的元数据的部分,因为当如图3所示进行签名 比较时,它们触发重新编译。即使当多个操作器实例是相互的精确副本时,操作器实例的连接的差别也可能导 致生成的代码的改变。例如,连接信息可以变为操作器实例配置的部分。例如,考虑以下高 级代码stream TradeFilterl (tickerString, myvwap:Float, volume:Float): = Functor (QuotesA) [ttype =,,Trade,,& volume > 0. 0] {}stream TradeFilter2 (ticker: String, myvwap:Float, volume:Float): = Functor (QuotesA, QuotesB) [ttype = "Trade,,& volume > 0. 0] {}(表达式 5)在表达式5中,两个功能元件操作器实例是相同的,除了第二功能元件操作器实 例具有连接到其输入端口的两个流(即,QuotesA和QuotesB),而第一功能元件操作器实例 仅具有连接到其输入端口的但个流(即,QuotesA)。类似地,可以是由两个功能元件操作器 实例生成的输出流连接到不同数目的下游操作器的情况。因此,本发明的实施例进一步寻求避免当应用包含仅仅它们相互连接方式不同的 重复操作器实例时的不必要的代码重新生成。在一个实施例中,这通过从容器(container) 代码分离操作器代码来实现。容器可以容纳(host)多个操作器,并且负责建立操作器之间 的连接。类似于操作器实例,容器实例也自动生成。从操作器图到容器图的映射是灵活的。同样类似于操作器实例,可以为容器实例导出签名以避免不必要的代码重新生成 和重新编译。因此,可以通过在应用中采用多个操作器容纳容器的不同实例来最小化代码 的重新生成和重新编译。要注意,容器代码通常不像操作器代码那样复杂。例如,图4是图示可以适于从本发明受益的第二示例性基于组件的应用400的框 图。如所图示的,应用400包括通过流互连的多个组件或操作器实例402^4023下文中统 称为“操作器实例402”)。同样如所图示的,这些操作器实例402由容器实例404、406和 ^S1IOSm(下文中统称为“容器实例408”)容纳。容器实例404、406和408的每一个容纳 至少一个操作器实例402。在一个实施例中,所有操作器实例402以相同方式配置,因此共享代码。此外,如 所图示的,存在m个容器实例408,它们在内部连接和从而容纳的操作器实例402的方面是 相同的。在示例性应用400的环境下,将仅需要为容器实例408之一生成代码,并且该代码 然后可以对所有m个容器实例408共享。本发明的实施例进一步寻求当应用包含重复容器实例时避免不必要的代码生成,
9所述重复容器实例包含以相同方式连接的相同操作器实例。在一个实施例中,这以类似于 之前在此描述的解决方式的方式实现。具体地,为每个容器实例导出签名,其中用于容器实 例的签名捕获容器实例的内连接拓扑以及由此容纳的操作器实例的签名。以此方式,具有 相同配置的容器实例可以共享代码。图5是使用通用计算设备500实现的代码生成方法的高级框图。在一个实施例中, 通用计算设备500包括处理器502、存储器504、代码生成模块505和各种输入/输出(I/O) 设备506,如显示器、键盘、鼠标、触笔(stylus)、无线网络接入卡等。在一个实施例中,至少 一个I/O设备是存储设备(例如,盘驱动器、光盘驱动器、软盘驱动器)。应该理解,代码生 成模块505可以实现为物理设备或子系统,其通过连接信道耦合到处理器。可替代地,代码生成模块505可以由一个或多个软件应用(或甚至是例如使用专 用集成电路(ASIC)的软件和硬件的组合)表示,其中在通用计算设备500的存储器504中, 软件从存储介质(例如I/O设备506)加载并且由处理器502操作。因此,在一个实施例 中,如在此参照之前的附图描述的用于为基于组件的应用生成代码的代码生成模块505可 以存储在计算机可读存储介质或载体(例如,RAM、磁或光驱动器或盘等)上。应该注意,尽管没有明确指定,但是在此描述的方法的一个或多个步骤可以包括 存储、显示和/或输出步骤,如对于特定应用要求的。换句话说,在方法中讨论的任何数据、 记录、字段和/或中间结果可以存储、显示、和/或输出到另一设备,如对于特定应用要求 的。此外,描述确定操作或涉及判定的附图中的步骤或块不必要求确定操作的两个分支实 践。换句话说,确定操作的分支之一可以视为可选步骤。尽管前述贯注于本发明的实施例,但是可以设计本发明的其它和进一步的实施例 而不背离其基本范围。在此展现的各种实施例或其各部分可以组合来创建进一步的实施 例。此外,如顶、侧、底、前、后等的术语是相对或位置术语,并且相对于图中图示的示例性实 施例使用,并且如此的这些术语可以互换。
权利要求
一种用于为基于组件的应用构造可执行代码的方法,所述方法包括通过在计算机系统中执行的编译器接收编译用于基于组件的应用的源代码的请求,其中所述请求识别所述源代码,并且其中所述源代码包括多个源代码组件,所述多个源代码组件的每一个实现所述应用的不同组件;以及通过所述编译器执行用于多个源代码组件的每个源代码组件的一系列步骤,所述一系列步骤包括为所述源代码组件导出导出的签名;检索对应于用于所述源代码组件的可执行代码的当前可用实例的存储的签名;比较导出的签名和存储的签名;响应于导出的签名不匹配存储的签名,将所述源代码组件编译为可执行代码;以及当导出的签名匹配存储的签名时,从库中获得用于所述源代码组件的可执行代码。
2.如权利要求1所述的方法,其中所述导出的签名从与所述源代码相关联的元数据导 出,并且所述存储的签名之前从与源代码的之前版本相关联的元数据导出,从该源代码的 之前版本生成用于所述源代码组件的可执行代码的当前可用实例。
3.如权利要求2所述的方法,其中与所述源代码相关联的元数据捕获所述源代码的一 个或多个配置参数,并且与源代码的之前版本相关联的元数据捕获用于所述源代码组件的 可执行代码的当前可用实例的一个或多个配置参数。
4.如权利要求3所述的方法,其中所述导出的签名是捕获所述源代码的一个或多个配 置参数的可扩展标记语言文档,并且所述存储的签名是捕获源代码的之前版本的一个或多 个配置参数的可扩展标记语言文档。
5.如权利要求3所述的方法,其中与所述源代码相关联的元数据中的一个或多个编译 时间可估计常数表示用在运行时间加载的位置保持器代替。
6.如权利要求1所述的方法,其中所述存储的签名与库中用于所述源代码组件的可执 行代码的当前可用实例相关联。
7.如权利要求6所述的方法,其中所述库保持用于所述多个源代码组件中的每个源代 码组件的代码和签名。
8.如权利要求1所述的方法,其中所述源代码组件是对输入数据操作的操作器。
9.如权利要求1所述的方法,其中所述源代码组件是容纳对输入数据操作的一个或多 个操作器的容器。
10.一种用于为基于组件的应用构造可执行代码的系统,所述系统包括用于实现权利 要求1-9的任一的方法的部件。
11.一种用于为基于组件的应用构造可执行代码的编译器,所述编译器包括用于接收编译用于基于组件的应用的源代码的请求的输入,其中所述请求识别所述源 代码,并且其中所述源代码包括多个源代码组件,所述多个源代码组件的每一个实现所述 应用的不同组件;以及耦合到输入的多个元件,用于执行用于多个源代码组件的每个源代码组件的一系列步 骤,所述多个元件包括签名比较器,用于为所述源代码组件导出导出的签名;签名数据库,用于存储对应于用于所述源代码组件的可执行代码的之前生成实例的存储的签名;以及代码生成器,用于当签名不匹配存储的签名时,将所述源代码组件编译为可执行代码, 以及当签名匹配存储的签名时,从库中获得用于所述源代码组件的可执行代码。
12.如权利要求11所述的编译器,其中所述签名比较处理器配置为从所述源代码的一 个或多个配置参数导出所述导出的签名。
13.如权利要求11所述的编译器,其中所述代码生成器对应于所述源代码组件的类型。
14.如权利要求11所述的编译器,其中所述导出的签名是捕获所述源代码组件的一个 或多个配置参数的可扩展标记语言文档。
15.如权利要求11所述的编译器,其中所述导出的签名是从与所述源代码组件相关联 的元数据导出的。
全文摘要
用于为基于组件的应用构造可执行代码的方法的一个实施例包括接收编译用于基于组件的应用的源代码的请求,其中请求识别源代码,并且其中源代码包括多个源代码组件,源代码组件的每一个实现应用的不同组件;以及执行用于每个源代码组件的一系列步骤,其中所述一系列步骤包括为源代码组件导出导出的签名;检索对应于用于源代码组件的可执行代码的当前可用实例的存储的签名;比较导出的签名和存储的签名;当导出的签名不匹配存储的签名时,将源代码组件编译为可执行代码;以及当导出的签名匹配存储的签名时,从库中获得用于源代码组件的可执行代码。
文档编号G06F9/44GK101887365SQ20101017955
公开日2010年11月17日 申请日期2010年5月17日 优先权日2009年5月15日
发明者亨里克·安德雷德, 侯锐, 吴坤龙, 布格拉·格迪克, 王华勇 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1