订阅者定义的动态事件的制作方法

文档序号:11160853阅读:943来源:国知局
订阅者定义的动态事件的制造方法与工艺

计算机系统当前被广泛应用。一些此类系统在它们被部署在终端用户的场所之前被(某些在很大程度上)定制。作为示例,一些此类计算机系统包括业务系统,诸如顾客关系管理(CRM)系统、企业资源规划(ERP)系统、业务线(LOB)系统等。在这些类型的系统中,用户或顾客首先购买通用业务系统,且用户或顾客通常对该通用业务系统进行定制、扩展或其它修改,以便获得其自己的定制部署。

通常,这样的定制已经要么通过对源代码的直接修改要么通过使原始软件的作者将许多钩点(hook-point)插入到软件源代码中而被提供。

对源代码的直接修改为定制提供了最大的灵活性。通过这样的修改,可以对软件做出任意修改。当原始软件需要被修改时,例如当需要更新或补丁时,这种方案的限制变得明显。在这样的实例中,对原始源代码的修改可能不再与各种定制互操作。这样,开发者必须返回到修改并仔细地将每个先前生成的定制对接或修改到经更新/打补丁的源代码。在大多数情况下,这种手动且乏味的过程往往需要显著的开发者时间并因此是非常昂贵的。

在原始源代码中提供许多钩点是在其中可以实现定制的另一种方式。原始应用的作者可以将许多钩点插入在做出呼出的地方。这被称为“事件”。在事件中,原始作者将在源代码中所定义的各位置处插入一个或多个呼出。每个这样的呼出将调出传递某些预定义参数的指定事件。另外,在运行时,呼出将检查以查明是否存在任何对事件的订阅者。如果存在对事件的订阅者,那么订阅者代码被加载并被执行。标准事件的一个限制是软件的原始作者可能没有在代码中的精确位置处提供需要应用定制的开发者所需要的钩点。而且,原始作者将定义呼出的合约或参数。在一些实例中,如果呼出的合约或参数被原始作者通过升级或补丁改变,则依赖于所述呼出的定制可能失败。

概述

提供了一种修改源代码的编程单元的执行行为的计算机实现的方法。所述方法包括加载源代码的编程单元并确定是否针对该编程单元定义了至少一个定制。至少一个定制基于所述定制的先决条件是否被满足而被选择性地执行。

提供本概述以便以简化的形式介绍以下在详细描述中进一步描述的一些概念。本概述并非旨在标识出要求保护的主题的关键特征或必要特征,亦非旨在用作辅助确定要求保护的主题的范围。所要求保护的主题不限于解决在背景中提及的任何或所有缺点的实现。

附图简述

图1是根据本发明一实施例的在其中开发者提供了与原始源代码有关的定制的环境的图示。

图2是通过执行流水线来执行软件应用的处理器的图示。

图3是根据本发明的一个实施例的执行软件应用的计算机实现的方法。

图4是根据本发明的一个实施例的定义订阅者动态事件的方法。

图5示出在其中本发明的实施例是特别有用的示例性架构的框图。

图6示出在其中本发明的实施例是有用的云计算架构。

图7-10示出在其中本发明的实施例是有用的各种移动设备。

图11是一个说明性计算环境的框图。

详细描述

本发明的各实施例通常允许将任意定制应用到代码的基本上任意的可执行单元,包括源代码的方法、函数、模块和甚至一个或多个行,而无需修改原始源代码。根据在此所述的实施例,执行原始源代码的平台将提供“动态钩”,所述动态钩允许生成与原始源代码有关的定制的开发者订阅该开发者定义的一个或多个事件。只要所定义的事件的先决条件仍然有效,就可以在不影响定制的操作的情况下提供来自软件制造商的对原始源代码的改变,例如更新和/或补丁。

图1是根据本发明一实施例的在其中开发者14提供了与原始源代码12有关的定制18的环境的图示。在环境10中,已经从源代码发布者,例如微软公司,获得了源代码12。此处使用的“源代码”旨在意指被编译或汇编到计算机可执行程序中的命令的文本列表。源代码可以以许多已知的或将来开发的编程语言中的任意编程语言来提供。通常,源代码将由软件产品的一个或多个作者逐行地输入。

如上所述,许多软件产品旨在在被终端用户部署之前就被定制。这样的软件产品的一个示例是企业资源计划系统。然而,无论何时期望在无需改变软件产品的源代码的情况下改变软件产品的行为,本发明的各实施例都是可应用的。在图1示出的示例中,开发者14具有对源代码12的访问,如由虚线16所示。这样的访问可以是通过任意合适的方式的,包括在线访问或离线访问(例如源代码的硬拷贝)。源代码可以被用作参考。为了定制软件产品,开发者14查看源代码12并生成一个或多个定制18。这些定制18是动态事件定义的形式,如将在下面详细描述的。定制18被提供给执行平台20,该执行平台将通常已经具有原始、非改动状态的源代码12。执行平台20是硬件、软件或其组合的任意合适的安排,所述安排能够接收源代码、基于源代码生成机器可执行代码并执行所述机器可执行代码。这样,执行平台20可以是单个个人计算机、在企业中工作的一组服务器、设备的单核或在云计算环境中工作的一大组服务器。执行平台20可以包括一个或多个处理器24以及合适的存储组件26以支持编程编译和/或执行。

执行平台20将原始源代码12与定制18一起执行,以向与执行平台20交互的一个或多个客户机22提供经定制的软件操作。在一个示例中,客户机22是通过通信链接28在操作上耦合到执行平台20的计算机,以便允许客户机22与由执行平台20所执行的软件产品交互。链接28可以包括任何合适的通信链接,包括经由LAN或WAN的有线或无线通信。

图2是通过执行流水线30执行软件应用的执行平台的处理器的图示。虽然,流水线30被示为包括编程源单元1··N的线性流水线,但提供这样的简化是说明编程执行通常通过命令序列来步进。在图2中所示的示例中,编程执行当前在单元5上,如指针32所示。一旦单元5的执行完成,处理器24将开始执行单元6。然而,在这样的执行之前,处理器将确定是否任何定制已经相对于编程单元6被附加或定义。借助于其定义,这样的定制将具有指定它是应该在单元6之前、取代单元6、或在单元6之后运行的指示因此,执行平台20将根据定制定义,在单元6之前、取代单元6、或在单元6之后执行与定制对应的代码。一旦编程单元6和任何相关联的定制已经执行,执行平台就移至编程单元7。如此处所使用的,编程单元旨在意指任何一个或多个可执行代码行,其行可以包括例如一个方法。因此,由于定制是在任意编程单元之前、取代任意编程单元、或在任意编程单元之后注入,本发明的各实施例提供了开发者可以在源代码中的任意点定义“钩”的显著的灵活性。

图3是根据本发明的一个实施例的执行软件应用的方法。方法40在框42开始,在此处(在图1和2中示出的)处理器24加载方法或编程单元。接着,在框44,处理器24检查以查明是否存在与在框42处加载的方法或编程单元相关联的任何定制。如果是,则控制传递到框46,在此处与加载的方法或单元相关联的定制被处理器24加载。接着,基于定制的定义,先于在框42处加载方法或单元、取代在框42处加载方法或单元,或后于在框42处加载方法或单元,处理器24在框48处执行定制。在定制没有取代加载的方法或单元的示例中,如由所述定制所定义的,在执行所述定制之前或之后所述加载的方法或单元也由处理器24在框48处执行。控制随后传递至框50,在此处下一编程单元/方法被加载。如在图3中所示,如果给定的方法或编程单元不具有相关联的定制,则控制从判定框44传递至框50。方法40将继续循环直到程序执行被停止或完成。

图4是根据本发明的一个实施例的定义动态事件的方法。方法60在框62处开始,在此处,开发者标识源代码的定制将要与其相关联的特定单元。源代码的所述单元可以是源代码的函数、方法、模块或个体行。源代码的所述单元的标识可以通过函数或模块的名字,或在源代码的个体行的情况下,是源代码的在所选行之前的一个或多个行的标识以及源代码的在源代码的所选行之后的一个或多个行的标识。接着,在框64,开发者选择所述定制将如何相对于原始源代码来执行。例如,定制可以在66之前、取代68,或在70之后执行所标识的源代码。而且,当定制取代所标识的源代码执行时,如果需要的话,所述定制可以将所标识的域代码作为来自定制的子调用来运行。另外,如在框72处所指示的,还可以构想其它执行序列指示符。例如,在多个定制将要在源代码的所选单元之前被执行的情形中,一个定制可以被指示为“绝对最先”或“绝对最后”。接着,在框74,开发者指示定制的范围。该范围指示将通常允许定制能够访问源代码的所选单元内的变量和其它信息。在框76,开发者可以提供使用在源代码的所选单元内的变量和其它信息中的一些或全部的代码。这允许原文在所有方面改变都改变,而所订阅的变量保持不变。而且,到变量“按名字(by name)”的链接为原始开发者提供了一种故意中断定制可能具有的任何合约的途径。以此方式,开发者可以简单地改变变量的名字,这将要求依赖于原始变量名的定制将需要被重新访问。最后,在框78,定制被保存并提供给执行平台以用于以原始、未经修改的源代码执行。

在下面的示例中,表1提供了计算给定订单的折扣作为下订单的过程的部分的某种伪代码:

表1

在表1中阐明的示例中,开发者(以提供对10%的折扣计算的改变为任务)可能希望提供定制。例如,如果总量大于2000,则开发者可能需要加入额外的5%折扣。为了在数量超过2000时提供15%折扣,或如果数量大于2000提供原始折扣的150%,开发者可以定义如表2所阐述的定制。该定制允许在表1中所阐述的原始代码的行为被修改,而无需改变任何原始代码。

表2

在表2中的伪代码与表1中由具有原始方法的名字的HookMethod(钩方法)定义所提供的原始CalculateDiscount(计算折扣)方法相关联。该HookMethod在元数据中被定义。在所示的示例中,定义是使用C#样式句法中的属性。然而,这只是示例并且可以使用任何其他合适的样式。原始方法与表2的伪代码的关联性,通知执行平台,表2的代码与表1中阐述的原始方法相关联。另外,通过设置“Run=AfterOriginal”,执行平台将在表1的代码被执行之后再执行表2的代码。MyOwnCalculateDiscount(我自己计算的折扣)的声明列出了需要从原始方法中提出的参数、行。另外,MyOwnCalculateDiscount设置范围“OriginalScope_org”,使得定制将能够访问来自原始方法的参数和变量。_org的所有使用将被执行平台跟踪,并且在编译之后,编译器将在元数据中存储对MyOwnCalculateDiscount将通过CalculateDiscount顺序地被调用并且MyOwnCalculateDiscount将访问行(参数)、数量(作为本地变量)以及ReturnValue(原始返回值)的指示。

在运行时,执行平台20现在将在从原始CalculateDiscount返回之前调用MyOwnCalculateDiscount,允许MyOwnCalculateDiscount提供基本上任何期望的经定制的功能。_org范围变量将实际上指示原始变量。

在原始代码被更新、打补丁或由原始软件发布者简单改变的情况下,本发明的各实施例是特别有用的。例如,在下面的表3中,原始方法CalculateDiscount已经被修改为包括customer(客户)和date(日期)信息。

表3

借助于所存储的与MyOwnCalculateDiscount有关的元数据,显然,在经改变的源代码中仍然满足MyOwnCalculateDiscount的先决条件。具体来说,方法CalculateDiscount仍然存在,并且在其参数中它仍然具有“Lines[]lines”参数以及名为数量的本地变量。这样,对源代码的改变将不会影响由开发者为定制定义的“合约”。MyOwnCalculateDiscount将不会知晓也不会使用新的参数Customer或Date。然而,MyOwnCalculateDiscount不将这样的参数作为其合约的部分来列出。这样,MyOwnCalculateDiscount将继续运行对数量和返回值的适当操作。然而,如果在合约中由开发者所指定的任意项(例如方法的名字、行参数或数量变量)在经更新的源代码中被改变或删除,那么在应用定制时合约将中断并导致错误。

在MyOwnCalculateDiscount中特别注意的是所述方法是用“Lines[]lines”参数定义的,但所述参数没有被MyOwnCalculateDiscount使用的事实。然而,通过开发者仍然要求“Lines[]lines”,它已经成为定制的合约的部分并因此需要成为原始签名的部分。这在开发者通过这么做可以依赖于变量的情况下特别有利,尽管定制不需要它。换句话说,如果CalculateDiscount方法被改变使得在原始方法中不再需要所述行,定制应该中断(即通过应用定制错误来通知),使得开发者可以检查定制以查明代码是否仍然有效。这允许开发者将合约定义为如所期望的那样细化(接近)原始代码。在合约中要求的细节越多,当原始代码被改变时中断的几率越大。反之也是正确的。具体来说,如果对原始代码的更新的开发者希望确保在行上操作的所有定制被要求重新访问它们的定制,开发者可以改变变量的名字,这将中断合约。

(下述)表4示出当CalculateDiscount被调用时被执行的某种伪代码的示例。

表4

如可见,执行平台20将代码注入以检查正被调用的方法是否已经被挂钩并且如果是则将把所有相关的信息传递给机制,所述机制过滤所述信息并最终调用被挂钩到所述方法的定制。在表4中示出的示例仅仅是出于说明的目的被提供,在实际实现中,附加优化可以被使用并且“ReplaceOriginal(替代原始)”机制也可以被提供。

在上述示例中提供的所有伪代码仅仅出于说明目的。本发明的各实施例可以应用于使用源代码的任意编程语言。在一些示例中,本发明的各实施例提供了一种元数据驱动的挂钩机制,其中订阅者定义了原始源代码的合约对作者(contract vs.an author)。只要合约可被履行,就可以对底层源代码做出升级和其它改变,而无需中断定制。另外,简单地通过查阅元数据和源代码就确定这样的合约是否可以被履行是可能的。这样,在中断或其它异常可以被确定之前,代码不需要被运行。

如上所阐述的,存在定制可以被挂钩到原始源代码的许多方式。Run=AfterOriginal指示告知执行平台20原始源代码应该首选运行,随后是定制。一种替代是Run=BeforeOriginal,这将允许定制在将控制传递至原始方法之前改变任意阐述和可能的类变量。还有另一个替代为Run=ReplaceOriginal,这将取消对原始源代码的调用并仅仅调用定制。如果开发者希望覆盖整个方法,则可以使用后者。指示Run=ReplaceOriginal要求执行框架20在中断时跟踪对原始代码做出的改变,因为在源代码升级或改变之后所述定制现在正在移除“未知的”代码。另外,当使用ReplaceOriginal时,_org变量应该包含CallOriginal方法,这样如果需要的话可以对原始方法做出调用,在此之后定制将再次获得控制和完成其工作。

在此所述的在定制中使用的代码的特殊之处在于所述代码所使用的所有构造在需要时都是“间接”针对底层实变量。这当中的一些可以在编译时发生而一些可以在运行时发生,例如定制的代码可以访问项目表,而无需具有关于这样的表的所有字段的信息。然而,只要项目表具有由定制所使用的字段,所述定制就将正确地运作。

可以理解的是,本发明的各实施例是可应用于各种各样的计算环境的。下面是在其中本发明的实施例可以是特别有利的计算环境的一些示例。

图5示出其中本文中描述的各实施例是有用的一个示例性架构的框图。架构100包括顾客业务系统101(其可以是在场系统、基于云的系统、或另一系统)。业务系统101可被用户通过由业务系统101或由用户设备116生成的用户界面115来访问。在一个实施例中,用户界面115具有用户输入机制117,用户114可致动该用户输入机制以便操纵业务系统101。

顾客业务系统101解说性地包括处理器102、数据存储104、用户界面组件105、更新安装器组件106、冲突解决组件119和业务过程组件121。数据存储104解说性地包括数据108、应用110、描述业务过程112的信息、描述工作流114的信息以及其它项107。在一个实施例中,应用110包括被用来运行业务系统101中的业务过程112和工作流114的业务逻辑。应用110解说性地对数据108操作,该数据可包括表示业务系统101中的项的实体。从而,应用110可包括总分类账应用、仓储应用、允许用户跟踪业务机会、跟踪业务系统中的销售或生产的应用、或各种其它业务应用。实体例如包括表示顾客的顾客实体、表示业务机会的机会实体、表示仓储项的仓储实体、表示报价和提议的报价和提议实体等。数据108可包括各种其它实体和数据,且上面提及的那些仅是作为示例提及的。用户可解说性地访问顾客业务系统101以便执行在执行采用业务系统101的组织的业务中被完成的活动、任务、工作流等。

本讨论提到了处理器和服务器。在一个实施例中,处理器和服务器包括具有相关联的存储器和时序电路系统(未分别示出)的计算机处理器。它们是它们所属的系统或设备的功能部分,且由这些系统中的其他组件或项的功能来激活并促成这些功能。

还讨论了数个数据存储。将注意,它们可各自被分解成多个数据存储。它们全部可位于访问它们的系统的本地,全部可以是远程的,或一些可以在本地而其他在远程。本文构想了所有这些配置。

同样,附图示出了具有归属于每一框的功能的多个框。将注意,可以使用更少的框,使得功能由更少的组件来执行。同样,可以使用更多框,其中功能被分布在更多组件之间。

图6是图5中所示的架构100的框图,不同之处在于其元件被部署在云计算架构500中。术语“云”、“基于云的系统”、“基于云的架构”或类似术语指代设备(例如,服务器计算机、路由器等)的网络。云计算提供了不要求终端用户知晓交付服务的系统的物理位置或配置的计算、软件、数据访问和存储服务。在各个实施例中,云计算通过诸如因特网之类的广域网使用合适的协议来交付服务。例如,云计算提供者通过广域网交付应用,并且它们可以通过web浏览器或任何其他计算组件被访问。架构100的软件或组件以及相对应的数据可被存储在远程位置处的服务器上。云计算环境中的计算资源可以被整合在远程数据中心位置处或者它们可以是分散的。云计算基础结构可以通过共享数据中心来交付服务,即使在用户看来它们是单个访问点。因此,在此所述的组件和功能可以从使用云计算架构的远程位置处的服务提供者来提供。替代地,它们可以从常规的服务器中提供,或者它们可以直接地或以其他方式安装在客户端设备上。

本说明书旨在包括公共云计算和私有云计算两者。云计算(公共和私有两者)提供了基本无缝的资源联营以及对管理和配置底层硬件基础结构的降低的需求。

公共云由供应商管理,并且通常支持使用同一基础结构的多个消费者。此外,与私有云相反,公共云能够将终端用户从管理硬件中释放出来。私有云可由机构本身管理,并且基础结构通常不与其他机构共享。该机构在某种程度上仍然维护着硬件,诸如安装和维修等。

在图6中所示的实施例中,一些项与图5中所示的那些是类似的,并且它们被类似地编号。图6具体地示出系统101可位于云502(可以是公共的、私有的或者其中某些部分是公共的而某些部分是私有的组合)中。因此,用户使用客户机设备22通过云502来访问那些系统。

图6还描绘了云架构的另一实施例。图6示出还构想了架构100的某些元素被置于云502中而其他元素没有被置于云502中。作为示例,数据存储104可被置于云502的外部,并且通过云502来被访问。无论它们位于哪里,它们都可直接由客户机设备22通过网络(广域网或局域网)访问,它们可由服务主存在远程站点处,或者它们可作为通过云来提供或通过驻留在云中的连接服务来访问的服务。本文构想了所有这些架构。

还将注意,架构100或其部分可被采用在各种各样不同的设备上。这些设备中的某些包括:服务器、台式计算机、膝上型计算机、平板计算机、或其他移动设备,诸如掌上计算机、蜂窝电话、智能电话、多媒体播放器、个人数字助理等。

图7是可被用作其中可部署本发明的系统(或其部分)的用户或客户的手持式设备216的手持式或移动计算设备的一个实施例的简化框图。图7-10是手持式或移动设备的示例。

图7提供了客户机设备216的组件的总体框图,该客户机设备216可以运行架构100的组件或与架构100交互。在设备216中,提供了通信链路213,该通信链路允许手持设备与其它计算设备通信,并且在一些实施例中提供用于诸如通过扫描来自动接收信息的信道。通信链路213的示例包括:红外端口、串行/USB端口、诸如以太网端口之类的电缆网络端口、以及允许通过一个或多个通信协议的通信的无线网络端口,所述通信协议包括作为用于提供对网络的蜂窝接入的无线服务的通用分组无线服务(GPRS)、LTE、HSPA、HSPA+、以及其他3G和4G无线电协议、1Xrtt和短消息服务,并包括提供对网络的本地无线连接的802.11和802.11b(WiFi)协议、和蓝牙协议。

根据其他实施例,应用或系统被容纳在连接到可移动安全数字(SD)卡接口215的SD卡上。SD卡接口215和通信链路213沿总线219与处理器217进行通信,该总线219还连接到存储器221和输入/输出(I/O)组件223、以及时钟225和定位系统227。

在一个实施例中,提供了I/O组件223以促成输入和输出操作。针对设备216的各个实施例的I/O组件223可以包括:输入组件,比如按钮、触摸传感器、多点触摸传感器、光学或视频传感器、语音传感器、触摸屏、邻近传感器、话筒、倾斜传感器以及重力开关;以及输出组件,比如显示设备、扬声器和或打印机端口。也可以使用其他I/O组件223。

时钟225说明性地包括输出时间和日期的真实时间时钟组件。时钟还可以说明性地为处理器217提供时序功能。

定位系统227说明性地包括输出设备216的当前地理位置的组件。这例如可以包括全球定位系统(GPS)接收机、LORAN系统、航位推算系统、蜂窝三角测量系统或者其他定位系统。这例如还可以包括生成所期望的地图、导航线路和其他地理功能的测绘软件或导航软件。

存储器221存储操作系统229、网络设置231、应用233、应用配置设置235、数据存储237、通信驱动程序239以及通信配置设置241。存储器221可以包括所有类型的有形易失性和非易失性计算机可读存储器设备。其还可以包括计算机存储介质(下面描述)。存储器221存储计算机可读指令,所述指令在被处理器217执行时致使处理器根据所述指令执行计算机实现的步骤或功能。处理器217可以也被其他组件激活以促成它们的功能性。

网络设置231的示例包括诸如代理信息、因特网连接信息以及测绘之类的事物。应用配置设置235包括为特定企业或用户定制应用的设置。通信配置设置241提供了用于与其他计算机进行通信的参数,并且包括诸如GPRS参数、SMS参数、连接用户名和口令之类的项目。

应用233可以是之前已经存储在设备216上的应用或是在使用期间安装的应用,但是这些应用可以是操作系统229的一部分,或者也可以在设备216之外被托管。

图8和9提供了可被使用的设备216的附加示例,但是也可以使用其它设备。在图8,提供功能电话或移动电话345作为设备216。电话345包括:一组小键盘347,其用于拨打电话号码;显示器349,其能够显示包括应用图像在内的图像、图标、网页、照片和视频;以及控制按钮351,其用于选择在显示器上示出的项目。电话包括天线353,该天线353用于接收诸如通用分组无线服务(GPRS)和1Xrtt之类的蜂窝电话信号以及短消息服务(SMS)信号。在一些实施例中,电话345还包括容纳安全数字(SD)卡357的SD卡槽355。

图9的移动设备是个人数字助理(PDA)459或多媒体播放器或平板计算设备等等(在此称为PDA 459)。PDA 459包括电感屏461,所述电感屏感测指示笔463(或其他指示器,诸如用户的手指)在该指示笔被置于屏幕之上时的位置。这允许用户在屏幕上选择、突出显示和移动项目以及绘图和书写。PDA 459还包括多个用户输入键或按钮(比如按钮465),其允许用户将显示器461上所显示的菜单选项或其他显示选项滚屏,并且允许用户在没有接触显示器461的情况下改变应用或选择用户输入功能。尽管未被示出,但是PDA 459可以包括允许与其他计算机进行无线通信的内置天线和红外发射机/接收机、以及允许与其他计算设备的硬件连接的连接端口。这样的硬件连接通常是通过经由串行或USB端口连接到其他计算机的支架来完成的。因此,这些连接是非网络连接。在一个实施例中,移动设备459还包括容纳SD卡469的SD卡槽467。

图10类似于图8,不同之处在于电话是智能电话571。智能电话571具有显示图标或磁贴或其他用户输入机制575的触敏显示器573。机制575可由用户用来运行应用、进行呼叫、执行数据传输操作,等等。一般而言,智能电话571被构建在移动操作系统上且提供比功能电话更高级的计算能力和连接性。

图8到图10示出在图11中示出的设备216的特定形式。应当理解,除了图8-10中示出的那些之外,设备216的其他形式是可能的。

图11是其中可采用架构100或其一部分(作为示例)的计算环境的一个实施例。参考图11,用于实现一些实施例的示例性系统包括计算机810形式的通用计算设备。计算机810的组件可以包括,但不限于,处理单元820(可以包括系统200或设备16中的处理器102或各处理器)、系统存储器830和将包括系统存储器在内的各种系统组件耦合至处理单元820的系统总线821。系统总线821可以是若干类型的总线结构中的任一种,包括存储器总线或存储器控制器、外围总线和使用各种总线架构中的任一种的局部总线。作为示例而非限制,这样的架构包括工业标准架构(ISA)总线、微通道架构(MCA)总线、增强型ISA(EISA)总线、视频电子技术标准协会(VESA)局部总线和外围部件互连(PCI)总线(也称为夹层(Mezzanine)总线)。参考图1描述的存储器和程序可被部署在图11的对应部分中。

计算机810通常包括各种计算机可读介质。计算机可读介质可以是能由计算机810访问的任何可用介质,而且包含易失性和非易失性介质、可移动和不可移动介质。作为示例而非限制,计算机可读介质可包括计算机存储介质和通信介质。计算机存储介质不同于且不包括已调制数据信号或载波。计算机存储介质包括硬件存储介质,该硬件存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据的信息的任何方法和技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括,但不限于,RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁带盒、磁带、磁盘存储或其他磁性存储设备、或能用于存储所需信息且可以由计算机810访问的任何其他介质。通信介质通常具体化计算机可读指令、数据结构、程序模块或传输机制中的其他数据,并包括任何信息递送介质。术语“已调制数据信号”是指使得以在信号中编码信息的方式来设定或改变其一个或多个特征的信号。作为示例而非限制,通信介质包括诸如有线网络或直接线连接之类的有线介质,以及诸如声学、RF、红外及其他无线介质之类的无线介质。上述任何组合也应该包括在计算机可读的介质范围内。

系统存储器830包括易失性和/或非易失性存储器形式的计算机存储介质,如只读存储器(ROM)831和随机存取存储器(RAM)832。包含诸如在启动期间帮助在计算机810内的元件之间传输信息的基本例程的基本输入/输出系统833(BIOS)通常存储在ROM 831中。RAM 832通常包含处理单元820可立即访问和/或当前正在操作的数据和/或程序模块。作为示例而非限制,图11例示出了操作系统834、应用程序835、其他程序模块836和程序数据837。

计算机810还可以包括其他可移动/不可移动、易失性/非易失性计算机存储介质。仅作为示例,图11示出了从不可移动、非易失性磁介质中读取或向其写入的硬盘驱动器841,从可移动、非易失性磁盘852中读取或向其写入的磁盘驱动器851,以及从诸如CD ROM或其他光学介质等可移动、非易失性光盘856中读取或向其写入的光盘驱动器855。可在示例性操作环境中使用的其他可移动/不可移动、易失性/非易失性计算机存储介质包括但不限于,磁带盒、闪存卡、数字多功能盘、数字录像带、固态RAM、固态ROM等。硬盘驱动器841通常通过诸如接口840之类的不可移动存储器接口连接到系统总线821,并且磁盘驱动器851和光盘驱动器855通常通过诸如接口850之类的可移动存储器接口连接到系统总线821。

作为替换或补充,本文所述的功能可至少部分地由一个或多个硬件逻辑组件来执行。例如、但非限制,可使用的硬件逻辑组件的说明性类型包括现场可编程门阵列(FPGA)、程序专用的集成电路(ASIC)、程序专用的标准产品(ASSP)、片上系统系统(SOC)、复杂可编程逻辑器件(CPLD)、等等。

上文讨论并在图11中示出的驱动器及其相关联的计算机存储介质为计算机810提供了对计算机可读指令、数据结构、程序模块和其他数据的存储。例如,在图11中,硬盘驱动器841被示为存储操作系统844、应用程序845、其他程序模块846和程序数据847。注意,这些组件可与操作系统834、应用程序835、其他程序模块836和程序数据837相同,也可与它们不同。在此操作系统844、应用程序845、其他程序模块846以及程序数据847被给予了不同的编号,以至少说明它们是不同的副本。

用户可以通过诸如键盘862、话筒863以及诸如鼠标、跟踪球或触摸垫等定点设备861等输入设备来将命令和信息输入至计算机810中。其他输入设备(未示出)可以包括操纵杆、游戏手柄、圆盘式卫星天线、扫描仪等。这些以及其他输入设备通常通过耦合到系统总线的用户输入接口860连接到处理单元820,但也可通过诸如并行端口、游戏端口或通用串行总线(USB)之类的其他接口和总线结构来连接。视觉显示器891或其他类型的显示设备也经由诸如视频接口890之类的接口连接至系统总线821。除了监视器以外,计算机还可包括诸如扬声器897和打印机896之类的其他外围输出设备,它们可通过输出外围接口895来连接。

计算机810使用到诸如远程计算机880等一个或多个远程计算机的逻辑连接在网络化环境中操作。远程计算机880可以是个人计算机、手持设备、服务器、路由器、网络PC、对等设备或其他常见的网络节点,且一般包括以上关于计算机810描述的多个或所有的元件。图11中所示的逻辑连接包括局域网(LAN)871和广域网(WAN)873,但也可以包括其他网络。此类联网环境在办公室、企业范围的计算机网络、内联网和因特网中是常见的。

当在LAN联网环境中使用时,计算机810通过网络接口或适配器870连接到LAN 871。当在WAN联网环境中使用时,计算机810通常包括调制解调器872或用于通过诸如因特网等WAN 873建立通信的其他手段。调制解调器872可以是内置的或外置的,可经由用户输入接口860或其他适当的机制连接到系统总线821。在联网环境中,相关于计算机810所示的程序模块或其部分可被存储在远程存储器存储设备中。作为示例而非限制,图11示出了远程应用程序885驻留在远程计算机880上。应当理解,所示的网络连接是示例性的,并且可使用在计算机之间建立通信链路的其他手段。

还应注意,本文描述的不同实施例可以按不同的方式来组合。即,一个或多个实施例的各部分可以与一个或多个其他实施例的各部分组合在一起。本文中构想了所有这些。

示例1是一种修改源代码的编程单元的执行行为的计算机实现的方法。所述方法包括加载源代码的编程。单元并确定是否针对该编程单元定义了至少一个定制至少一个定制基于所述定制的先决条件是否被满足而被选择性地执行。

示例2是如任意或所有先前的示例的计算机实现的方法,其中源代码的编程单元是源代码的单个行。

示例3是如任意或所有先前的示例的计算机实现的方法,其中源代码的编程单元包括源代码的多个行。

示例4是如任意或所有先前的示例的计算机实现的方法,其中源代码的编程单元是方法。

示例5是如任意或所有先前的示例的计算机实现的方法,其中至少一个定制选择性地执行以取代源代码的编程单元。

示例6是如任意或所有先前的示例的计算机实现的方法,其中所述至少一个定制在源代码的编程单元之前选择性地执行。

示例7是如任意或所有先前的示例的计算机实现的方法,其中所述至少一个定制在源代码的编程单元之后选择性地执行。

示例8是如任意或所有先前的示例的计算机实现的方法,其中所述至少一个定制的选择性执行包括在执行期间向所述至少一个定制提供对源代码的编程单元的变量的访问。

示例9是如任意或所有先前的示例的计算机实现的方法,其中所述访问是由所述至少一个定制中的范围定义来确定的。

示例10是如任意或所有先前的示例的计算机实现的方法,其中所述先决条件包括在源代码的编程单元中的变量的存在。

示例11是如任意或所有先前的示例的计算机实现的方法,其中所述变量不是在所述至少一个定制上操作的。

示例12是定义与源代码的编程单元有关的定制的计算机实现的方法。所述方法包括标识源代码的编程单元并指定与所标识的源代码的编程单元有关的定制执行。定制执行的范围被定义。所述源代码的编程单元的标识、指定的定制执行信息以及范围信息被存储并被提供给执行平台。

示例13是如任意或所有先前的示例的计算机实现的方法,并进一步定义了在所述定制将由执行平台执行之前必须存在于源代码的编程单元中的至少一个先决条件。

示例14是如任意或所有先前的示例的计算机实现的方法,其中所述先决条件包括在所述定制将由执行平台执行之前必须存在于源代码的编程单元中的参数。

示例15是如任意或所有先前的示例的计算机实现的方法,其中所述参数没有在定制中被使用。

示例16是如任意或所有先前的示例的计算机实现的方法,其中指定与所标识的源代码的编程单元有关的定制执行包括定制将取代所标识的源代码的编程单元来执行的指示。

示例17是如任意或所有先前的示例的计算机实现的方法,其中所述定制执行的范围被定义使得所述定制将能够访问它正在取代的源代码的编程单元的变量。

示例18是如任意或所有先前的示例的计算机实现的方法,其中指定与所标识的源代码的编程单元有关的定制执行包括定制将在所标识的源代码的编程单元之前绝对最先执行的指示。

示例19是如任意或所有先前的示例的计算机实现的方法,其中指定与所标识的源代码的编程单元有关的定制执行包括定制将在所标识的源代码的编程单元之后绝对最后执行的指示。

示例20是一种被配置为执行源代码的编程单元的计算机系统。所述计算机系统包括被配置为执行源代码的编程单元的处理器和适用于存储源代码的编程单元和关于所选的源代码的编程单元所定义的至少一个定制的存储组件。处理器被配置为加载源代码的编程单元并确定是否相对于所加载的源代码的编程单元定义了一个定制并基于所述定制的定义选择性地执行所述定制。

尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述具体特征或动作。更确切而言,上述具体特征和动作是作为实现权利要求的示例形式公开的。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1