CN101589366A - 面向生成器图形的编程框架中的并行化和植入 - Google Patents
面向生成器图形的编程框架中的并行化和植入 Download PDFInfo
- Publication number
- CN101589366A CN101589366A CNA2007800504497A CN200780050449A CN101589366A CN 101589366 A CN101589366 A CN 101589366A CN A2007800504497 A CNA2007800504497 A CN A2007800504497A CN 200780050449 A CN200780050449 A CN 200780050449A CN 101589366 A CN101589366 A CN 101589366A
- Authority
- CN
- China
- Prior art keywords
- maker
- execution
- producer graph
- dependence
- module
- 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.)
- Granted
Links
Images
Classifications
-
- 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4494—Execution paradigms, e.g. implementations of programming paradigms data driven
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3404—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for parallel or distributed programming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3409—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
- G06F11/3419—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment by assessing time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
- G06F11/3495—Performance evaluation by tracing or monitoring for systems
-
- 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3409—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
- G06F11/3428—Benchmarking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/865—Monitoring of software
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 Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
描述了一种面向生成器图形的编程框架中的并行化和/或植入的实施方式。在一个实施方式中,接收运行应用程序的请求,其中应用程序的面向对象的源代码包括方法和生成器依赖性声明,其中用于给定方法的生成器依赖性声明标识一组具有输出的零个或多个生成器,该输出是给定方法的输入,其中生成器是至少一个实例和与该实例相关联的方法。此外,可以使用运行时基于应用程序的生成器之间的依赖性来并行化执行应用程序。在一些实施方式中,使用运行时来植入应用程序。
Description
技术领域
本发明的实施方式涉及计算机领域;且更具体地,涉及利用运行时(runtime)来编程和执行代码的领域。
背景技术
面向对象的编程
面向对象的编程是一种计算机编程范例。在面向对象的编程的后面的理念是计算机程序可以被视为包括相互作用的单个单元(称为对象或实例)的集合,而不是传统地将程序视为函数的集合或简单视为用于计算机的指令列表。对象是用于将数据与操作该数据的方法绑定的语言机制。每一个对象能够通过方法被调用、处理数据以及向其他对象提供结果。每一个对象可以被视为具有独特角色或职责的独立机器或施动者。
反射式面向对象的语言是具有特定的特性集合的编程语言(例如,类、对象/实例、继承、反射等),但是反射式基于对象的语言有时用于标记具有这些特性的一些子集(例如对象)的编程语言。出于本文的需要,短语“面向对象源代码”以及“面向对象代码”用于指用具有这些特性的语言编写的代码(例如,用反射式面向对象的语言编写的代码、用反射式基于对象的语言编写的代码)。在过程怨言、非发射式面向对象的语言以及非反射式基于对象的语言是一般不支持这些特性的编程语言的情况下,转换技术可以用于将这些特性提供给(例如,通过仿真)适合用这些语言编写的代码;且由此,这些技术将这些语言转换成反射式基于对象的语言或反射式面向对象的语言。(这些技术不需要仿真面向或基于对象的语言的所有特性,而是可以只仿真对本文剩余部分感兴趣的这些特性)。出于本文的需要,短语“面向对象源代码”和“面向对象代码”还可以用于指这些转换后的过程怨言代码、非反射式面向对象、以及非反射式基于对象的语言代码。通过示例的方式而并非限定,本文主要描述用反射式面向对象的语言编写面向对象源代码。同样,术语对象和实例在这里可以互换使用。
在面向对象编程中主要使用的术语方法指专门与类(称作类方法、静态方法或工厂方法(factory method))或对象(称为实例方法)相关联的一段代码。如同过程编程语言中的过程,方法通常包括执行动作的语句序列、将这些动作参数化的输入参数的集合以及可能还有返回的一些种类的输出值。
当程序员使用面向对象语言写程序时,产生的代码从概念上可以视为包括四种基本类型的代码。第一种类型包括操作输入的实例以提供输出实例的命令(这里称为“转换”代码);一般被写为方法(这里称为“转换”方法)。第二种类型包括引起运行时以实例化类实例的实例实例化命令(这里被称为“实例实例化”代码)。第三种包括调用以上实例的属性方法(存取程序、转变器(mutator)等)的属性操作命令(这里称为“数据准备”代码)。第四种包括命令序列,该命令序列使用合适的实例(其中合适的实例包括用作参量(argument)的实例、实例方法使用的实例以及类方法使用的元类实例)启动方法调用排序,以规定什么实例的什么转换方法被调用,以什么顺序,以及利用哪些实例的哪些参数响应于数据准备代码做出的改变(这里称为“手动调用排序”代码)。手动调用排序代码有时被编写为与转换方法分开的方法,且从而手动调用排序代码包括用于转换方法的调用命令序列。程序一般在数据准备代码与手动调用排序代码(其还可以提取(dip into)实例实例化代码)之间重复,所述手动调用排序代码可以再调用转换代码(其也可以提取实例实例化代码和数据准备代码)。应当理解这是程序的概念性描述,因此,不应当认为在看待程序上是绝对的。
运行时
术语运行时在这里用于指运行用相同和/或不同语言编写的其他代码的基本代码的程序或库。由此,运行时是在程序运行时(包括与操作系统一起工作以提供功能诸如数学函数、输入和输出)支持程序的效用函数的集合。这些使程序员没有必要不断地重新编写在编程语言中规定的或操作系统提供的基本能力。由于运行时与操作系统之间的区分可能模糊,因此术语运行时在这里用于指与操作系统分开的代码和/或是操作系统一部分的代码。
早期运行时,例如FORTRAN的运行时,提供诸如数学运算的特征。其他语言添加了更复杂的特征——例如存储器无用信息集合,通常与对象支持相关联。最近的语言倾向于具有相当大的具有相当多功能的运行时。许多面向对象的语言还包括已知为“调度程序”和“类装载器”的系统。Java VirtualMachine(JVM)是这种运行时的一个示例:其还在运行时解译或汇编可动二进制Java程序(字节代码)。公共语言运行时(CLR)框架是运行时的另一个示例。
编程和执行框架
一种框架包括三个基本区域,在该框架中向终端用户提供应用。第一个区域包括操作系统和运行时的创建。该第一个区域由具有非常高级编程技能的程序员来执行。当在该区域工作时,程序员分别被称为操作系统程序员和运行时程序员。当创建面向对象语言的运行时的时候,运行时程序员支持执行在转换代码、实例实例化代码、数据准备代码以及手动调用排序代码中使用的各种类型的命令(例如,实例实例化命令、数据准备命令以及方法调用命令)。
第二个区域包括由运行时运行的面向对象应用源代码的创建。第二个区域再次由具有非常高级编程技能以及能理解应用的业务目的的程序员来执行。当在该区域中工作时,程序员被称为应用程序员。当用面向对象的编程语言创建应用时,应用程序员为要被创建的特定应用编写特定的转换代码、实例实例化代码、数据准备代码以及手动调用排序代码。作为这些的一部分,如果应用需要图形用户界面,则应用程序员还为特定应用设计图形用户界面并编码;从而还被称为应用设计者。
第三个区域包括由运行时运行的应用程序的使用。第三个区域由不需要具有任何编程技能的终端用户来执行。
手动调用排序代码
与应用的创建相关联的最大的开销一般包括手动调用排序代码的调试和/或优化。对于数据改变的每次时机,应用程序员必须考虑其影响并编写手动调用排序代码以使合适实例的合适转换方法随着合适的输入以合适的顺序被调用。应用程序员犯的典型错误包括:1)以错误的顺序调用合适实例的合适转换方法;2)响应于一些改变的数据忘记包括使一个或多个所需的实例转换方法被调用的命令;3)响应于一些改变的数据包括使不需要的实例转换方法被调用的命令(例如,包括调用不受数据改变影响的实例转换方法的命令)等。
通过举例的方式,生成手动调用排序代码的一种技术是使用观察者模式(有时称为“发布订阅”)以观察程序中实例的状态。在该观察者模式中,一个或多个实例(称为观察者或监听者)被注册(或自己注册)以观察被观察对象(主体)可能引发的事件。可以引发事件的被观察实例通常保留注册的观察者的集合。当事件被引发时,每一个观察者从被观察实例接收回调(被观察实例调用注册的观察者中的“通知”方法)。通知功能可以传递一些观察者可以使用的参数(一般是关于发生的事件的信息)。每一个观察者执行通知功能,最后在通知出现时定义其自身的行为。
被观察实例一般具有用于添加新观察者的注册方法和用于在事件被引发时从将被通知的实例列表中移除观察者的非注册方法。此外,被观察实例还可以具有用于暂时停止然后重新启动调用以防止多个相关更新低效层叠的方法。具体地,响应于属性值的改变而被调用的回调还常常改变一些其他属性的值,触发另外的回调等。
当使用观察者模式技术时,编写手动调用排序代码的应用程序员通过将观察者注册、注销、停止以及重新启动到不同的被观察实例以及为每一个实例编写通知方法和回调方法来规定调用什么示例、用哪种顺序以及通过注册来利用哪个输入。更具体地,观察者与被观测实例之间的关系在观察者模式内被本地管理(仅由被观测实例单独管理,不需要与其他被观测实例同步),从而需要根据多个被观察实例来同步事件的手动调用排序代码一般是每一个观察者的特定回调方法的一部分。
重写、易失性调用栈(Overwriting,Volatile Call Stack)
一般的运行时使用重写、易失性调用栈来堆积当前调用的未完成的调用。重写、易失性调用栈的重写在于:当每一次调用完成时,该栈出栈并抛弃项,而易失性在于该栈在每一次执行都被抛弃并重建。一般的运行时使用重写、易失性调用栈是因为一般的运行时响应于手动调用排序代码的执行来将重写、易失性调用栈的建立与具有合适输入的合适实例的合适转换方法的实际调用相结合。总之,响应于手动调用排序代码的执行,一般的运行时一个调用一个调用地(在做出每一个调用时)确定实例排序的转换方法并保留重写,易失性调用栈以只跟踪当前调用的未完成的调用。
程序执行和并行化
传统地,程序中的方法基于手动调用排序代码被按顺序执行。为了改善执行的效率和速度,一些方法在支持并行化的系统中被并行执行。通常,计算中的并行化是同时执行多个进程、任务或线程。为了执行并行化,应用程序员可以标识想要并行执行的方法,然后重新编写手动调用排序代码以使被标识的方法被并行执行。
目前,在计算中支持的常用并行化机制包括多进程和多线程。在多进程中,应用程序一般被分成多个任务。每一个任务在逻辑上是处理器可执行的计算工作的高电平、离散、独立的部分。为了实现并行化,至少一些任务在多个处理器上同时被执行。处理器可以经由网络被互相耦合并集中起来被称为网格。网格中的处理器可以包括本地处理器、远端处理器或两者的组合。
除了多进程,另外一种常用并行化机制是多线程。线程是执行任务的本地进程。支持多线程的处理器可以基本同时执行多个线程。这种处理器的一个示例是多核处理器,其中该多个处理器的每一个内核可以执行一个线程。
通过实例的方式,并行化中一种常规的技术是分析应用程序的源代码以提取应用程序中的配置。基于该配置,应用程序被分成多个子程序,所述子程序基于子程序的父子关系被表示在图形中。这些子程序基于子程序的父子关系被并行执行。
在一些常规计算系统中,从源代码中生成的中间代码的分析可以被执行以实现并行化。例如,中间代码(例如,汇编语言)和并行化的分析在编译期间被完成。编译器的并行器将中间代码转换成可并行执行形式。执行顺序确定器确定将被执行的基础块的顺序。扩展基础建造块并行器将基础建造块细分成执行单元,每一个执行单元组成可并行执行的指令。依赖性分析在指令基础上完成。
但是,上述常规技术都需要分析应用程序员编写的应用程序中的手动调用排序代码。因此,并行化的负担丢给了应用程序员,这是因为为了正确执行并行化,在编写手动调用排序代码时需要非常小心。因此,应用程序员需要具有相当高水平的编程技能。
为了使应用程序员的工作更轻松,改进了一些常规技术来执行应用程序的并行化而不需要高水平的编程技能。例如,提供围绕常规数据类型的特殊的语言结构以及特殊包装类(wrapper class)来并行执行连续的程序。程序员不需要为了能并行执行部分程序而编写“并行程序”。通过向系统规定并行过程指示符及其参量来在调用点规定并行过程。提供用于并行执行不同部分的执行并行功能。通过制定新的类来编写并行过程,该新的类从对应于程序中每一个并行过程的公共类中导出。在运行时系统解析依赖性以及并行化被完成至遇到实际依赖性的水平。编译器可以确定参量是否可以通过对并行过程的控制流图形的分析在并行过程中被修改。
在另一个常规计算系统中,在应用程序的正执行的用户定义的功能中使用数据库管理器,而不需要对在计算机程序自身中所支持的所有并行性进行硬编码。数据库表可以被定义为具有用户想要并行执行的指令。用户定义的功能然后被定义为执行表中的指令。数据库管理器通过并行执行用户定义功能中的多个任务以提供并行性。
软件植入(software instrumentation)
通常,软件植入指用于观察一个或多个应用程序的行为以及收集关于应用程序及其执行的规格的技术。因此,在应用程序和/或应用程序的执行可以基于应用程序的行为和收集的度量以各种方式做出改进的情况下,软件植入是开发中以及应用程序维护中有用的工具。
目前,已经开发了多种技术来实现软件植入。例如,一种技术是添加软件模块或代码来记录应用程序的执行历史由此可以基于记录的执行历史来管理将来应用程序的执行。在另一个示例中,编译器生成用于监控并收集度量的指令和元数据。如果选择的指示符与指令相关联,则激活与该指令的执行相关联的事件的计数。然后对执行指令的次数进行计数。在执行应用程序后,热点(hotpot)被标识以确定性能改进方法,且应用程序的源代码可以相应地被修改以执行性能改进方法。
植入的另一种常规技术是使用从应用程的源代码中生成的中间表示(IR)数据。具体地,编译器从源代码中生成IR数据。代码植入模块作用在IR数据上以构建IR树并基于IR树将植入添加到IR数据。之后编译器通过将具有植入的IR数据转换成对象代码来完成编译。使用植入库(下文中的植入DLL)可以植入类实例。虚拟机(VM)运行时模块可以运行植入的类实例。在类实例中的字节代码中有方法名称和参数的声明。特定的指示符指示对应于声明的方法的可执行部分可以在与VM运行时模块分开的固有代码的一些块中被找到。例如,植入的Java VM字节代码可以在执行期间由监控进程和监控库(a.k.a.a监控DLL)来监控。
对象关系映射
对象关系映射是链接关系数据库与面向对象语言概念的编程技术,(有效地)创建了“虚拟对象数据库”。一些对象关系映射程序自动保持存储器中装载的实例与数据库稳定同步。具体地,在构建了对象到SQL的映射查询之后,首先返回的数据被复制到正在处理的实例的字段中,例如任意的对象-SQL映射包。一旦这样,实例必须查看这些值是否改变,然后谨慎地使进程逆向以将数据写回到数据库外部。
Hibernate 3.0是用于Java和CLR的对象关系映射方案(乔治亚州亚特兰大市的公司)。从而,Hibernate提供用于将面向对象域模型映射到传统的关系数据库的框架。其目标是将开发者从一些公共数据持续性相关的编程任务中解脱出来。Hibernate处理从类到数据库表的映射(且从面向对象数据类型到SQL数据类型)以及提供数据查询和获取功能。Hibernate是以实例为中心并且建立表示实例之间关系的图形。
控制倒置和依赖倒置原理
控制倒置,也被称为IOC,是可以被用于减少计算机程序中固有的耦合性(每个程序模块依赖另一个模块的程度)的面向对象编程原理。IOC还被称为依赖倒置原理。在IOC中,如果以下任意一个适用,则类x依赖类y:1)x具有y并调用y;2)x是y;或者3)x依赖某个类z,而z依赖y(传递性)。值得注意x依赖y并不意味着y依赖x;如果两种情况为真,则称为循环依赖性;那么x在没有y的情况下不能被使用,反之亦然。
实际上,如果(类x的)对象x调用(类y的)对象y的方法,则类x依赖y。通过引入第三个类即接口类I来倒置依赖性,该接口类I必须包括x可以在y上调用的所有方法。此外,y必须被改变从而使得y实施接口I。x和y现在都依赖接口I以及类x不再依赖y(假定x没有实例化y)。通过引入接口I来消除类x对y的依赖性被称为控制倒置(或依赖倒置)。必须注意y可能依赖其他类。在应用转换之间,x依赖y并由此x间接依赖y所依赖的所有类。通过应用控制倒置,所有这些间接依赖性也被打破了。新引入的接口I不依赖任何类。
Spring Framework是用于使用IOC和依赖倒置的Java平台的开放资源应用框架。具体地,Spring Framework的核心是控制容器的倒置,所述控制容器提供配置并管理Java对象的工具。该容器还被称为BeanFactory、ApplicationContext或Core容器。该容器操作的示例为:创建对象、配置对象、调用初始化方法并将对象传递到注册的回调对象。由容器创建的对象还被称为被管理对象(Managed Objects)或Bean。通常通过装载包含Bean定义的XML文件来配置容器。这些提供创建对象所需的所有信息。一旦在没有产生错误的条件下创建并配置对象,则对象可使用。通过依赖性查找或依赖性注入可以得到对象。依赖性查找是调用程序向容器对象请求具有特定名称或特定类型的对象的方式。依赖性注入是容器经由构造器、属性或工厂(factory)方法按名称将对象传递给其他对象。因此,Spring Framework是以存储器为中心的,并建立表示实例之间关系的图形。
图形工具
JavadocTM是解析一组Java资源文件中的声明和文件注释并产生对应的一组的HTML页的工具,该HTML页表示(默认地)公共和受保护类、套嵌类(不是匿名内部类)、接口、构造器、方法以及字段(加利福尼亚州,圣克拉拉市的Sun公司)。Javadoc可以用于生成API(应用编程接口)文件或用于一组源文件的执行文件。Javadoc是类和方法为中心的并建立表示类的组合及其方法之间的关系的图形。
用于设计软件应用的另一个系统包括由解释器分析的用于表示并复制计算机应用的对象的图形。该系统使用存储在代码库中的预写编程类,该类可以被编写以遵循在以下文档中描述的设计模式:Addison Wesley1995年出版的Gamma等人的“Design Pattern”、Computer Publishing 1998年出版的Grand,Wiley的“Pattern in Java”、和/或高级计算机辅助软件工程(CASE)工具。更具体地,一些这样的类基于观察者行为方式。预编写的代码库表示应用状态节点、处理逻辑以及不同应用状态间的系统数据流(即,预编写的应用数据元素),从而用户在创建软件应用时不需要编写、编辑或编译代码。而是,用户通过编辑与当前应用状态节点相关联的可视对象(例如应用状态节点中的数据或在应用状态节点中执行的进程)来手动编辑图形用户界面中的软件应用。之后,基于用户对当前应用状态节点做出的改变,解释器针对刚被编辑的应用状态向用户显示更新后的应用状态。系统然后可以沿着用户定义的过渡边缘过渡到另一个应用状态,在该另一个应用状态用户可以编辑下一个应用状态或过度边缘。在软件应用运行时可以对解释器执行的图形实例做出图形改变。
用于设计软件应用的系统可以包括运行软件应用的可视表示,该运行软件应用可以被制定为利用应用控制器“可以被用”。当用户改变表示运行软件应用的可视对象时,控制器使用输入来促使解释器改变图形。然后控制器等待更多的改变。此外,这种软件应用的可视表示可以作为XML文件被输入或输出,该XML文件描述应用的可视表示从而描述软件应用。
为了以节点、定向的边缘以及应用状态的可视表示的形式编辑和/或创建软件应用,系统还可以包括应用程序接口和应用编辑器。来自预编写的代码库中的关键词和相关定义使应用开发者能手动定义软件应用、处理步骤,以及通过在编辑器中提供图形应用的图形表示得到的软件应用的可视表示,所述图形应用与实际应用结构密切相关。用户通过“应用定义向导”定义新应用,该“应用定义向导”在完成某些初步事情后将新应用显示为编辑器工作区中的图形组件。用户还通过使用电脑鼠标和键盘从显示的预先创建的可能应用组件列表中选择并将组件拖动并放入工作区来与应用交互。用户可以选择组件并在已有的组件上“拖动”组件。当新组件“落到”已有组件上,则该新组件成为应用图形中已有组件的子组件。应用中的组件的关系由编辑器中的用户选择手动定义。因此用户建立表示应用的树结构。当应用被创建,用户可以选择应用导航视窗来显示构建的应用的树视图,该树视图能够选择并编辑应用的任何组件。编辑器界面处理用户输入和选择,包括创建或删除应用元素、更新组件属性以及更新应用的显示属性。
上述的系统在使用软件应用的可视表示时还可以用作定义并更新相关数据库的可视编程工具。系统使用软件应用的可视表示的XML描述。工具解析并解释XML描述以产生等价的关系数据库表图示以及该图示的改变。当数据在软件应用的可视表示内发生改变时,该改变的描述与其他改变一起被存储在日志文件中且之后被作为分组处理。中间程序(在其自身的线程上操作的java应用程序)执行软件应用的可视表示与关系数据库之间的事务。Java应用程序轮询(即,检查)可视表示(即数据库中的数据)的节点改变的日志,且如果存在改变,就对数据库做出更改。因此,通过更换可视表示中的数据,系统可以更新数据库。相似的应用程序在软件应用程序的可视表示与处理来自数据库的数据请求的数据库之间也是有效的。
用于分析软件的另一种系统称为代码树分析器(CTA)。CTA分析用面向对象编程语言编写的静态源代码。CTA从静态源代码中生成符号表和调用树。使用符号表,CTA生成类图。类似地,使用调用树,CTA生成序列图。类图阐释用户选择的类和与所述用户选择的类相关的类之间的关系。序列图阐释不同方法被调用的顺序。通过使用类图和序列图,CTA生成表示静态源代码的设计制品。当用户修改所述设计制品时,CTA使用序列图来标识源代码的受影响的部分。所述设计制品用于代码维护和/或静态源代码的逆向工程。
发明内容
描述了面向生成器图形的编程框架中的并行化和/或植入的实施方式。在一个实施方式中,接收运行应用程序的请求,其中应用程序的面向对象源代码包括方法和生成器依赖性声明,其中给定方法的生成器依赖性声明标识一组零个或多个具有输出的生成器,该输出是给定方法的输入,其中生成器为至少一个实例以及与该实例相关联的方法。此外,应用程序的执行可以基于应用程序的生成器之间的依赖性通过使用运行时而被并行化。在一些实施方式中,使用运行时来植入应用程序。
附图说明
通过参照以下描述和附图可以更好地理解本发明,附图用于图示本发明的实施方式,其中:
图1A是示出了根据本发明一个实施方式的对面向对象的源代码中类的方法的生成器依赖性声明与来自给定实例的基于所述方法的生成器实例的关系的框图;
图1B示出了根据本发明一个实施方式的生成器110A与父生成器114A.1之间的示例性关系;
图1C示出了根据本发明一个实施方式的生成器110A与子生成器112A.1之间的示例性关系;
图1D示出了根据本发明的一个实施方式的父生成器114和子生成器112到生成器110A的示例性关系组合;
图1E示出了根据本发明的一个实施方式的相同类的不同实例可以具有基于相同和/或不同方法的生成器;
图2是示出了根据本发明的一个实施方式的具有面向生成器图形的编程支持的运行时的可重复使用性的框图;
图3A是示出了根据本发明的一个实施方式的具有面向生成器图形的编程支持的运行时的框图;
图3B是示出了根据本发明的一个实施方式的具有面向生成器图形的编程支持的运行时的框图,该支持还支持增量执行(incremental execution)和被覆盖(override)的生成器的输出;
图4A是示出了根据本发明的一个实施方式的示例性生成器图形的发现和建立的框图;
图4B是示出了根据本发明的一个实施方式的图4A中生成器图形的初始执行的框图;
图4C是示出了根据本发明的一个实施方式的图4B中的生成器图形的增量执行的框图;
图4D是示出了根据本发明的一个实施方式的在相关生成器2被覆盖后的图4B中生成器图形的增量执行的框图;
图4E是示出了根据本发明的一个实施方式的在相关生成器2被覆盖且无关源生成器3被修改后图4B中生成器图形的增量执行的框图;
图5A是示出了根据本发明的一个实施方式的包括未解析的依赖性的示例性生成器图形的发现和建立的框图;
图5B是示出了根据本发明的一个实施方式的图5A中生成器图形的初始执行以及对未解析依赖性的解析的框图;
图5C是示出了根据本发明的一个实施方式的图5A中生成器图形的初始执行和/或图5B中生成器图形的重新执行的框图;
图5D是示出了根据本发明的一个实施方式的图5A中生成器图形的初始执行和/或图5B或5C中生成器图形的重新执行的框图;
图6是根据本发明的一个实施方式的运行时客户端的逻辑执行流以及其与具有面向生成器图形编程支持的运行时的关系的流程图;
图7A示出了根据本发明的一个实施方式的使用快捷依赖性的方法的生成器依赖性声明的伪代码;
图7B是根据本发明的一个实施方式的示例性生成器的框图;
图7C示出了使用非快捷依赖性的方法的生成器依赖性声明的伪代码,并示出了示例性生成器的框图;
图7D示出了根据本发明的一个实施方式的使用非快捷依赖性的方法的生成器依赖性声明的伪代码;
图7E是根据本发明的一个实施方式的示例性生成器的框图;
图7F是根据本发明的一个实施方式的通过使用具有依赖性确定生成器的向上依赖性的示例性依赖性的框图;
图7G是根据本发明的一个实施方式的通过使用具有依赖性确定生成器的弱约束依赖性(WeaklyConstrainedDependency)的可能的示例性依赖性的框图;
图7H示出了根据本发明的一个实施方式的标准生成器的示例性生成器图形;
图7I示出了生成器依赖性以及用于发现、解析并建立图7H中的生成器图形的依赖性确定生成器的一个示例;
图8A是示出了根据本发明的一个实施方式的第一示例性框架的框图,其中在该框架中应用被提供给终端用户;
图8B是示出了根据本发明的一个实施方式的第二示例性框架的框图,其中在该框架中应用被提供给终端用户;
图8C示出了根据本发明的一个实施方式的具有可配置的交互式生成器输出布局的图形用户界面模块840的自由单元选择的示例性屏幕截图以及使用;
图8D示出了根据本发明的一个实施方式的具有可配置的交互式生成器输出布局的图形用户界面模块840的自由单元选择的另一个示例性屏幕截图以及使用;
图8E示出了根据本发明的一个实施方式的具有可配置的交互式生成器输出布局的图形用户界面模块840的表格创建的示例性屏幕截图以及使用;
图8F示出了根据本发明的一个实施方式的具有可配置的交互式生成器输出布局的图形用户界面模块840的表格创建的另一个示例性屏幕截图以及使用;
图9A是示出了根据本发明的一个实施方式的用于分配具有面向生成器图形编程支持的运行时的第一方案的框图;
图9B是示出了根据本发明的一个实施方式的用于分配具有面向生成器图形编程支持的运行时的第二方案的框图;
图9C是示出了根据本发明的一个实施方式的用于分配具有面向生成器图形编程支持的运行时的第三方案的框图;
图10是根据本发明的一个实施方式的示例性实施的框图;
图11A是根据本发明的一个实施方式的图10中类跟踪结构1092的示例的框图;
图11B是根据本发明的一个实施方式的图10中实例跟踪结构1065的示例的框图;
图11C是根据本发明的一个实施方式的图10中生成器图形结构1060的示例的框图;
图11D是根据本发明的一个实施方式的图10中方法跟踪结构1058的示例的框图;
图11E是根据本发明的一个实施方式的在多进程中使用的串行化形式本地映射的示例的框图;
图11F是根据本发明的一个实施方式的图10中运行时设置结构1048的示例的框图;
图11G是根据本发明的一个实施方式的图10中基于生成器的可配置的决定结构1049的示例的框图;
图12A是示出了根据本发明的一个实施方式的支持多进程的图10中另外细节的框图;
图12B是示出了根据本发明的一个实施方式的支持偶然(contingent)和订阅类型的动态生成器依赖性的图10中另外细节的框图;
图13A示出了根据本发明的一个实施方式的使用非快捷、非动态(非偶然、非订阅)的依赖性的方法的生成器依赖性声明的伪代码;
图13B是示出了根据本发明的一个实施方式的示例性非快捷、非动态(非偶然、非订阅)的生成器依赖性的生成器的框图;
图13C示出了根据本发明的一个实施方式的使用非快捷、偶然、非订阅的生成器依赖性的方法的生成器依赖性声明的伪代码;
图13D是示出了根据本发明的一个实施方式的示例性非快捷、偶然、非订阅的生成器依赖性的生成器的框图;
图13E示出了根据本发明的一个实施方式的使用非快捷、偶然、非订阅的生成器依赖性和快捷、偶然、非订阅的生成器依赖性的方法的生成器依赖性声明的伪代码;
图13F是示出了根据本发明的一个实施方式的非快捷、偶然、非订阅的生成器依赖性和快捷、偶然、非订阅的生成器依赖性的生成器的框图;
图13G示出根据本发明的一个实施方式的使用快捷、偶然、非订阅的生成器依赖性和快捷、非偶然、非订阅的生成器依赖性的方法的生成器依赖性声明的伪代码;
图13H是示出了根据本发明的一个实施方式的示例性快捷、偶然、非订阅的生成器依赖性和快捷、非偶然、非订阅的生成器依赖性的生成器的框图;
图13I示出了根据本发明的一个实施方式的使用快捷、非动态(非偶然、非订阅)的生成器依赖性的方法的生成器依赖性声明的伪代码;
图13J是示出了根据本发明的一个实施方式的示例性快捷、非动态的生成器依赖性的生成器框图;
图14A是根据本发明的一个实施方式的图12B中的订阅日志1250的示例的框图;
图14B是示出了根据本发明的一个实施方式的非偶然、吸收订阅(absorbing subscription)的生成器依赖性的示例性生成器的框图;
图14C是示出了根据本发明的一个实施方式的非偶然、粘附订阅(stickysubscription)的生成器依赖性的示例性生成器的框图;
图14D示出了根据本发明的一个实施方式的基于由粘附订阅创建的父依赖性确定生成器的父生成器的选择;
图14E示出了根据本发明的一个实施方式的基于由子依赖性确定生成器创建的父依赖性确定生成器的父生成器的选择,所述子依赖性确定生成器通过对依赖性排序而被链接;
图15是根据本发明的一个实施方式的实例化新实例的流程图;
图16A是根据本发明的一个实施方式的实例化新生成器且不覆盖生成器的流程图;
图16B是根据本发明的一个实施方式的图16A中的块1623的流程图;
图17是根据本发明的一个实施方式的图16A中的块1650的流程图;
图18是根据本发明的一个实施方式的图17中的块1745的流程图;
图19是根据本发明的一个实施方式的图16A中的块1630的流程图;
图20是根据本发明的一个实施方式的图16A中的块1635和块1670的流程图;
图21A是根据本发明的一个实施方式的覆盖生成器的流程图;
图21B是根据本发明的一个实施方式的覆盖生成器的执行模式设定的流程图;
图21C是根据本发明的一个实施方式的在运行时等级(runtime level)全面覆盖执行模式设定的流程图;
图21D是根据本发明的一个实施方式的根据基于生成器的可配置的决定结构来覆盖执行模式设定的流程图;
图22A是根据本发明的一个实施方式的当前生成器图形的执行的流程图的一部分;
图22B是根据本发明的一个实施方式的当前生成器图形的执行的流程图的另一部分;
图23是根据本发明的一个实施方式的图22A中的块2205的流程图;
图24是根据本发明的一个实施方式的图22B中的块2260的流程图;
图25是根据本发明的一个实施方式的基本并行执行一组就绪生成器的流程图的一部分;
图26是根据本发明的一个实施方式的基本并行执行一组就绪生成器的流程图的另一部分;
图27A是根据本发明的一个实施方式的在执行一组就绪生成器之前实例化数据结构的流程图的一部分;
图27B是根据本发明的一个实施方式的在执行一组就绪生成器之前实例化数据结构的流程图的另一部分;
图28A是根据本发明的一个实施方式的使用多线程来执行生成器的流程图;
图28B是示出了根据本发明的一个实施方式的以多线程来执行线程的流程图;
图28C是根据本发明的一个实施方式的处理线程终止回调的流程图;
图29A是根据本发明的一个实施方式的使用多进程和本地执行来执行生成器的流程图的一部分;
图29B是根据本发明的一个实施方式的使用多进程和本地执行来执行生成器的流程图的另一部分;
图30是根据本发明的一个实施方式的将被多处理的生成器的输入和/或基本实例串行化的流程图;
图31A是根据本发明的一个实施方式的远程计算的流程图的一部分;
图31B是根据本发明的一个实施方式的远程计算的流程图的另一部分;
图32是根据本发明的一个实施方式的生成器的本地执行的流程图。
具体实施方式
在以下的描述中,例如逻辑执行、操作码、规定操作数的方法、资源划分/共享/复制执行、系统组件的类型和相互关系以及逻辑划分/集成选择的多个具体细节被提出以为本发明提供更全面的理解。但是,本领域技术人员应当理解,在没有这些具体细节的情况下本发明也能实施。在其它的情况,没有具体示出控制结构、门级电路以及全软件指令序列以避免使本发明晦涩。本领域技术人员在有了这些描述后能够在没有不适当的实验的情况下能实现合适的功能。
除非另有规定,否则图中的虚线(虚分界线除外)用于表示图中可选项。但是不应该认为所有的可选项都是使用虚线来显示的,而是用虚线显示的这些项由于各种原因被选择(例如,它们可以很容易地被显示以提供更好的清晰度等)。
说明书中的引用“一个实施方式”、“实施方式”、“示例性实施方式”等表示所述的实施方式可以包括特定的特征、结构或特性,但是每一个实施方式不用必须包括所述特定的特征、结构或特性。此外,这些短语不一定是指同一个实施方式。再者,当结合实施方式描述特定的特征、结构或特性时,可以理解,无论是否明确描述,改变与实施方式有关的这些特征、结构或特性是本领域技术人员所了解的。
在下面的描述和权利要求中,可能使用了术语“耦合”和“连接”以及它们的派生词。应当理解这些术语不是彼此的同义词。而是,在特定实施方式中,“连接”可以用于表示两个或多个元件彼此直接物理或电接触。“耦合”可以表示两个或多个元件直接物理或电连接。但是“耦合”还可以表示两个或多个元件彼此没有直接连接,但仍然互相合作或相互作用。
在一些情况下,参考其他框图的示例性实施方式来描述流程图的操作。然而,应当理解,流程图的操作可以被本发明的实施方式执行而不是被参考其他框图论述的实施方式来执行,且参考其他框图论述的本发明的实施方式可以执行与参考流程图而论述的操作不同的操作。
可以使用存储在一个或多个计算机上并在该一个或多个计算机上执行的代码和数据来执行图中所示的技术。该计算机使用诸如机器存储介质(例如,磁盘、光盘、随机存取存储器、只读存储器、闪存装置)的机器可读介质来存储代码和数据并使用机器通信介质(例如,电、光、声或其他形式的传播信号-例如载波、红外信号、数字信号等)传送(在内部和通过网络与其他计算机)该代码和数据。此外,该计算机通常包括一组一个或多个处理器,该处理器与一个或多个其他组件耦合,例如存储装置、多个用户输入/输出装置(例如键盘和显示器)以及网络连接。该组处理器与其他组件的耦合一般通过一个或多个总线和桥(也称为总线控制器)。存储装置和网络流量分别表示一个或多个机器存储介质和机器通信介质。因此,给定计算机系统的存储装置一般存储用于在该计算机的所述一组一个或多个处理器上执行的代码和数据。当然,可以使用软件、固件和/或硬件的不同组合来实施本发明的实施方式的一个或多个部分。
概述
根据本发明的一个方面,生成器是至少一个特定实例(或对象)和特定方法,从而如果在运行时期间执行该生成器,则该特定方法在特定实例上被执行。由此,给定的生成器根据给定实例以及与该实例相关联的给定方法而被实例化。如类、实例和方法,生成器是运行时处理的基本元素和结构。因此运行时解释并跟踪生成器的实例化,且由此运行时跟踪由生成器表示的实例和方法的组合。换句话说,生成器是由运行时跟踪、执行的运行时可实例化的结构,且包括至少一个实例和与该实例相关联的方法,从而运行时执行生成器使该生成器的方法在生成器的实例上被执行。此外,生成器的方法与其生成器依赖性声明相关联,该声明为给定生成器标识一组零个或多个生成器依赖性、一组零个或多个生成器。具体地,使用生成器依赖性声明来为方法声明生成器依赖性,用于给定方法的生成器依赖性声明可以包括零个或多个生成器依赖性,且每一个生成器依赖性标识一组零个或多个生成器。因此,生成器依赖性声明以及该声明定义的生成器依赖性由运行时来解释并跟踪,且由此运行时跟踪生成器依赖性声明指示的生成器之间的关系。
当给定生成器依赖于一组一个或多个其他生成器时,运行时将确保在给定生成器之前执行所述一组其他生成器。因此,生成器依赖性声明表示生成器之间的执行关系,而生成器表示将被执行的操作(方法)和实例。当在本发明的一些实施方式中,允许子生成器上的父生成器的生成器依赖性在与父生成器的方法相关联的生成器依赖性声明中被声明(父生成器的生成器依赖性声明标识任意子生成器——这里称为向下声明),本发明的其他实施方式还允许依赖性在与子生成器的方法相关联的生成器依赖性声明中被声明(子生成器的生成器依赖性声明标识一个或多个父生成器-这里称为向上声明)。
在本发明的不同实施方式中,生成器标识另外的事情。例如,当在本发明的某些实施方式中,生成器是至少一个实例和与该实例相关联的方法,在本发明的其他实施方式中,生成器是类、类的实例以及与该实例相关联的方法(例如,生成器可以直接包括类、实例以及方法;生成器可以直接包括实例和方法,而通过引用(例如,实例中的引用)间接标识该实例的类)。在本发明可以用于用不同编程语言(例如,用反射式面向对象的语言编写的面向对象代码;用反射式基于对象的语言编写的面向对象代码;用过程、非反射式面向对象、非反射式基于对象的语言编写并转换成面向反射对象语言代码的代码)编写的代码上下文中的同时,参考反射式面向对象编程语言并参考直接包括类、实例和方法的生成器,以举例而非限定的方式来描述本发明的实施方式。此外,虽然在本发明的一个实施方式中生成器的方法是实例方法(除了作为参量被接收的任何输入,还可以使用实例字段的方法),本发明的可替换实施方式还可以或可替换地支持为类方法的生成器的方法(接收所有输入作为参量和/或使用实例无关变量的方法)(当生成器的方法是实例方法时,生成器的实例是类实例;而当生成器的方法是类方法时,该生成器的实例是表示该类的元类实例)。
图1A是示出了根据本发明的一个实施方式的对面向对象源代码中类的方法与生成器的生成器依赖性声明的关系的框图,所述生成器包括类、该类的给定实例以及该类的方法。在图1A中,显示了面向对象源代码100,其包括类102,而类102包括方法104、执行模式设定105以及用于方法104的生成器依赖性声明106。当然类102一般包括一个或多个字段(未显示)和另外的方法(未显示)。另外,面向对象源代码100一般包括另外的类。
在运行时期间,类102的实例108被实例化。实例108包括类102的字段数据。另外,生成器110被实例化,其中生成器110标识类102、类102的实例108(与类102的方法104相关联)以及类102的方法104。生成器依赖性声明106向运行时标识一组零个或多个生成器112(称为生成器110的子生成器),该一组零个或多个生成器112在执行生成器110之前必须被执行。换句话说,生成器110依赖一组零个或多个生成器112。除了或代替使用一组生成器112的输出,生成器110可以使用实例108的数据。此外,生成器110提供至少一个输出,输出可以在实例108的内部(从而修改实例108的数据)和/或外部;任何一种方式,生成器110的输出可以被一组零个或多个其他生成器114(称为生成器110的父生成器)使用。如之前所示和之后所详细描述的,在本发明的一些实施方式中,生成器依赖性声明106还可以向运行时标识零个或多个生成器114。
应当理解生成器的输入和输出是基于方法的输入和输出,这些生成器基于该方法。这样,这些输入和输出可以表示具有各种数据结构的多个参数。
用于给定方法的生成器依赖性声明在运行时标识被实例化并执行的一组零个或多个生成器。通过示例的方式,如果用于给定方法(例如方法104)的生成器依赖性声明(例如生成器依赖性声明106)在给定生成器(例如该组生成器112中的一个)(该给定生成器标识第一类、该类的第一实例以及第一实例的第一方法)上标识生成器依赖性,则给定方法的生成器依赖性声明向运行时标识第一实例将被实例化(如果还没有)和第一方法将用于实例化第一实例的给定生成器(在这些示例中,第一不是指位置或顺序)。
在操作中,当在运行时期间给定的一组一个或多个生成器被指定为感兴趣的且具有为它们声明的生成器依赖性时,则运行时:1)基于生成器依赖性声明106从指定为感兴趣的给定的一组生成器向下至源生成器,自动生成(发现、建立以及可选地解析)一组一个或多个图形,该图形可以是多级和各种形状(例如,链形、树形);2)顺序执行所述一组图形的生成器以生成指定为感兴趣的给定的一组生成器的输出。因此,运行时使用生成器依赖性声明106来确定执行具有哪些参量的哪些实例的哪些方法以及何时用于同步。
在一些实施方式中,运行时检查执行模式设置150以确定生成器的执行模式。不同的执行模式可以在不同的系统中被支持。执行模式的一些示例包括多线程、多进程和本地执行。
生成器依赖性向运行时表示生成器的执行顺序。但是,在本发明的不同实施方式中,除了指示执行顺序,生成器依赖性还表示不同的输入与输出的关系。例如,本发明的不同实施方式可以支持一个或多个参量生成器依赖性、字段生成器依赖性以及仅排序的(sequencing only)生成器依赖性(仅排序的生成器依赖性这里称为速记排序生成器依赖性)。当每一个参量生成器依赖性、字段生成器依赖性以及排序生成器依赖性表示生成器之间的执行顺序关系时,参量和字段生成器依赖性还表示运行时知道的数据。具体地,参量生成器依赖性使运行时将作为输入参数的子生成器的输出映射到父生成器,而字段生成器依赖性指示实例的字段的使用。不管生成器依赖性表示的输入与输出的关系如何,恰当使用生成器依赖性能确保生成器访问信息在影响该信息的生成器之后被排序。
排序依赖性可以用于多种目的,包括确保以运行时不知道的方式修改数据的生成器与使用该数据的生成器之间的执行顺序(子生成器可以以需要父生成器的方法来包括代码以访问输出的方式来编写其输出(例如,通过影响不是常规生成器输出且不被运行时检测的输出来影响环境的方法,不检测该方法-例如设定全局变量的方法、设定不是生成器输出的实例中的字段的方法、影响外部数据源的方法等))。因此,排序依赖性在子生成器上反映父生成器的依赖性,但是需要被提供的输出(如果有),该输出通过编写代码一次又一次产生而被提供(例如,写入输出到给定机制(例如设定全局变量、影响外部数据源、设定不是生成器输出的实例的字段等)的子生成器的方法中的代码和从给定机制读出该输出的父生成器的方法中的代码)。以这种方式,排序依赖性允许运行时对依赖运行时不能检测的输出的任意父生成器的执行进行同步。
在本发明的一个实施方式中,用于给定方法的生成器依赖性声明106在生成器上只标识直接依赖性(即,直接继承(子),与间接继承不一样(孙子、曾孙子等))。在这样的实施方式中,每一个生成器依赖性声明只提供生成器的一个等级或层,该生成器的输出可以被根据给定方法实例化的生成器直接使用;将生成器图形的另外层的发现/建立/解析留给其他生成器依赖性声明的运行时处理。
根据本发明的一个实施方式,生成器依赖性声明106标识的生成器的依赖性在实现包括生成器的应用程序的并行化和植入中是有用的。为了并行化应用程序,应用程序的两个或多个生成器在相同执行模式或不同执行模式下基本同时被执行。为了植入应用,在生成器被执行时获得生成器的度量。以下参考本发明的示例性实施方式进一步论述并行化和植入的详情。
示例性关键字
生成器可以被视为一组多个标识符,一个标识符用于每一个指定粒度(granularity)的另外等级。此外,本发明的一些实施方式将每一个标识符实施为单独的关键字,而其他实施方式具有共享关键字的某些标识符。通过示例的方式,本发明的一些实施方式将生成器实施为类、实例以及方法三元组并实施关键字,从而三元组的每一个部分由单独的关键字来标识(类关键字、实例关键字以及方法关键字)且生成器由类关键字、实例关键字以及方法关键字的组合(生成器关键字)来标识。
使用关键字的本发明的实施方式可以改变使用的关键字的唯一性。例如,在本发明的一个实施方式中,每一个类关键字是唯一的,每一个实例关键字在所有类的所有实例中是唯一的,且每一个方法关键字在所有类的所有方法中是唯一的。作为另一个示例,在本发明的另一个实施方式中,每一个类具有唯一的关键字,每一个给定类的实例具有唯一的关键字(在类实例中),以及每个类的方法具有唯一的关键字(在类方法中);但是不同类的实例可以具有相同的实例关键字,且不同类的方法可以具有相同的方法关键字;后者的方法可以以举例而非限定的方式用于本文的后面的部分。例如,假定第一类包括方法并具有用于这些方法中每一个的在第一类中是唯一的关键字,则该类的实例(每一个实例具有的关键字相较于另一个是唯一的)具有与其相关联的相同的方法关键字。作为另一个示例,假定不同的第二类包括方法(与第一类的方法有一些、全部或没有相同),该方法具有与用于第一类的关键字相同的关键字;这样,该不同类的实例可以与和第一类的实例相关联的相同的方法相关联。
关键字的使用允许多个特征,包括:1)生成器标识符标识的每一个实体的跟踪(例如,每一个类、实例和方法的跟踪);2)基于父生成器的生成器依赖性声明(该声明使用生成器关键字规定生成器依赖性)连接到相同子生成器的一些父生成器(不知道相互的存在);等等。在本发明的一个实施方式中,实例关键字是拥有两个元素的类的实例(实例关键字):实例关键字性质,指示关键字指示符是否是对实例或对另一个对象(例如,字符串)的引用;以及关键字指示符,该关键字指示符可以是实例或另一个对象(例如,字符串)的引用。在实例关键字中存储实例引用可以让程序员不用为标识这些实例而起名字。
示例性关系
在关于生成器被视为一组多个标识符(一个标识符用于所规定粒度的每一个另外层)的上述上下文中,在本发明的一个实施方式中,生成器及其子生成器和父生成器之间的各种支持的关系是:至少一个所述标识符在生成器和其一组零个或多个父生成器之间不同,且至少一个所述标识符在生成器和其一组零个或多个子生成器的每一个之间不同。通过提供一些示例性关系,假定第一生成器被实例化,如果第一生成器是第一类的第一实例和第一类的第一方法,并假定用于该第一方法的生成器依赖性声明在运行时将第二生成器标识为子生成器,那么第二生成器可以是:1)第一类的第一实例和该第一类的第二方法;2)第一类的第二实例和该第一类的第二方法;或3)第一类的第二实例和该第一类的第一方法;或4)第二类的实例和该第二类的方法。这种情况,第一生成器依赖于第二生成器-由此,在第二生成器上表示第一生成器的输入与输出的关系。以下对使用面向对象语言的本发明的一个实施方式描述各种关系和这些关系的组合,且其中生成器标识至少一个类、实例和方法。
图1B-1D示出了根据本发明的一个实施方式的给定生成器、其一组父生成器以及其一组子生成器之间的示例性关系。图1B-1D每一个示出了:1)类定义102A,包括方法104A-C和分别用于这些方法的每一个的生成器依赖性声明106A-C;2)类定义102B,包括方法104D-E和分别用于这些方法的每一个的生成器依赖性声明106D-E;3)类定义102C,包括方法104F和用于该方法的生成器依赖性声明106F;4)类102A的实例108A;5)生成器110A,该生成器112A标识类102A、实例108A以及方法104A;以及6)生成器112A.1和生成器114A.1,分别表示一组生成器112和一组生成器114中的一个。图1B-1D中在其上具有带框的字母的虚线用于表示示例性关系。因此,在其上具有带框的A的虚线的集合表示一种关系。图1B中的关系可以与图1C中的关系结合;这样,这些结合表示父生成器114A和子生成器112A到生成器110A之间的关系的组合。此外,图1D示出了父生成器114A和子生成器112A到生成器110A之间的关系的一些另外的示例性组合。
图1B示出了根据本发明的一个实施方式的生成器110A与父生成器114A.1之间的示例性关系。图1B还包括实例108B。一组生成器114由相同类的不同方法、相同类的不同实例和/或不同类的方法的其他生成器依赖性声明来标识;且由此,一组生成器114的每一个可以是:1)与生成器110A相同的实例(类102A的实例108A)和该实例的不同方法(由从实例108A到生成器114A.1以及从方法104B到生成器114A.1的虚线上的带框的A示出);2)类102A的不同实例和该实例的不同方法(由从类102A到实例108B,从实例108B到生成器114A.1以及从方法104B到生成器114A.1的虚线上的带框的B示出);3)不同类的实例和该实例的方法(由从类102B到实例108B,从实例108B到生成器114A.1以及从方法104D到生成器114A.1的虚线上的带框的C示出);或4)类102A的不同实例(不是实例108A)和该实例的相同方法(方法104A)(例如,具有偶然依赖性——在后面描述)(由从类102A到实例108B,从实例108B到生成器114A.1以及从方法104A到生成器114A.1的虚线上的带框的D示出);此外,如果一组生成器114中有多个生成器,则生成器本身可以是类102A的相同实例、类102A的不同实例、不同类的相同实例、不同类的不同实例和/或以上的混合中的一部分。
图1C示出了根据本发明的一个实施方式的生成器110A与子生成器112A.1之间的示例性关系。图1C还包括实例108C。一组生成器112A的每一个可以是:1)与生成器110A相同的实例(类102A的实例108A)和该实例的不同方法(由从实例108A到生成器112A.1和从方法104C到生成器112A.1的虚线上带框的E示出);2)类102A的不同实例和该实例的不同方法(由从类102A到实例108C,从实例108C到生成器112A.1以及从方法104C到生成器112A.1的虚线上带框的F示出);3)不同类的实例和该实例的方法(由从类102C到实例108C,从实例108C到生成器112A.1以及从方法104F到生成器112A.1的虚线上的带框的G示出);或类102A的不同实例(不是实例108)和该实例的相同方法(例如,具有后面描述的偶然依赖性)(由从类102A到实例108C,从实例108C到生成器112A.1以及从方法104A到生成器112A.1的虚线上的带框的H示出)。因此,一组生成器112A的每一个可以是与生成器110A相同的实例、与类102A不同的实例或不同类的实例;此外,如果在一组生成器112A中存在多个生成器,则生成器112A本身可以是类102A的相同实例、类102A的不同实例、不同类的相同实例、不同类的不同实例和/或以上的混合中的一部分。
图1D示出了根据本发明的一个实施方式的父生成器114和子生成器112到生成器110A的关系的一些另外的示例性组合。图1D还包括实例108B和实例108C。图1D的组合如以下表1中所示:
表1
带框字母 | 用于父生成器114A.1的虚线,从 | 用于子生成器112A.1的虚线,从 |
I | 从实例108A到生成器114A.1以及从方法104B到生成器114A.1 | 从实例108A到生成器112A.1以及从方法104B到生成器112A.1 |
J | 从实例108A到生成器114A.1以及从方法104B到生成器114A.1 | 从类102A到实例108C,从实例108C到生成器112A.1,以及从方法104B到生成器112A.1 |
K | 从类102A到实例108B,从实例108B到生成器114A.1,以及从方法104B到生成器114A.1 | 从实例108A到生成器112A.1以及从方法104B到生成器112A.1 |
L | 从类102B到实例108B,从实例108B到生成器114A.1,以及从方法104E到生成器114A.1 | 从类102B到实例108B,从实例108B到生成器112A.1,以及从方法104E到生成器112A.1 |
M | 从类102B到实例108B,从实例108B到生成器114A.1,以及从方法104E到生成器114A.1 | 从类102B到实例108C,从实例108C到生成器112A.1,以及从方法104E到生成器112A.1 |
N | 从类102A到实例108B,从实例108B到生成器114A.1,以及从方法104A到生成器114A.1 | 从类102A到实例108C,从实例108C到生成器112A.1,以及从方法104A到生成器112A.1 |
O | 从类102A到实例108B,从实例108B到生成器114A.1,以及从方法104A到生成器114A.1 | 从类102A到实例108B,从实例108B到生成器112A.1,以及从方法104A到生成器112A.1 |
P | 从实例108A到生成器114A.1以及从方法104B到生成器114A.1 | 从类102A到实例108C,从实例108C到生成器112A.1以及从方法104A到生成器112A.1 |
Q | 从类102A到实例108B,从实例108B到生成器114A.1,以及从方 | 从类102A到实例108B,从实例108B到生成器112A.1,以及从方 |
法104A到生成器114A.1 | 法104B到生成器112A.1 | |
R | 从类102B到实例108B,从实例108B到生成器114A.1,以及从方法104D到生成器114A.1 | 从类102B到实例108B,从实例108B到生成器112A.1,以及从方法104E到生成器112A.1 |
图1E示出了根据本发明的一个实施方式的相同类的不同实例可以具有基于相同和/或不同方法的生成器。图1E显示:1)类定义102A,包括方法104A-C和分别用于所述方法的每一个的生成器依赖性声明106A-C;2)类102A的实例108A和实例108B;3)生成器110A是类102A的实例108A的方法104A;4)生成器110B是是类102A的实例108A的方法104B;5)生成器110C是类102A的实例108B的方法104A;6)生成器110D是类102A的实例108B的方法104C。此外,图1D显示:1)用于方法104A的生成器依赖性声明106A在运行时标识生成器110A和生成器110C的子生成器;2)用于方法104B的生成器依赖性声明106B在运行时标识生成器110B的子生成器;以及3)用于方法104C的生成器依赖性声明106C在运行时标识生成器110D的子生成器。
示例性运行时
图2是示出了根据本发明的一个实施方式的具有面向生成器图形编程支持的运行时的可重复使用性的框图。在图2中,多个面向对象应用程序(具有生成器依赖性声明210A-I的面向对象应用代码)由具有面向生成器图形编程支持的相同运行时220运行。
图3A是示出了根据本发明的一个实施方式的具有面向生成器图形编程支持的运行时的框图。在图3A中,具有面向生成器图形编程支持的运行时335包括自动生成器图形执行模块340和生成器图形执行模块345。运行时335用于执行面向对象源代码,以及从而包括未显示的另外的模块。
此外,图3A显示了用于面向对象源代码中的方法的生成器依赖性声明320、当前组一个或多个其输出是感兴趣输出的生成器325(这里也称为当前选择的感兴趣生成器)以及源生成器的输出330(在后面描述)。自动生成器图形执行模块340接收生成器依赖性声明320和当前组的感兴趣生成器325。
自动生成器图形生成模块340尝试基于生成器依赖性声明发现具有直接或间接促成(contribute)当前选择的感兴趣生成器的输入的输出的生成器,并建立当前的生成器图形,该图形表示从当前选择的感兴趣生成器到为源生成器的被发现的生成器的这些生成器对彼此的输入依赖性。生成器图形被存储在生成器图形结构380中。
生成器图形执行模块345从自动图形模块340和源生成器330的输出接收当前生成器图形,并执行当前生成器图形的生成器以确定当前选择的感兴趣生成器的当前输出。在一些实施方式中,生成器图形执行模块345包括并行化模块3451、多进程模块3453、多线程模块3455以及本地执行模块3457。并行化模块3451可以确定生成器的执行模式并将生成器发送到多进程模块3453、多线程模块3455以及本地执行模块3457中的一者以在确定的执行模式下被执行。单独的执行模式可以支持并行化。例如,多进程模块3453可以使用多进程来完成生成器的并行执行。可替换地,多线程模块3455可以使用多线程来完成生成器的并行执行。此外,执行模式的组合可以支持并行化。换句话说,可以使用不同的执行模式来并行地执行生成器。例如,通过发送一个生成器给多线程模块3455及发送另一个生成器给本地执行模块3457来并行执行两个生成器。应当理解可以使用执行模式的其他组合来实现并行化。
生成器图形执行模块345缓存生成器输出缓存384示出的生成器图形结构380中的当前生成器输出。在执行期间对生成器图形的生成器输出的缓存允许同步。例如,执行依赖于多个子生成器的父生成器的合适时间是在所有多个子生成器已经被执行之后;换句话说,每一次执行完它的子生成器后执行父生成器是很浪费的(并且,在一些情况下是不可能的)。对生成器输出的缓存不但允许推迟父生成器的执行直到其所有的子生成器被执行完,而且允许当所有的子生成器被执行完且它们的输出被缓存时,确定用于执行父生成器的合适时间。因此,运行时通过检查生成器输出缓存384中所需输出的可用性来为程序员做出这种同步决定;换句话说,这种同步是自动的(程序员不需要包括用于确定执行实例的给定方法的合适时间的单独源代码)。通过另一个示例,如果某些父生成器依赖于相同的子生成器以及其他不同子生成器,则执行所述某些父体生成器的每一个的合适时间通常是不同的;运行时依据父生成器的一组子生成器的输出的可用性来自动确定执行所述某些父生成器的每一个的合适时间。
如在后面详细描述的,因为生成器图形的一些部分由于动态生成器依赖性而可能不是当前可发现的,因此自动生成器图形执行模块340“尝试”发现并建立整个生成器图形,但是初始可能不能完成整个生成器图形直到一些生成器被执行。这样,生成器图形执行模块345可以在当前生成器图形执行期间调用具有所需生成器输出的自动生成器图形执行模块340以完成当前生成器图形中任何未解析的余项(这在图3A中由从生成器图形执行模块345到自动生成器图形执行模块340的虚箭头线示出;使用虚箭头线是因为这种支持是可选的)。
图4A是示出了根据本发明的一个实施方式的示例性生成器图形的发现和建立的框图。图4A显示了当前组的感兴趣生成器包括生成器1。基于生成器1及其生成器依赖性声明,生成器2和生成器3被发现。换句话说,生成器1的生成器依赖性声明标识生成器1的输入需要生成器2和生成器3的执行。这样,生成器1是相关的生成器(具有一个或多个生成器依赖性的生成器)。图4A还显示了当生成器3是无关生成器(不具有生成器依赖性的生成器,且因此是源生成器),生成器2是相关生成器。因此,基于生成器2的生成器依赖性声明,生成器4和生成器5被发现。在图2A中,生成器4和生成器5是无关生成器(因此,是源生成器)。
图4B示出了是根据本发明的一个实施方式的图4A中生成器图形的初始执行的框图。在图4B中,弯曲的箭头线示出执行一个生成器以生成被提供作为另一个生成器输入的输出。如图3A中所示,源生成器330的输出被提供给生成器图形执行模块345;相反,如图4B所示相关生成器1-2的输出通过执行这些生成器来被确定。因此,在图4B中,发生:1)源生成器4和源生成器5的输出被提供给相关生成器2;2)相关生成器2被执行;3)相关生成器2和源生成器3的输出被提供给生成器1;以及4)生成器1被执行且其输出被提供作为当前感兴趣输出。值得注意,图4B的生成器图形是在数据在图形上从一个生成器流向另一个生成器的情况上被驱动的数据。
在一些实施方式中,因为生成器4和生成器5是彼此无关的,因此使用不同执行模式或支持并行化的单个执行模式(例如,多进程、多线程等)可以并行执行生成器4和生成器5。但是,由于生成器2在当前示例中依赖于生成器4和5,因此生成器2不可以与生成器4和5并行执行。因此,运行时在执行生成器2之前可以等待生成器4和5被完成。至于生成器3,由于生成器3与生成器4和5无关,因此生成器3可以与生成器4和5并行执行。可替换地,由于,生成器3还与生成器2无关,因此生成器3可以与生成器2并行执行。在一些实施方式中,根据执行生成器3、4和5所花的时间,生成器3的执行在时间上可以与生成器4和5的执行以及生成器2的执行重合。
因此,生成器依赖性声明320限制(bound)可能被生成的可能的生成器图形;而当前选择的一组感兴趣生成器325标识要生成的当前生成器图形的起始节点。根据这两点,自动生成器图形生成模块340发现并建立生成器图形。发现和建立的自动化在于自动生成器图形生成模块340没有被提供生成器图形(例如,其不需要由程序员手动标识)或甚至在生成器图形中的生成器列表。而是,自动生成器图形生成模块340解析当前选择的一组感兴趣生成器的生成器依赖性声明以发现它们的子生成器,然后向下解析这些子生成器的生成器依赖性声明等直到源生成器(在后面描述的本发明的一些实施方式中,这可以借助生成器图形执行模块345来完成)。在生成器图形是树的情况下,当前选择的感兴趣生成器是根节点,且生成器依赖性声明被解析直到发现叶节点(源生成器)。
被覆盖的生成器和增量执行
图3B是示出了根据本发明的一个实施方式的具有面向生成器图形编程支持的运行时的框图,该支持还支持增量执行和被覆盖的生成器输出。应当理解,增量执行和被覆盖的生成器输出是各自无关的可选特征,且因此本发明的不同实施方式可以实施一者或两者。尽管图3B中没有明确示出,但是应当理解图3A中的并行化模块3451、多进程模块3453、多线程模块3455以及本地执行模块3457可以被包括在图3B中的生成器图形执行模块370中从而允许图3B中的生成器图形执行模块370在生成器的执行中实现并行化。
在图3B中,具有面向生成器图形的编程支持的运行时360包括自动生成器图形生成模块365、生成器图形执行模块370以及覆盖生成器输出模块390。运行时360用于执行面向对象源代码,且从而包括未显示的另外的模块。
此外,图3B显示用于面向对象源代码320中的方法的生成器依赖性声明、当前组的一个或多个具有感兴趣输出的生成器325(这里也称为当前选择的感兴趣生成器)和源生成器的输出350。源生成器的输出350包括源代码中的无关生成器组的输出352(例如,常数、默认值等)和当前替换的生成器输出354(无关生成器的输出和/或其输出当前被覆盖的相关生成器的输出)。
在本发明的一些实施方式中,可以用当前提供的值显式(explicitly)覆盖生成器的输出(即,不是执行生成器以基于其当前输入来确定其输出,用于生成器的输出值被显示提供)。除了生成器图形的任意无关生成器,生成器图形的源生成器包括任意当前被覆盖的生成器。
覆盖生成器输出模块390接收被覆盖的生成器输出354(标识哪些生成器被覆盖且用什么输出值来覆盖)。在本发明的一个实施方式中,生成器可以被分类为属性生成器或方法生成器。属性生成器是基于属性方法(例如,获得和设定)。方法生成器是基于非属性方法。覆盖生成器输出模块390包括用于被覆盖的属性生成器的覆盖属性生成器输出模块392和用于被覆盖的方法生成器的覆盖方法生成器输出模块394。覆盖属性生成器输出模块392促使被覆盖的值被存储在生成器输出缓存384和实例的数据中,而覆盖方法生成器输出模块394促使被覆盖的值被存储在生成器输出缓存384中。根据本发明的实施方式,这种促使可以是直接或间接的。图3B示出了通过使用覆盖日志396的间接促使,该覆盖日志396收集覆盖生成器输出模块390的输出且由生成器图形执行模块370来使用。为了优化,覆盖日志396允许覆盖的延迟以为批处理收集多个覆盖。
与自动生成器图形生成模块340类似,自动生成器图形生成模块365:1)接收生成器依赖性声明320和当前组感兴趣生成器325;以及2)尝试基于生成器依赖性声明发现具有直接或间接促成当前选择的感兴趣生成器的输入的输出的生成器,并建立当前的生成器图形,该当前生成器图形表示从当前选择的感兴趣生成器通过任何所发现的无源生成器到为源生成器的所发现的生成器(无关生成器和当前被覆盖的生成器)的这些生成器彼此的输入依赖性。生成器图形被存储在生成器图形结构380中。
与生成器图形执行模块345类似,生成器图形执行模块370从自动图形模块365和源生成器350的输出接收当前生成器图形,并执行当前生成器图形的生成器以确定当前所选择的感兴趣生成器的当前输出。生成器图形执行模块370缓存如生成器输出缓存384示出的生成器图形结构380中的生成器的当前输出。
如之前所述,在执行期间对生成器输出的缓存允许同步(例如,不需要编写单独的源代码以确定何时图4B中的生成器2应当被执行,但是运行时通过检查生成器输出缓存384中所需输出的可用性来为程序员做出同步决定;换句话说,该同步是自动的)。此外,在执行期间对生成器输出的缓存可以允许生成器执行的同步,这是因为运行时可以通过检查生成器输出缓存384中所需输出的可用性来决定哪个生成器准备执行。准备执行的生成器可以被并行执行。换句话说,并行化也可以是自动的。因此,不需要单独的源代码来确定或指示哪些生成器应当被并行执行。此外,该生成器输出缓存384用于增量执行。更具体地,在生成器图形被初始生成和执行后,当前生成器图形中的生成器的覆盖需要某种层次的再执行。虽然本发明的一些实施方式简单地再执行整个图形,但本发明的可替换实施方式支持增量执行(只再执行生成器图形的被覆盖所影响的这些部分)。支持增量执行的一些示例性实施方式使用生成器图形结构380中的增量执行标记382来帮助确定哪些生成器需要再执行。因此,维持生成器图形是指在多个执行中使生成器图形保持为当前的,而增量执行是指维持生成器图形并使用该生成器图形来只再执行生成器图形中被覆盖所影响的这些部分。
与图3A类似,存在从生成器图形执行模块370到自动生成器图形执行模块365的虚箭头线,用于表示对动态依赖性的可选支持。应当注意动态依赖性可以在生成器图形的再执行期间改变。
图4C是示出了根据本发明的一个实施方式的图4B的生成器图形的增量执行的框图。在图4C中,生成器5的输出被显式修改,但是生成器3和生成器4的输出没有被显式修改。基于跟踪生成器图形中输出到输入的依赖性和只有生成器5的输出被显式修改,可以确定该修改只影响生成器2和生成器1。因此,更新后的生成器1的输出的确定只需要用生成器5的新的输出和生成器4以及生成器3的之前输出来再执行生成器2和生成器1。在图4C生成器图形的部分再执行可以由从生成器5到生成器2以及从生成器2到生成器1(而不是从生成器4到生成器2或从生成器3到生成器1)的弯曲的箭头线示出。缺少从生成器4到生成器2以及从生成器3到生成器1的弯曲的箭头线不是表明生成器3和生成器4的输出不需要,而是表明如果它们之前的输出可用(例如从生成器图形的先前执行中缓存)则不需要再执行生成器3和生成器4。
图4C的相对简单的示例示出了在增量执行产生的处理资源中存在节约。该节约依赖多个因素(例如,不需要被再执行的生成器的数量、这些生成器需要的处理量等)。虽然本发明的一个实施方式示出执行增量执行,但可替换实施方式可以以不同的方式被实现(例如,可替换实施方式可以响应于修改而再执行所有的生成器)。
图4D是示出了根据本发明的一个实施方式的在相关生成器2被覆盖后图4B的生成器图形的增量执行的框图。在图4D中,生成器2的输出被显式修改,但是生成器3的输出则没有。基于生成器图形和只有生成器2的输出被显式修改,可以确定只有生成器1受该修改影响。结果,确定生成器1的更新后的输出仅需要用生成器2的被覆盖的输出和生成器3的之前输出来再执行生成器1。该生成器图形的部分再执行可以在图4D中由从生成器2到生成器1(而不是从生成器4和5到生成器2或从生成器3到生成器1)的弯曲的箭头线示出。
图4E是示出了根据本发明的一个实施方式的在相关生成器2被覆盖且无关源生成器3被修改之后图4B中的生成器图形的增量执行的框图。基于生成器图形和只有生成器2和生成器3的输出被修改,可以确定只有生成器1受该修改的影响。因此,生成器1的更新后的输出的确定仅需要用生成器2的被覆盖的输出和生成器3的修改后的输出来再执行生成器1。生成器图形的该部分再执行可以在图4E中由从生成器2和3到生成器1(不是从生成器4和5到生成器2)的弯曲的箭头线示出。
虽然支持覆盖的生成器输出的本发明的一个实施方式还支持不BEI覆盖的生成器输出,但是本发明的可替换实施方式可以不支持。虽然支持不覆盖的生成器的本发明的一个实施方式在生成器明确地不被覆盖之前覆盖掉被覆盖的生成器,但是本发明的可替换实施方式可以以不同方式实施(例如,当替换的生成器的继承中的一个被覆盖时不覆盖该被覆盖的生成器)。
在本发明的一个实施方式中,面向生成器图形的编程框架包括外部接口,用于连接没有用生成器依赖性声明编写的程序。该外部框架包括:1)调用器部分(称为运行时客户端);以及2)调用部分(称为外部数据源)。如果生成器从外部数据源直接读取数据,则该生成器在生成器被创建时只读取数据,在被指示这么做(手动更新)或被指示订阅该数据时读取数据。在手动更新和订阅的情况下,外部数据源的改变会导致生成器的设定方法被调用和生成器输出的修改(与被覆盖的生成器做同样处理)。
生成器图形建立和执行
本发明的不同实施方式可以被实施以在不同程度发现并扩建生成器图形(例如,建立生成器图形直到来自根节点的所有图形在无关生成器处结束(在这种情况下,生成器图形的端节点是无关生成器,可能任何替换的生成器是中间节点);扩建生成器图形直到来自根节点的每一个路径在被替换的生成器或无关生成器中终止,无论哪条首先到达(这种情况,生成器图形的每一个端节点是无关生成器或被覆盖的生成器))。
“执行开始生成器”是指生成器图形的给定执行从其开始的生成器图形的生成器。为了生成器图形的初始执行,不同的实施方式可以从不同的生成器开始(例如,在本发明的实施方式中,建立生成器图形直到来自根节点的所有路径在无关生成器处终止,执行可以从端节点处(该端节点为无关生成器)开始、从源生成器处(该源生成器包括无关生成器节点和任意被覆盖的生成器节点)开始、从源生成器的子集开始(该子集包括在其间具有至少一条路径和不包括被覆盖的生成器的根生成器的任意无关生成器与任意被覆盖的生成器的组合),或从源生成器的子集开始(该子集包括任意没有任何被覆盖的继承的被覆盖的生成器与在其间具有至少一条路径和不包括被覆盖的生成器的根生成器的任意无关生成器的组合);在本发明的实施方式中,如果且直到生成器没有被覆盖,则被覆盖的生成器下的生成器图形没有被建立,执行可以从端节点处开始(端节点可以是无关生成器和/或被覆盖的生成器)等)。
为了生成器图形的后续执行,不同的实施方式可以从不同的生成器开始(例如,从生成器图形的无关生成器(例如,在不支持增量执行的本发明的实施方式中);从生成器图形的源生成器(例如,在不支持增量执行的本发明的实施方式中);从源生成器的子集,该子集包括自从上一次执行开始被覆盖的和/或添加的源生成器(例如,在支持增量执行的本发明的实施方式中);是自从上一次执行开始被覆盖的和/或添加的源生成器,从不具有被覆盖的继承的任意这种被覆盖的生成器与在其间具有至少一条路径和不包括被覆盖的生成器的根生成器的任意这种被添加的生成器的组合(例如,在支持增量执行的本发明的实施方式中)等)。
关于以上执行开始生成器的概念,生成器图形的执行的处理流在不同的实施方式之间也可以不同。例如,在本发明的一个实施方式中,执行开始生成器的前身(ancestry)被确定并被放置在集合中,执行开始生成器被执行,且针对生成器(对于该生成器所有的依赖性被执行)该集合被反复扫描——最后达到根节点。作为另一个示例,在本发明的一个实施方式中,执行开始生成器被执行,执行开始生成器的父体(parents)被标识,这些父体被执行,且该父体的父体被标识并执行等。以下以举例而非限定的方式使用后面的本发明的实施方式。
示例性类型的依赖性
示例性动态生成器依赖性
动态生成器依赖性是直到运行时才能被解析的生成器依赖性。应当理解用于解析生成器依赖性的准则在源代码中,且由此生成器依赖性可以被解析的生成器是有限的。参考图3A,从生成器图形执行模块345到自动生成器图形生成模块340的虚箭头线表示支持当前生成器图形中一个或多个生成器的执行,该生成器对发现并建立整个当前生成器图形是必须的。换句话说,支持动态生成器依赖性的本发明的实施方式可以在自动生成器图形生成模块340和生成器图形执行模块345之间重复直到整个生成器图形被发现、建立、解析并执行(即,在以下之间重复:1)调用自动生成器图形生成模块以发现并建立在此时能被解析的当前生成器图形的这些部分;以及2)调用生成器图形执行模块以执行当前生成器图形的生成器)。在这个意义上,发现是指访问生成器依赖性声明并确定该生成器依赖性声明所标识的生成器;建立是指装载生成器并将它们添加到生成器图形;以及解析是指确定当前未解析的动态生成器依赖性。
图5A是示出了根据本发明的一个实施方式的包括未解析的依赖性的示例性生成器图形的发现和建立的框图。图5A示出包括生成器1的当前组的感兴趣生成器。基于生成器1及其生成器依赖性声明,生成器2和生成器3被发现。换句话说,用于生成器1的依赖性声明标识生成器1需要生成器2和生成器3的输出作为输入。图5A还示出生成器3是无关生成器(因此,是源生成器)而生成器2不是。由此,基于生成器2的依赖性声明,生成器4和生成器5被发现。此外,图5A示出生成器4是无关生成器(因此,是源生成器)而生成器5不是。由此,基于生成器5的依赖性声明,生成器6和当前未解析的依赖性被发现。图5A还示出当前未解析的依赖性可以用于生成器7A和/或生成器7B。
图5B是示出了根据本发明的一个实施方式的图5A中的生成器图形的初始执行和对未解析依赖性的解析的框图。图5B用弯曲的箭头线示出图5A的生成器图形,该弯曲的箭头线显示了生成器的执行和提供生成器的输出给相关父生成器。此外,图5B示出生成器5的未解析的依赖性被解析为生成器7A的依赖性,且生成器7A是无关生成器。注意到生成器7A可以通过自身来执行,或与生成器6并行执行,或与生成器4并行执行,或与生成器3并行执行,或与生成器3、4以及6的任意组合并行执行。这样的并行执行是被允许的,这是因为生成器7A不依赖于生成器3、4以及6。
图5C是示出了根据本发明的一个实施方式的图5A中生成器图形的初始执行和/或图5B中生成器图形的再执行。图5C示出图5A中的生成器图形,弯曲的箭头线示出生成器的执行和提供该生成器的输出给相关父生成器。此外,图5C示出生成器5的未解析依赖性被解析为生成器7B的依赖性,且生成器7B是相关生成器。由此,基于生成器7B的依赖性声明,生成器8被发现。生成器8是无关生成器(因此,是源生成器)。假定图5C表示图5A中生成器图形的初始执行,图5C中所有的弯曲的箭头线可以被使用。但是,假定图5C表示图5B中生成器图形的再执行,则该再执行导致动态依赖性以不同方式被解析(从生成器5依赖于生成器7A转换到生成器7B)。此外,如果再执行在没有增量执行的情况下被执行,则图5C中所有的弯曲的箭头线可以被使用;但是,如果使用了增量执行,则只有不是虚线的弯曲的箭头线可以被使用(生成器8到生成器7B、生成器7B到生成器5、生成器5到生成器2、以及生成器2到生成器1)。还应当理解,图5C中所示的依赖性中的动态改变是示例性的,且由此任意数量的不同情况可以出现(例如,动态改变可以永远不发生;生成器5首先依赖于生成器7B然后改变到生成器7A;生成器5可以首先依赖于生成器7B且曾经没有动态改变发生;生成器5可以被发现依赖于生成器7A和生成器7B两者,如图5D中所示,等等)。
因此,生成器图形的自动再执行不能限定为生成器被修改以及其直接的子体或父体被再执行;而是改变通过生成器图形由运行时自动使其波动(ripple),影响任意合适的生成器和依赖性,因为生成器图形被保持(在支持的情况下使用增量执行)。这样,改变导致任何必须的另外的发现、建立、解析以及执行。因此,在用户/程序员不需要确定生成器图形的哪一个生成器受影响且可能手动校正图形的情况下,生成器图形的再执行被自动执行。
静态生成器依赖性
静态依赖性是在运行时之前就已经知道的依赖性。因此,在支持偶然和订阅动态依赖性的实施方式中,非偶然、非订阅依赖性是静态依赖性。图4A中的示例性生成器图形示出了静态依赖性的生成器图形。
生成器图形形状
由于面向对象编程语言中的生成器至少是类、该类的实例以及该实例的方法,因此生成器图形是以类、实例和方法为中心的。这样,生成器图形是表示实例和这些实例的方法的图形。
应当理解,生成器图形可以采取各种不同形状(例如,生成器的单链、树等)。图5B的示例性生成器图形是具有生成器1的根节点的树,从根节点开始具有两个分支-一个分支到达生成器2和生成器3的每一个。其中生成器3是叶节点,生成器2具有从其延伸的两个分支-一个到达生成器4和生成器5的每一个。生成器5具有从其延伸的两个分支-一个到达生成器6和生成器7A的每一个。图5B中的示例性生成器图形为多级,等级1包括根节点生成器1,等级2包括生成器2和生成器3,等级3包括生成器4和生成器5,等级4包括生成器6生成器7A(在图5C中,等级4包括生成器7B,等级5包括生成器8)。在一些实施方式中,通过在每一个等级上并行执行生成器来实现并行化。生成器的执行可以从最低等级的生成器开始,例如图5C中的等级5,然后逐级向上移动。在开始在一个等级上执行生成器之前,运行时可以等待直到前一较低等级上的所有生成器准备完成,即,前一较低等级上的生成器的输出已经被返回。在图5B中,当考虑具有生成器2的从生成器1开始的分支时,该分支上的一个生成器是生成器2且该分支的最后一个生成器是生成器4、生成器6以及生成器7A。
虽然图5B示出了生成器图形,其中当前组的感兴趣生成器包括单个生成器,但支持多于一个的当前感兴趣生成器的本发明的实施方式可以为每一个生成器发现并建立生成器图形。应当理解如果同时存在多个感兴趣生成器,则产生的生成器图形可以是无关的或可以交叉。如果生成器图形交叉,则本发明的实施方式可以被实施以:1)复制生成器以保持独自的生成器图形;或2)避免这种复制并保持交叉的生成器图形。还应当理解这种交叉的生成器图形可以包括是另一个生成器图形的子集的生成器图形。例如,如果生成器5和生成器1被包括在当前组的感兴趣生成器中,则存在具有生成器5的根节点的第一生成器图形和具有生成器1的根节点的第二生成器图形,其中该第二生成器图形包括第一生成器图形。例如,如果生成器7B和生成器1以及生成器5被包括在当前组的感兴趣生成器中,则存在与第一和第二生成器图形分开的具有图5B中的生成器7B的根节点的第三生成器图形。进一步地,如果生成器5的偶然依赖性从生成器7A变到生成器7B(图5C),则该改变使第二生成器图形和第三生成器图形保留(但是第一生成器图形不保留),第三生成器图形是第二生成器图形的子集。
示例性执行流
图6是根据本发明的一个实施方式的运行时客户端的逻辑执行流以及其与具有面向生成器图形编程支持的运行时的关系的流程图。在图6中,虚分界线600将运行时客户端610的逻辑执行流与具有面向生成器图形编程支持的运行时640分开。
运行时客户端610的逻辑执行流包括块615,620,625以及630,而具有面向生成器图形编程支持的运行时640包括块645,650,660以及可选的655。实箭头线表示从块630到块660的直接因果关系。相比之下,点状箭头线表示分别从运行时客户端610的逻辑执行流中的块615和625到具有面向生成器图形支持的运行时640中的块645和650的因果关系;根据本发明的实施方式,该因果关系可以是直接的或间接的。例如,图6通过使用在虚线600具有面向生成器图形支持的运行时640侧的虚线椭圆中的命令日志665示出可选间接原因。命令日志665收集由运行时客户端610的逻辑执行流的块615和625产生的命令;且命令日志665响应于块630而被处理块660使用。因此,为了优化,命令日志665允许延迟命令以将多个命令收集在一起并对其进行批处理。因此,命令日志665与图3B的覆盖日志396类似,且在本发明的一些实施方式中实际上可以包括覆盖日志396。
在块615中,一组一个或多个感兴趣生成器可以被确定为当前组的感兴趣生成器并且控制传到块620。响应于块615和645之间的因果关系,块645显示当前组的感兴趣生成器被实例化并尝试为每一个生成器发现、建立以及解析(如果动态依赖性被支持且在生成器图形中发现一个或多个)生成器图形,包括基于运行时客户端610中的生成器依赖性声明,在需要时实例化任意的实例以及实例的生成器。参考图3A和3B,自动生成器图形生成模块340和365分别被调用。
在块620中,确定是否存在任意生成器输出覆盖。如果存在,则控制传到块625;否则,控制传到块630。
在块625中,为一组一个或多个生成器接收一个或多个生成器输出覆盖并且控制传到块630。响应于块625和块650之间的因果关系,块650显示当前组的被替换的生成器被实例化(如果在块645中没有被实例化),其输出被修改并被跟踪。因为被覆盖的生成器已经被发现是块645中的生成器图形的一部分,因此该被覆盖的生成器可以已经被实例化。但是,由于未解析的动态依赖性,被覆盖的生成器可以在块645中没有被发现。这样,该被覆盖的生成器被实例化并被覆盖,除了当动态依赖性被解析时该被覆盖的生成器可以被添加到生成器图形。此外,如前所示,图3B的覆盖日志396如果被实施,则会存在于块625与块650之间并成为命令日志665的一部分。再者,所述一组被覆盖的生成器在支持增量执行的本发明的一些实施方式中被跟踪。而在支持覆盖日志396/命令日志665的本发明的实施方式中,跟踪是日志的一部分,在本发明的可替换实施方式中,使用不同的机制在块650中单独执行跟踪。
在块630中,生成器图形执行模块被调用并可选地控制返回到块615和/或块625。响应于块630与块660之间的因果关系,块660显示了当前生成器图形被巡视(walk)以及基于跟踪执行需要执行的任意生成器。之前已经论述了用于执行生成器图形的生成器并在这里适用的各种技术。参考图3A和3B,生成器图形执行模块345和370分别被调用。此外,在本发明的实施方式中,命令日志665被实施,因果关系包括使用命令日志665并在块660之前执行处理块645和650。此外,在支持未解析依赖性的可能性的本发明的实施方式中,当需要时控制从块660流到块655。
在块655中,尝试解析未解析的依赖性并发现和建立生成器图形中的余项,包括实例化任意实例及其生成器。从块655控制流回到块660。
生成器依赖性声明的示例性形式
图7A-图7F示出了根据本发明的实施方式的生成器依赖性声明的一些示例性形式。虽然图7A-图7F示出了支持参量、字段以及排序依赖性的实施方式,但是应当理解不同的实施方式可以支持三种依赖性形式中的仅一种或两种。在本图7A-图7F中示出的本发明的实施方式中,生成器依赖性声明由生成器依赖性声明陈述和可选的显式生成器依赖性声明代码组成。非快捷生成器依赖性是在其中使用显式生成器依赖性声明代码的生成器依赖性,而快捷生成器依赖性是在其中没有使用显式生成器依赖性声明代码的生成器依赖性(而是,运行时没有使用生成器依赖性声明代码和/或基于生成器依赖性声明陈述中的信息即时地(on the fly)执行该代码)。
本发明的不同实施方式可以使用不同的语法来声明生成器依赖性。例如,本发明的不同实施方式可以包括在生成器依赖性声明陈述中使用的不同语法,该语法强约束、弱约束和/或不约束可以被创建的生成器依赖性的类型。强约束的生成器依赖性是为其在生成器依赖性声明陈述中使用基本限定可以被创建的生成器依赖性的类型的语法的生成器依赖性;弱约束生成器依赖性是为其在生成器依赖性声明陈述中使用不完全限定可以被创建的生成器依赖性的类型的语法的生成器依赖性;而未约束的生成器依赖性是为其在生成器依赖性声明陈述中使用不限定可以被创建的生成器依赖性的类型的语法的生成器依赖性。
通过举例而非限定的方式,下面描述的本发明的实施方式包括以下:1)用于参量的强约束生成器依赖性的语法(参量依赖性(ArgumentDependency)=强约束向下声明的参量[静态或动态,且如果是动态、偶然和/或吸收订阅]依赖性);2)用于字段的强约束生成器依赖性的语法(字段依赖性(FieldDepencency)=强约束向下声明的字段[静态或动态,且如果是动态、偶然和/或吸收订阅]依赖性);3)用于排序依赖性的强约束生成器依赖性的语法(排序依赖性(SequencingDependency)=强约束向下声明的排序[静态或动态,且如果是动态、偶然和/或粘附订阅]依赖性);4)用于参量、字段或排序依赖性的弱约束向上声明的生成器依赖性的语法(向上依赖性(UpwardDependency)=弱约束的向上声明的字段、参量或排序[静态或动态,且如果是动态、偶然]依赖性);以及5)弱约束生成器依赖性的语法(弱约束依赖性=a)仅向下声明的排序(静态或动态,且如果是动态、偶然和/或粘附订阅)依赖性;或b)向上声明[参量、字段或排序][静态或动态,且如果是动态、偶然]依赖性)。应当理解虽然本发明的一些实施方式支持生成器依赖性声明陈述的语法,所述语法区分向下声明参量依赖性、向下声明字段依赖性、向上声明依赖性(可以返回向上声明参量、字段或排序依赖性),和弱约束依赖性(可以返回向下声明排序依赖性、向上声明参量、字段或排序依赖性),本发明的可替换实施方式可以采用不同的语法(例如,具有语法,该语法使所有依赖性是具有可以返回任意支持的依赖性(向下和向上声明的参量、字段以及排序依赖性)的确定生成器的未限制的依赖性;具有区分所有支持的依赖性的语法;具有区分向下和向上声明的参量和字段依赖性和区分仅返回向上和向下声明的排序依赖性的语法;区分向下声明的参量和字段依赖性并区分仅返回向上声明的排序依赖性的向上声明的依赖性的语法;区分向下声明的参量、字段和排序依赖性(不支持粘附订阅和向上声明的依赖性)的语法等等)。
应当理解生成器依赖性声明陈述的语法不必等于在生成器图形中创建的生成器依赖性(例如,链接)(例如,ArgumentDependency创建参量依赖性;而UpwardDependency可以创建参量、字段或排序依赖性)。这样,如果理解适当,限定词(例如,参量、字段或排序)和词“依赖性”之间的空间可以用于指由运行时创建的依赖性,而缺少该空间可以用于指语法。
图7A示出了根据本发明的一个实施方式的使用快捷依赖性的方法的生成器依赖性声明的伪代码;而图7B是根据本发明的一个实施方式的示例性生成器的框图。图7A显示1)生成器依赖性声明陈述705,包括参量依赖性1-N、字段依赖性1-M、排序依赖性1-L、向上依赖性1-P以及弱约束依赖性1-Q;和2)方法α(alpha)710,具有来自生成器依赖性声明陈述705的参量1-N。在本发明的一个实施方式中,生成器依赖性声明陈述的参量被计数以为每一个参量提供参量ID,以用于跟踪。图7B显示生成器720,具有以下的子依赖性:1)参量ID 1的生成器725;2)参量ID N的生成器730;3)字段依赖性1-M的生成器740-745;4)排序依赖性1-L的生成器746-747;以及5)向上依赖性1-P的生成器748-749(注意,弱约束依赖性1...Q未显示,但将参考图7G更详细地描述)。因此生成器依赖性声明陈述705的参量对应于方法α710的参量,且生成器依赖性声明陈述705中的参量的参量ID关于其标识的子生成器而被跟踪。
图7C示出了根据本发明的一个实施方式使用非快捷依赖性的方法的生成器依赖性声明的伪代码,并示出了示例性生成器的框图。图7C显示了图7A的生成器依赖性声明陈述705和方法α710以及图7B的生成器720和725。此外,图7C包括与参量依赖性1相关联的生成器依赖性声明代码715。在运行时期间,运行时响应于生成器依赖性声明陈述705的参量依赖性1来访问并执行生成器依赖性声明代码715。生成器依赖性声明代码715的执行返回生成器725作为参量依赖性1的生成器依赖性。因此,图7C示出了本发明的实施方式,其中生成器依赖性声明代码715可以是方法的一部分(不是方法α710)而不是生成器的一部分。
图7D示出了根据本发明的一个实施方式的使用非快捷依赖性的方法的生成器依赖性声明的伪代码;而图7E是根据本发明的一个实施方式的示例性生成器的框图。图7D显示了图7A的生成器依赖性声明陈述705和方法α710,而图7E显示了图7B的生成器720和725。此外,图7D包括:1)生成器依赖性声明代码750;以及2)方法β(beta)755包括生成器依赖性声明代码760。图7D还显示了生成器依赖性声明陈述705的参量依赖性1基于将返回参量依赖性1的依赖性的方法β755来标识生成器(图7E中显示为生成器765)。在运行时期间,运行时响应于生成器依赖性声明陈述705的参量依赖性1,执行生成器765以返回参量依赖性1的生成器依赖性是生成器725的标识。这样,生成器765被称为依赖性确定生成器(其输出是生成器依赖性-因此由具有面向生成器图形编程支持的运行时使用为特殊处理(生成器图形的处理)而被监控的类/实例来返回该输出),而生成器725称为标准生成器(其输出,如果有的话,不由处理生成器图形的运行时直接处理;但是其输出,如果有的话,可以由父生成器(可以是依赖性确定生成器或其他标准生成器)使用和/或被提供作为生成器图形的输出(如果标准生成器是感兴趣生成器,由此是根节点))。
因此,图7D-图7E示出了本发明的实施方式,其中生成器依赖性声明代码715是被称为依赖性确定生成器的另一个生成器的一部分。虽然在图7D-图7E中面向对象源代码包括方法中显式的生成器依赖性声明代码,根据所述方法依赖性确定生成器在运行时被非快捷依赖性的运行时实例化,本发明的可替换实施方式另外或替代地执行运行时以包括通用生成器依赖性声明代码,该代码为快捷依赖性即时地(on the fly)调用作为一个或多个通用依赖性确定生成器。另外,虽然图7C-图7E参考参量依赖性被示出,但是示出的技术适用于其他类型的向下声明的依赖性。此外,图7F-图7G示出了为向上依赖性和弱约束依赖性使用依赖性确定生成器。
图7F是根据本发明的一个实施方式的通过使用具有依赖性确定生成器的向上依赖性的示例性依赖性的框图。图7F显示了具有排序生成器依赖性的生成器720到依赖性确定生成器772。依赖性确定生成器可以在生成器720上返回父生成器748的非订阅向上声明的参量、字段或排序依赖性。此外,该依赖性确定生成器可以执行动态依赖性(即,根据数据值在以上之间选择的偶然依赖性,包括在不同的参量ID之间,如后面所述)。虽然本发明的一些实施方式支持所有的这些可能性,但是本发明的可替换实施方式可以仅支持子集(例如,仅非订阅向上声明的排序依赖性)。
图7G是根据本发明的一个实施方式的通过使用具有依赖性确定生成器的弱约束依赖性的可能的示例性依赖性的框图。图7G显示了具有排序生成器依赖性的生成器720到依赖性确定生成器775。在本发明的一些实施方式中,依赖性确定生成器可以返回任意以下各项:1)在子生成器780上的非订阅向下声明的排序依赖性;2)在生成器720上的父生成器785的非订阅向上声明的参量、字段或排序依赖性;以及3)粘附订阅(在后面描述)。此外,该依赖性确定生成器可以执行动态依赖性(例如,根据数据值在以上之间选择的偶然依赖性,包括在不同的参量ID之间,如后面所述)。虽然本发明的一些实施方式支持所有的这种可能性,但是本发明的可替换实施方式仅支持子集(例如,仅非订阅向上声明的排序依赖性)。
如之前所示,排序依赖性可以用于不同的目的,包括确保修改数据的生成器与使用数据的生成器之间的执行顺序,该修改数据的生成器以运行时不知道的方式修改数据(子生成器可以以需要父生成器的方法来包括访问该输出的代码的方式来编写子生成器的输出(例如,通过影响不是常规生成器输出这样不被运行时检测的输出来影响环境的方法-例如设定全局变量的方法、设定不是生成器输出的实例中的字段的方法、影响外部数据源的方法,等))。影响运行时不知道的源(例如总变量或外部数据源)以及从这些源中读取是在需要并行化能力的生成器中应当避免的特性。
不同的实施方式可以支持一种或多种关于属性生成器来声明生成器依赖性的方式。具体地,在本发明的一些实施方式中,读取字段的生成器依赖于获取属性生成器,而获取属性生成器应当依赖于设定获取属性方法所负责的字段的任何生成器。处理这种情况的一种技术可以在支持排序生成器依赖性的本发明的实施方式中使用,用于为获取属性方法提供依赖性声明陈述,该陈述在设定获取属性方法负责的字段的每一个方法上创建排序生成器依赖性(例如,关于图7G,生成器780是设定字段的生成器而生成器720是负责该字段的获取属性生成器,依赖性确定生成器775被写入以在生成器780上返回生成器720的向下声明的排序依赖性)。处理该情况的第二种技术可以在支持排序生成器依赖性和向上声明的生成器依赖性的本发明的实施方式中使用,该技术在用于设定字段的任何方法的生成器依赖性声明陈述/代码中包括在负责该字段的获取方法上的向上声明排序生成器依赖性(例如,使用向上依赖性或限制依赖性)(例如,关于图7G,生成器720是设定字段的生成器而生成器785是负责该字段的获取属性生成器,依赖性确定生成器775被写入以在生成器720上返回父生成器785的向上声明的排序依赖性)。该第二种技术允许设定字段方法的程序员负责提供生成器依赖性给合适的获取方法,而不需要程序员进入获取方法并修改其生成器依赖性声明陈述/代码。
在使用排序依赖性的情况下,当给定的生成器依赖给定的变量时,该变量应当在生成器图形的给定执行中被多于一个生成器的继承生成器修改(应当注意通过偶然依赖性(在后面描述),不同的继承生成器可以在当前生成器图形的不同执行期间修改变量)。例如,在当前生成器图形的给定执行中,获取属性生成器可以仅依据设定该获取属性生成器负责的字段的另一个生成器。
应当理解,本发明的不同实施方式可以实施图7A-图7F中所示的一个或多个本发明的实施方式。例如,本发明的一个实施方式支持快捷和非快捷的依赖性,这两种都使用依赖性确定生成器;具体地,在本发明的该实施方式中:1)面向对象源代码包括方法中的显式生成器依赖性声明代码,根据该方法运行时为非快捷依赖性在运行时实例化依赖性确定生成器;2)运行时包括通用生成器依赖性声明代码,该代码为快捷声明即时地调用偶然依赖性(在后面描述)作为一个或多个通用依赖性确定生成器;以及3)运行时包括直接链接到快捷声明、非偶然的生成器依赖性的支持(在后面描述)。
作为另一个示例,本发明的一个实施方式支持使用依赖性确定生成器的非快捷和快捷的生成器依赖性;具体地,在该本发明的实施方式中:1)面向对象源代码包括方法中的显式生成器依赖性声明代码,根据该方法运行时为非快捷依赖性在运行时实例化依赖性确定生成器;2)运行时包括通用生成器依赖性声明代码,该代码为快捷依赖性(不管类型)调用作为一个或多个通用依赖性确定生成器。该后一个实施方式允许一致处理生成器依赖性,因此可以简化运行时。
此外,虽然在本发明的一个实施方式中用于方法的生成器依赖性声明陈述只位于面向对象源代码中的方法的上面,但是在在本发明可替换实施方式中,该陈述可以位于任何位置(例如,用于类的所有方法的生成器依赖性声明陈述在该类中组合到一起,用于所有类中的所有方法的生成器依赖性声明陈述组合一起作为单独的数据表,等等)。另外,虽然在本发明的一个实施方式中,生成器依赖性声明代码与生成器依赖性声明陈述分开,但是在本发明的可替换实施方式中,它们可以结合起来(例如,生成器依赖性声明代码在生成器依赖性声明陈述的插入语中,生成器依赖性声明代码直接置于生成器依赖性声明陈述下面并由运行时当做单个单元来处理,等)。
图7H-图7I示出了由于依赖性确定生成器导致的存在于生成器图形中的不同子图形之间的区别。图7H示出了根据本发明的一个实施方式的标准生成器的示例性生成器图形。具体地,图7H显示了具有根节点S1的生成器图形、具有根节点S5的生成器图形、以及具有根节点S11的生成器图形。标准生成器S1具有作为子体的标准生成器S2、S3以及S4;标准生成器S2和S3具有作为子体的标准生成器S7和S8;标准生成器S5具有作为子体的标准生成器S4和S6;以及标准生成器S11具有作为子体的标准生成器S6和S10。图7H的示例性生成器图形可以通过使用任意数量的生成器依赖性和依赖性确定生成器而被发现、建立以及解析。图7I示出了用于发现、解析以及建立图7H中的生成器图形的生成器依赖性和依赖性确定生成器的一个示例。具体地,图7I显示图7H中的图形是一大组的成器图形的子图形。换句话说,图7I的生成器图形包括图7H中的图形(称为“目标子图形”并使用实箭头线和实椭圆示出)和辅助发现、解析以及建立目标子图形的图形(称为“决定子图形”并用虚箭头线和虚椭圆示出)。图7H中的决定子图形包括依赖性确定生成器(DDP)1-11和标准生成器S9-10。在图7H中,S1被显示为益来与DDP 1-3,DDP 1-3分别在S2、S3和S4上返回S1的向下声明的生成器依赖性;S4被显示为依赖于DDP 4依赖性,该DDP 4在S4上返回S5的向上声明的生成器依赖性;S5被显示为依赖于DDP 5,DDP 5在S6上返回S5的向下声明的生成器依赖性;S3被显示为依赖于DDP 6,而DDP 6依赖于DDP 8,DDP 8在S9和S10上返回DDP 6的向下声明的生成器依赖性,这使DDP 6在S7上返回S3的向下声明的依赖性;S3被显示为依赖于DDP 7,DDP7在S8上返回S3的向下声明的生成器依赖性;S8被显示为依赖于DDP 9,DDP 9返回粘附订阅,对于该粘附订阅S6是触发生成器而S11是被创建的父体(由此,在S6上的S11的生成器依赖性);S2被显示为依赖于DDP 10,DDP 10在S7和S8上返回S2的向下声明的生成器依赖性的集合;以及S11被显示为依赖于DDP 11,DDP 11在S10上返回S11的向下声明的生成器依赖性。应当理解标准生成器可以既是目标子图形的部分也是决定子图形的部分(例如,见S10)。值得注意的是在图形上数据从一个标准生成器流到另一个标准生成器的情况下,目标子图形是被驱动的数据。
示例性编程和执行框架
图8A是示出了根据本发明的一个实施方式的第一示例性框架的框图,在该框架中应用被提供给终端用户。图8A所示的框架包括三个基本分区,第一个分区包括具有面向生成器图形编程支持810的运行时的创建。该第一个分区由具有高级编程技能的程序员执行。当在该分区中工作时,程序员称为运行时程序员。当创建具有面向生成器图形编程支持时,运行时程序员包括生成器图形支持和执行各种类型的在转换代码、实例化代码以及数据准备代码中使用的命令的支持。
第二个分区包括运行时执行的面向对象应用源代码820的创建。面向对象应用源代码820包括两个基本分区:1)类定义,包括具有生成器依赖性声明822的在方法中表达的业务逻辑(这可以可选地包括其他功能,例如图形用户界面-在该情况下,使用生成器和生成器依赖性声明来编写图形用户界面);以及2)类定义,包括在方法824中表达的客户端代码,包括实例化代码824A(类、实例以及感兴趣生成器,以促使生成器图形的生成)、数据准备代码824B(例如,设定命令,例如触发生成器输出的覆盖的设定命令)、导致生成器图形的执行的总的执行命令824C(例如执行并获取命令)以及任何所需的图形用户界面824D(未包括在822中)。生成器依赖性声明用于在定义包括业务逻辑的类期间(而不是在创建这些类的实例之后)定义生成器之间的联系。面向对象源代码820是被编译和执行的硬编码的类、实例以及方法。
虽然在本发明的一个实施方式中执行全局执行命令,所述命令的执行促使尝试执行当前在生成器图形结构380中的所有生成器图形,但是本发明可替换实施方式可替换地或还能执行图形特定执行命令,该图形特定执行命令需要当前被执行的生成器图形的给定图形的标识。此外,全局执行命令根据运行时的执行可以是显式的(例如,设定、设定、设定、执行、获取、获取)或隐式的。例如,隐式全局执行命令可以:1)被感兴趣生成器上的第一获取命令触发(例如,设定、设定、设定、获取(隐式执行)、获取);2)被每一个数据处理触发(设定(隐式执行)、设定(隐式执行)、设定(隐式执行)、获取、获取);等等。
第二分区也由具有高级编程技能且了解应用的商业目的的程序员执行。当在该分区中工作时,程序员称为应用程序员。作为该分区的一部分,如果应用需要图形用户界面,则应用程序员还为该特定应用设计并编码该图形用户界面;且由此也称为应用设计者。
第三个分区包括使用由运行时运行的应用程序。该第三个分区由不需要具有任何编程技能的终端用户执行。应用程序可以以各种方式被分配(例如,作为源代码、源代码的转换,例如字节代码;二进制等)。此外,应用程序可以被分配用于独立使用(stand alone use)830(在该情况下,全部应用程序(以及运行程序(和运行时(如果还没有))被提供给计算机系统)和/或客户端/服务器使用。在本发明的一个实施方式中,客户端/服务器分配包括:为服务器使用832分配类定义,该类定义包括在具有生成器依赖性声明822的方法(和运行时(如果还没有))中表达的业务逻辑;以及分配类定义,该类定义包括在方法824(和运行时(如果还没有))中表达的客户端代码,其中计算机系统上的客户端使用834促使与服务器系统上的服务器使用832的通信。
图8A还示出了为独立使用830和客户端使用834而提供的可选可配置交互生成器输出布局图形用户界面模块840。面向对象源代码820可以由运行时来运行以生成生成器图形,且可配置交互生成器输出布局图形用户界面模块840允许以图形方式显示来自生成器图形的输出并与生成器图形交互。具体地,可配置交互生成器输出布局图形用户界面模块840包括:1)配置和映射图形用户界面模块844,用于允许选择的生成器输出的布局和映射的配置(例如,使用的屏幕的区域,怎样显示数据等);以及2)显现和交互图形用户界面模块846,用于显现配置的布局并允许生成器输出的覆盖(导致通过全局执行命令更新生成器图形)。应当理解可配置交互生成器输出布局图形用户界面模块840可以或不可以由编写运行时810的同一个实体来创建。
图8B是示出可根据本发明的一个实施方式的第二示例性框架的框图,在该框架中应用被提供给终端用户。图8B与图8A一样,除了以下不同:1)独立使用830不存在;2)面向对象源代码820被提供给服务器使用832,而客户端代码824没有提供给客户端使用834;3)可配置交互生成器输出布局图形用户界面模块840被提供给服务器使用832而没有提供给客户端使用834;以及4)通用可配置交互生成器输出布局客户端界面885被提供给客户端使用834。可配置交互生成器输出布局客户端界面885用于与可配置交互生成器输出布局图形用户界面模块840接口。
不管是否使用框架,在本发明的一个实施方式中,面向生成器图形编程框架提供与未写入生成器依赖性声明的程序进行接口的能力。该与未写入生成器依赖性声明的程序进行接口的能力包括:1)调用器部分(例如,没有根据面向生成器图形编程而编写的图形用户界面);以及2)调用的部分(例如没有根据面向生成器图形编程而编写的外部数据源)。调用器部分可以通过客户端代码发布面向生成器图形编程命令。调用的部分可以被执行作为封包(wrap)被调用的部分的生成器的一部分(称为“封包生成器(wrappingproducer)”)。执行调用的部分(例如从数据源读取数据或订阅外部数据源中的数据改变)可以一次触发实例的修改。这种改变可以通过调用封包生成器的代码中的属性设定方法来发生。获取属性生成器(获得者)被促使在这些封包生成器上具有依赖性,以确保在外部数据源中发生的由改变触发的实例修改通过生成器图形被合适地传播。如之前所述,不同的实施方式可以支持一个或多个声明关于属性生成器的生成器依赖性的方式。例如,在支持排序生成器依赖性的本发明的一些实施方式中,排序依赖性可以用于声明封包生成器上非订阅向下声明的排序生成器依赖性。作为另一个示例,在支持排序生成器依赖性和非订阅向上声明的生成器依赖性的本发明的一些实施方式中,向上依赖性和/或弱约束依赖性可以位于封包生成器的生成器依赖性声明中,从而为属性生成器创建非订阅向上声明的排序生成器依赖性。
图8C-图8F示出了根据本发明的一个实施方式的可配置交互生成器输出布局图形用户界面模块840的示例性截屏和使用。虽然将参考可配置交互生成器输出布局图形用户界面模块840来描述本发明的实施方式,所述可配置交互生成器输出布局图形用户界面模块840提供配置、映射以及以电子表格的形式与选择的当前生成器图形的输出的交互,但是本发明的可替换实施方式可以被执行以另外或可替换地提供另一种形式的支持。此外,虽然根据一些实施方式描述了执行配置、映射以及电子表格形式的交互的示例方式,但是本发明的其他实施方式可以以其他方式执行这些操作,具有不同的界面和/或不同的屏幕布局。此外,电子表格可以支持任意已知的与电子表格相关联的功能(例如,色彩选择、字体选择、条形/饼形/线形图、数据透视表、保存布局、装载布局,等)。
图8C-图8D示出了根据本发明的一个实施方式的自由单元选择的示例性截屏和使用,而图8E-图8F示出了根据本发明的一个实施方式的表格创建的示例性截屏和使用。图8C-图8F中的每一个包括屏幕上方的菜单条850、当前生成器图形中的生成器的类列表852和其在屏幕左下侧的输出、以及用电子表格似的布局填充屏幕的剩余部分的配置和映射视窗854。另外,图8C-图8F还显示具有列表852中类的获取属性方法的类的示例性列表,如下:1)类PERSON(人);2)类PERSON的获取属性方法,包括FIRSTNAME(名)(例如,字符串)、LASTNAME(姓)(例如,字符串)、GENDER(性别)(例如,字符串)、HOMEADDRESS(家庭住址)(类地址的实例)、PROFESSIONALADDRESS(工作地址)(类地址的实例)、DATEOFBIRTH(出生日期)(例如,日期)以及AGE(年龄)(例如,整数);3)类地址;4)类ADDRESS的获取属性方法,包括CITY(城市)(例如,字符串)、STATE(州)(例如,字符串)、ZIPCODE(邮编)(例如,字符串)。这样,当前生成器图形包括类PERSON和类ADDRESS的生成器以及其输出是类PERSON和ADDRESS的生成器。还值得注意,获取属性方法AGE基于获取属性方法DATEOFBIRTH的输出而计算年龄;这样,根据获取属性方法AGE实例化的生成器与根据获取属性方法DATEOFBIRTH实例化的生成器相关。
图8C-图8D示出了输入到视窗的第一列的连续单元的自由文本,如下:顾客、名、姓、出生日期以及年龄;而图8E-图8F显示如下:1)输入到视窗的第一行的自由文本——顾客列表;以及2)输入到视窗的第二行的连续单元的自由文本:名、姓、出生日期以及年龄。
图8C示出了根据本发明的一个实施方式具有可配置交互生成器输出布局图形用户界面模块840的自由单元选择的示例性截屏和使用。图8C显示了类PERSON和选择的类PERSON的获取属性方法到视窗不同单元的一组映射。具体地,类PERSON映射到自由文本“顾客”右边的单元。作为该动作的一部分,本发明的一些实施方式提示用户从多个支持的过滤器中的一个中做出选择(显示为过滤器选择858)(例如,下拉列表,形成滚动箭头等)。这些过滤器能够选择的被选择的类的生成器的一个或多个实例关键字,或选择其输出类是被选择的类的生成器的一个或多个实例关键字。虽然本发明的一些实施方式支持多个过滤器,但是本发明的其他实施方式默认为一个(且允许用户选择是否选择其他不同的)或仅支持一个且不需要执行过滤器选择858。映射856还显示类PERSON的获取属性方法FIRSTNAME、LASTNAME、DATEOFBIRTH以及AGE分别被映射到与具有对应自由文本的单元邻近的单元。这种映射可以用任意数量的公知技术来执行,包括在GUI领域拖放、键入等。
图8D示出了根据本发明的一个实施方式的具有可配置交互生成器输出布局图形用户界面模块840的自由单元选择的另一个示例性截屏和使用。图8D显示了类PERSON所映射到的单元允许实例选择854。具体地,基于用于该单元的过滤器,给用户机会从包括类PERSON的生成器的实例关键字和产生类PERSON的生成器的实例关键字的列表中选择类PERSON的实例。类PERSON的实例的选择(或单个实例的存在)致使用该实例的对应的获取属性方法的输出自动填充类PERSON的获取属性方法被映射到的单元。基于类PERSON的实例的表格填充被标记为858。在图8D中的示例中,类PERSON的获取属性方法FIRSTNAME、LASTNAME、DATEOFBIRTH以及AGE被映射到的单元分别被填充JOHN、SMITH、7/20/1990以及16。
图8D还显示了获取属性方法已经被映射到的视窗的单元可以被覆盖。通过举例的方式,图8D显示如果获取属性方法DATEOFBIRTH被映射到的单元被覆盖,则该单元使其输出当前正填充该单元的生成器的输出的覆盖、全局执行命令的调用(这导致其输出当前正填充该单元的生成器的再执行,获取属性方法AGE被映射到该单元)以及任意显示的所需更新。
图8E示出了根据本发明的一个实施方式的具有可配置交互生成器输出布局图形用户界面模块840的表格创建的示例性截屏和使用。图8E显示了区域和方向选择864被执行以标识具有自由文本——名、姓、出生日期以及年龄——的单元正下方的三行垂直的表格(用围绕这些单元的粗虚线示出)。本发明的不同实施方式可以以各种方式支持用户执行该操作,(包括:1)用如鼠标的输入装置来选择区域;以及2)用如弹出式菜单的界面在竖直表格、水平表格或数据透视表之间选择——假定支持多个方向)。图8E还显示被选择的类PERSON的获取属性方法到视窗的不同单元的一组映射866。具体地,映射866显示类PERSON的获取属性方法FIRSTNAME、LASTNAME、DATEOFBIRTH以及AGE分别被映射到具有对应自由文本的单元的正下方的单元。
图8F示出列入根据本发明的一个实施方式的具有可配置交互生成器输出布局图形用户界面模块840的表格创建的另一个示例性截屏和使用。映射866导致类的实例的相应的获取属性方法的输出自动填充表格的列,类PERSON的获取属性方法被映射到该列。基于类PERSON的实例的表格填充被标记为868。在图8D的示例中,类PERSON的获取属性方法FIRSTNAME、LASTNAME、DATEOFBIRTH以及AGE被映射到的列用以下行的数据来填入:1)史蒂夫,柯林斯,7/20/1990以及16;2)珍妮弗,亚当斯,7/20/1990和16;以及3)约翰,史密斯,7/20/1985,和21。
如图8D中一样,图8F显示了获取属性方法已经映射到的视窗的单元可以被覆盖。通过举例的方式,图8F显示如果获取属性方法DATEOFBIRTH被被映射到的列的第二行的单元被覆盖,则该覆盖导致其输出当前填充该单元的生成器的输出的覆盖、全局执行命令的调用(这导致其输出当前正填充该单元的生成器的再执行,获取属性方法AGE被映射到该单元)以及任何显示的所需更新。
图8C-图8F示出了由配置和映射图形用户界面模块842生成的示例性屏幕。通过显现和交互图形用户界面模块846生成的屏幕是相同的,不同在于通过类列表(具有其获取属性方法)852,配置和映射视窗854被显现和交互视窗(未显示)替代,该显现和交互视窗包括与显示的配置和映射视窗854相同的图像(不同的是映射特性不再可用)。
示例性运行时分配方案
图9A-图9C示出了分配具有面向生成器图形编程支持的运行时的各种方案。应当理解这些分配方案是示例性的,因此其他方案也在本发明的范围中。
图9A是示出了根据本发明的一个实施方式的用于分配具有面向生成器图形编程支持的运行时的第一方案的框图。在图9A中,面向对象源代码905(其包括生成器依赖性声明)被显示在具有面向生成器图形编程支持的运行时910的上面,该运行时910在具有类装载、动态类实例化、动态单方法调用以及类/方法自省(introspection)的运行时915的上面,运行时915在操作系统920的上面。在图9A中,运行时910与运行时915一起工作。尽管任意数量的机制可以用于允许运行时910与运行时915一起工作,但元数据功能以举例的方式被描述。元数据功能允许附加信息被添加到源代码,所述信息被开发工具使用。例如,用于Java的元数据功能规范将用于注释字段、方法以及类的API定义为具有特定属性,该特定属性指示它们应当以特殊方式由开发工具、部署工具或运行时库来处理(Java规范请求175)。在该示例中,对面向对象源代码905进行编程的程序员可以将注释以生成器依赖性声明的形式添加到方法。由于这些注释由运行时915切换到运行时910,因此运行时910指示生成器依赖性声明的语法。在图9A中,运行时910和运行时915可以由不同的机构开发和/或分配。
图9B是示出了根据本发明的一个实施方式的用于分配具有面向生成器图形编程支持的运行时的第二方案的框图。在图9B中,面向对象源代码925(其包括生成器依赖性声明)被显示在运行时930(具有类装载、动态类实例化、动态单方法调用和类/方法自省,以及面向生成器图形编程支持)的上面,运行时930在操作系统935的上面。与图9A比较,运行时910和915被合并成单个运行时930。这种合并的结果是,运行时930指示生成器依赖性声明的语法。因此,对面向对象源代码925进行编程的程序员可以将生成器依赖性声明添加到所需语法中。
图9c是示出了根据本发明的一个实施方式的用于分配具有面向生成器图形编程支持的运行时的第三方案的框图。在图9C中,面向对象源代码940(其包括生成器依赖性声明)被显示在运行时945(具有类装载、动态类实例化、动态单方法调用和类/方法自省,以及面向生成器图形编程支持)的上面。与图9B比较,运行时920和935被合并成单个实体。这种合并的结果是,操作系统945指示生成器依赖性声明的语法。因此,对面向对象源代码940进行编程的程序员可以将生成器依赖性声明添加到所需语法中。
虽然描述了实施方式,其中运行时具有类装载、动态类实例化、动态单方法调用以及类/方法自省,但是可替换实施方式可以包括更多或更少的特征(例如,实例克隆、动态代理、原始类型转换等)。
示例性优点
在本发明的一个实施方式中,为方法声明生成器依赖性,作为指定使用合适实例而不是用手动调用排序代码的方法调用排序(其中合适的实例包括作为参量使用的实例、实例方法使用的实例以及类方法使用的元类实例)的方式。有效地,生成一些或所有手动调用排序代码的工作被替换为:1)应用程序员为编写生成器依赖性声明所完成的工作;以及2)运行时为发现并建立生成器图形以及执行这些生成器图形的生成器所完成的工作。换句话说,之前包含在手动调用排序代码中的逻辑基于生成器依赖性声明在运行时期间是可被运行时发现的。因此,生成器依赖性声明告知运行时具有什么样的参量的什么实例的什么方法被执行以及为了同步何时执行。尽管编写运行时的工作相对较大,但是只需要编写一次就能用于执行为运行时编写的任何面向对象应用;相反,为了典型应用,编写生成器依赖性声明的工作与编写手动调用排序代码相比相对较少。
减少编程错误
面向生成器图形编程一般降低与手动调用排序代码的调试和/或性能调节相关的耗费。这至少因为应用程序的基础结构从概念上是操作特定输入的对象的转换方法(对象的一个方法的输出是另一个的输入,等)的一组非格式化图形的原因是真实的。生成器依赖性声明和具有面向生成器图形编程支持的运行时将这些图形格式化为生成器图形。因此,对于每一次改变数据的机会,应用程序员不需要考虑其影响,并编写手动调用排序代码以利用合适的输入使合适的实例的合适的转换方法以合适的顺序被调用。换句话说,对于每一次改变数据的机会,应用程序员不需要考虑哪些图形受影响,和在这些图形内的实例的哪些转换方法受影响。而是,自动生成器图形生成模块发现并建立生成器图形且生成器图形执行模块再执行需要反映数据改变的生成器图形。该自动化帮助应用程序员避免如下错误,例如:1)以错误顺序调用合适实例的合适转换方法;2)忘记包括使图形中实例的一个或多个所需的转换方法响应于一些改变的数据而被调用的命令;3)包括使实例的不必要的转换方法响应于一些改变的数据而被调用的命令(例如,包括用于调用不是受数据改变的影响的图形一部分的实例的转换方法的命令;包括用于调用是受数据改变的影响但自身没有被影响的图形一部分的实例的转换方法的命令,等等)。
同步化
如之前所述,在执行期间的生成器输出的缓存允许同步化。因此,根据与观察者模式的比较,生成器依赖性声明向具有面向生成器图形编程支持的运行时通知依赖性,且该运行时确定何时回调哪个生成器。
完全解释任意结果的能力
在本发明的一个实施方式中,操练(drilling)/查看模块(未显示)被包括作为运行时的一部分。操练/查看模块提供图形用户界面,该图形用户界面通过终端用户的交互允许向下操练生成器图形(从根节点下行到生成器图形)以查看生成器图形的各种生成器的输出。这允许终端用户观察分配到感兴趣生成器的输出的各种输出,包括数据值和依赖性(由依赖性确定生成器返回)。此外,在本发明的一个实施方式中,操练/查看模块给终端用户提供查看生成器的方法内的代码、生成器的实例的值和/或生成器的类的内容的能力。
因此,操练/查看模块提供多种后置处理活动,包括调试、输出解释等。
示例性实际应用/技术影响/工业适用性
存在不同方面的多种示例性实际应用和本发明的实施方式。例如,作为执行应用程序的一部分,促使从机器存储介质中取得信息(例如,访问面向对象源代码,包括生成器依赖性声明)、将信息存储到机器存储介质(例如,存储像生成器图形结构的数据结构等)、硬件处理资源的操作、提供感兴趣生成器的输出(例如,通过图形用户界面、存储到机器存储介质、传输等)等。在某个意义上,预处理行为包括编写这样的应用程序和/或提供数据(数据可以表示任意数量的物理和/或实际项,例如金融值、地理值、气象值、保险统计值、统计值、物理测量、机器状态值等),而后置处理行为包括结果的提供(所述结果可以表示任意数量的物理和/或实际项,例如金融值、地理值、气象值、保险统计值、统计值、工业测量、机器控制信息等)。通过具体示例的方式,后置处理行为可以由以下来提供:1)图10的生成器图形视窗模块1062,用于以图形方式显示显示运行时生成的当前生成器图形的表示;和/或2)可配置交互生成器输出布局图形用户界面模块840(同样见图10的可配置交互生成器输出布局图形用户界面模块1085),用于以图形方式显示来自生成器图形的输出并与该生成器图形交互。
作为另一个示例,自身具有生成器依赖性声明的应用程序在被运行时执行时表示物理/实际项并促使上述操作。通过具体示例的方式,这些生成器依赖性声明响应于运行时对它们的执行而促使数据结构在机器存储介质中被形成。而且,生成器依赖性声明和应用程序一起被存储并从机器存储介质中和应用程序一起被取得。此外,这些生成器依赖性声明表示生成器之间的关系,而生成器表示执行的操作(方法)和实例。面向对象编程中的实例可以用于表示物理和/或实际项,而生成器表示在这些描述上被执行的操作。
通过另一个示例,一组一个或多个应用程序和运行时实施交叉资产风险管理软件,包括外币兑换、资产净值、利率、信贷、膨胀、商品以及交叉资产复合产品。这些产品范围从现金和实际普通产品到特殊且复杂的衍生产品。还包括的是一组用于这些产品的数学估价模型,以及它们相关的市场数据、支付和记账项生成例程和它们的相关可观察的标定模型以及它们相关的原始输入。
通过另一个示例,一组一个或多个应用程序和运行时可以实施文字处理器、电子数据表、通信/电子邮件软件、照片查看软件、病毒扫描软件、媒体播放器、数据库服务器、游戏、工业应用和/或操作系统。当然,应用程序可以被实施以执行各种其他任务。
示例性实施
通过图示的方式,本发明的示例性实施方式将被描述,其支持依赖性、动态依赖性(包括偶然依赖性和订阅依赖性)、用于快捷依赖性和非快捷依赖性的显式依赖性确定生成器、用于快捷被声明依赖性、类关键字、实例关键字、方法关键字、生成器覆盖/不覆盖命令(其是设定命令类型)以及全局执行命令的即时依赖性确定生成器。此外,示例性实施方式可选地支持生成器图形交互视窗模块和增量执行。当然,本发明的可替换实施方式可以实施更多、更少和/或不同的特征。
图10是根据本发明的一个实施方式的示例性实施的框图。在图10中,虚分界线1000将运行时客户端1002与具有面向生成器图形编程支持的运行时间1004隔开。
运行时客户端1002的逻辑执行流包括块1010、1020、1025、1030以及1035,且具有面向生成器图形编程支持的运行时间1004分别包括对应的块1095、1098、1040、1045、1070以及1082;实箭头线表示从运行时客户端1002的逻辑执行流的块1035到具有面向生成器图形编程支持的运行时间1004的块1070的直接因果关系,而点箭头线示出了从运行时客户端1002的块1010、1020、1025和1030到具有面向生成器图形编程支持的运行时间1004的块1095、1098、1040和1045的因果关系。根据本发明的实施方式,这些后来的因果关系可以是直接或间接的。例如,与图6类似,通过使用命令日志(未显示)和/或覆盖日志1047可选间接因果关系可以被使用。此外,块1095和1098是虚线,因为根据本发明的实施方式它们可选地可以是不同块的一部分(例如,块1095可以是块1098的一部分;块1090可以是块1040的一部分;块1095和1090可以是块1040的一部分)。类似的,块1045是虚线,是因为根据本发明的实施方式它可选地可以是不同块的一部分(例如,块1045可以是块1070的一部分)。同样,根据本发明的实施方式块1049可选地可以是不同块的一部分(例如,块1049可以是块1040的一部分)。在一些实施方式中,运行时1004包括度量获取模块1082。该度量获取模块1082可选地可以是块1070的一部分。
在图10中,运行时1002包括类定义1010,该类定义包括具有数据1012、方法1014、执行模式设定1015、生成器依赖性声明1016以及可选的类关键字1090的业务逻辑。类定义1010是面向对象编程语言的类,因此包括用于数据1012和方法1014的定义。执行模式设定1015可以在代码层指定执行模式,如果之后执行模式设定没有被覆盖,则方法在该执行模式下被执行。此外,这些类定义1010包括如前所述的用于方法1014的生成器依赖性声明1016。此外,在本发明的一个实施方式中,每一个类具有用于跟踪的类关键字1090。
运行时1004的新的类模块1095装载并自省类定义1010(例如,响应于新的类命令)。该装载和自省可以使用任意数量的公知或将来开发的技术来完成,包括为了优化而选择性地装载类的技术。新的类模块1095装载类通过运行时1004的类1054来示出。作为装载和自省类1054的一部分,新的类模块1095还装载并自省生成器依赖性声明1016,如通过类1054中的方法和生成器依赖性声明1056所示的。新的类模块1095还保持类跟踪结构1092,该类跟踪结构1092用于跟踪类的类关键字。因此,类跟踪结构1092保持类关键字与类1054的引用之间的对应。此外,新的类模块1095还保持用于使用方法关键字跟踪方法的方法跟踪结构1058。因此,方法跟踪结构1058保持方法关键字与方法的引用以及关于生成器依赖性声明的信息之间的对应。此外,新的类模块1095可以将执行模式设定1015输入到基于生成器的可配置决定结构1049,该结构1049保持生成器的执行模式。
运行时客户端1002还包括具有实例关键字1020的实例实例化命令。运行时1004新的实例模块1098装载由具有实例关键字1020的实例实例化命令指定的实例(例如,响应于新的实例命令)。该实例的装载可以使用任意数量的公知或将来开发的技术来完成,包括为了优化而选择性装载实例的技术。作为该实例装载的一部分,新的实例模块1098使用类关键字访问类跟踪结构1092从而访问来自类1054的合适的类。新的实例模块1098装载实例可以通过运行时1004的实例1052来示出。新的实例模块1095还保持用于跟踪实例的实例关键字的实例跟踪结构1065。因此,实例跟踪结构1065保持实例关键字与实例1052的引用之间的对应。如之前所示,新的类模块1095可以是新的实例模块1098的一部分,类1054可以响应于实例实例化命令1020(而不是单独的新的类命令)被装载到该新的实例模块1098中。
运行时客户端1002还包括具有生成器关键字1025的生成器实例化命令。运行时1004的自动生成器图形生成模块1040装载由具有生成器关键字1025的生成器实例化命令指定的生成器(例如,响应于指定当前组的感兴趣生成器的新的生成器命令)。此外,自动生成器图形生成模块1040还响应于之前所述的当前组的感兴趣生成器发现、建立并可选地解析生成器图形。在本发明的一个实施方式中,生成器关键字包括类关键字、实例关键字以及方法关键字。作为该生成器实例化的一部分,自动生成器图形生成模块1040:1)使用类关键字来访问类跟踪结构1092以访问来自类1054中的合适的类;2)使用实例关键字来访问实例跟踪结构1065以访问来自实例1052中的合适实例;3)使用方法关键字访问方法跟踪结构1058以访问合适的生成器依赖性声明陈述。具有生成器关键字1025的生成器实例化命令指定的生成器的实例化和任意被发现的生成器和建立生成器图形的实例化通过运行时1004的生成器图形结构1060来示出。因此,在本发明的一个实施方式中,由具有生成器关键字1025的生成器实例化命令标识的生成器关键字和通过生成器图形生成而被发现的关键字与表示当前生成器图形的另外信息一起被存储在生成器图形结构1060中。
如之前所述,块1095和1098可以是块1040的一部分,因此,关于装载哪些类、实例以及生成器的决定由当前生成器图形中有什么生成器来驱动。在该本发明的实施方式中,类、实例以及生成器的装载可以被优化且是以生成器为中心的。
运行时客户端1002还包括数据准备命令,包括生成器输出覆盖/不覆盖命令1030。覆盖/不覆盖命令包括被覆盖/不覆盖的生成器的生成器关键字,以及被覆盖时的覆盖值。运行时1004的覆盖生成器输出模块1045使由生成器覆盖/不覆盖命令指定的生成器被覆盖/不覆盖。该因果关系可以间接或直接的。
在间接因果关系的情况,覆盖生成器输出模块1045填充覆盖日志1047以用于生成器图形执行模块1070的使用。在直接因果关系的情况,覆盖生成器输出模块1045访问生成器图形结构1060的生成器输出缓存1097和实例1052。具体地,如参考覆盖生成器输出模块390所描述的,在一个实施方式中,生成器可以被分类为属性生成器或方法生成器;因此,覆盖生成器输出模块1045可以包括用于被覆盖的属性生成器的覆盖属性生成器输出模块和用于被覆盖的方法生成器的覆盖方法生成器输出模块(未显示);属性方法的覆盖使覆盖值被存储在生成器图形结构1060的生成器输出缓存1097中且被存储在实例1052的合适实例的数据中,而方法生成器的覆盖使覆盖值被存储在生成器输出缓存1097中。
在本发明的一个实施方式中,生成器在生成器图形初始被执行前可以不被覆盖,其中生成器将是该生成器图形的一部分(因此,生成器已经被实例化,从而被自动生成器图形生成模块1040指定为感兴趣生成器或被发现)。但是,在图10所示的实施方式中,生成器可以通过使用生成器覆盖命令来实例化并覆盖而在初始执行之前被覆盖。该被覆盖的生成器一般通过发现进程来最后成为生成器图形的一部分(例如,当动态依赖性被解析时)。在本发明的一些实施方式中,该数据准备还可以包括其他类型的设定命令。覆盖生成器输出模块1045被显示为虚线框,这是因为该覆盖生成器输出模块1045在本发明的可替换实施方式中可以不出现。
生成器图形结构1060还可选地包括用于支持增量执行的本发明的一些实施方式的增量执行标记1080。如之前参考图3B的增量执行标记382所述,增量执行标记1080用于辅助在初始执行之外的执行上的生成器图形的增量执行。本发明的不同实施方式以不同的方式使用增量执行标记382。例如,在具有命令日志的本发明的一个实施方式中,日志用于跟踪被添加和/或被修改的生成器,而增量执行标记382用于标记受影响的生成器(被修改或添加的生成器的前身(ancestor),以由此依赖于所述前身)。作为另一个示例,在不具有命令日志的本发明的一个实施方式中,增量执行标记382用于标记被添加或修改的生成器和被修改或添加的生成器的前身(由此与该生成器相关)。作为另一个示例,在不具有命令日志的本发明的一个实施方式中,生成器的修改和添加立即被完成且增量执行标记382用于标记为是修改或添加的生成器的前身(因此依赖于所述前身)的生成器。虽然本发明的实施方式已经被描述支持增量执行并使用增量执行标记,但是本发明的其他实施方式支持不适用增量执行标记的增量执行(例如,命令日志用于跟踪被添加或修改的生成器,且执行开始生成器的列表被保留在执行开始日志中;其中生成器图形执行模块1070从执行开始生成器开始,且以生成器图形的前身向上到顶部的方式工作;通过举例而非限定的方式,本发明的该实施方式在后面参考图15-25被描述)。
根据本发明的一些实施方式,运行时客户端1002还包括执行模式选择命令1036。用户可以使用该执行模式选择命令1036来通过改变运行时设定结构1048、基于生成器的配置决定结构1049和/或生成器图形结构1060从而改变执行模式设定。在一个实施方式中,执行模式选择命令1036改变基于生成器的配置决定结构1049来修改特定类、特定实例、特定方法或以上任意组合的执行模式设定。例如,第一执行模式选择命令可以将特定类的所有方法的执行模式设定改变到第一执行模式,第二执行模式选择命令可以改变特定类的特定实例的执行模式设定,第三执行模式选择命令可以改变特定方法的执行模式设定,第四执行模式选择命令可以改变特定方法和特定实例的执行模式设定,等等。可替换地,用户可以使用执行模式选择命令1036来通过改变生成器图形结构1060以逐个生成器为基础来改变执行模式设定。由于生成器图形结构1060中的每一个生成器具有生成器执行模式设定,因此执行模式选择命令1036可以提供标识特定生成器的生成器关键字和特定生成器的所需执行模式设定,从而使运行时1004将特定生成器的执行模式设定改变到所需的执行模式设定。
运行时客户端1002还包括全局执行命令1035。运行时1004的新的生成器图形执行模块1070执行生成器图形。生成器执行模块1070可以基于来自基于生成器的配置结构1049的生成器的对应的执行模式来执行生成器图形中的每一个生成器。在一些实施方式中,生成器执行模块1070可以覆盖来自基于生成器的配置结构1049的预先确定的生成器的执行模式。例如,如果来自基于生成器的配置结构1049的执行模式不能被运行时1004支持,则生成器执行模块1070可以覆盖该执行模式。
在一些实施方式中,运行时1004执行三种执行模式,即多进程、多线程、以及本地执行。因此,生成器执行模块1070包括并行化模块1076、多进程模块1077、多线程模块1078以及本地执行模块1079。对于每一个生成器,自动生成器图形生成模块1040可以从基于生成器的配置决定结构1049中找到对应的执行模式,并且,如果对应的执行模式没有被运行时设定结构1048中的运行时设定覆盖,则自动生成器图形生成模块1040可以在生成器图形结构1060中相应地设定生成器执行模式设定。基于生成器图形结构1060中的生成器执行模式设定,并行化模块1076可以发送生成器到多进程模块1077、多线程模块1078以及本地执行模块1079中的对应的一者。然后在多进程模块1077、多线程模块1078和/或本地执行模块1079为生成器来实例化任务。任务是计算工作的逻辑高电平的、离散的、无关的部分。任务一般作为程序由处理器执行。
在一些实施方式中,如果执行模式是多进程,那么并行化模块1076可以发送生成器到多进程模块1077。多进程模块1077可以串行化对应于生成器的任务和生成器的输入,并将串行化的任务和输入添加到作业(job)中。当对应于准备好被执行的具有多进程执行模式的所有生成器的任务已被添加到作业时,多进程模块1077可以发送该作业到将网格分配器1081以被转发到处理器的网格。然后网格中的一些或所有的处理器可以远程执行作业中的任务。如果执行模式是多线程,则并行化模块1076可以发送生成器到多线程模块1078。该多线程模块1078可以启动线程池(thread pool)机制并将对应于该生成器的任务供给到将被执行的可用线程。如果,执行模式是本地执行,则并行化模块1076可以发送生成器到本地模块1079。该本地模块1079然后可以执行在当前运行时线程中的任务。
在一些实施方式中,如果没有为生成器指定执行模块,则并行化模块1076可以默认发送生成器到多进程模块1077、多线程模块1078以及本地执行模块1079中的预先确定的一者。另一方面,如果生成器的类定义1010包括用于生成器的执行模式设定1015,则并行化模块1076可以根据执行模式设定1015发送生成器,除非该执行模式设定1015被覆盖。执行模式设定1015可以以各种方式被替换。在一个实施方式中,执行模式选择命令1036在类、方法、实例或以上任意组合的基础上改变基于生成器的可配置决定结构1049中的执行模式设定,以覆盖执行模式设定1015。在一个实施方式中,执行模式选择命令1036以逐个生成器为基础来改变生成器图形结构1060中的执行模式设定从而覆盖使用基于生成器的可配置决定结构1049确定的执行模式设定。在一个实施方式中,执行模式选择命令1036在运行时设定结构1048中改变运行时全局水平上的执行模式设定,以覆盖生成器图形结构1060中的执行模式设定。
这样,生成器图形执行模块1070修改生成器输出缓存1097(在属性生成器和方法生成器的情况)、使用增量执行标记1080(如果存在)以及修改实例1052的数据(在属性方法的情况)。在一些实施方式中,度量获取模块1082可以在执行生成器期间获取度量。获取的度量可以存储到生成器图形结构1060的度量1083中。注意,度量可以在生成器的基础上被获取,且由于生成器包括类、方法以及实例的唯一组合,因此获取的度量可以是基于类-实例-方法。此外,获取的度量可以基于任务和/或作业。
在一些实施方式中,获取的度量包括用于不同用途的不同类型的度量,例如用于监控计算环境、用于监控远程执行时间、用于监控本地执行时间、用于监控数据流、用于监控总执行时间、用于对不同类型的执行进行基准测试(benchmark)等。例如,为了监控计算环境,可以获得度量,例如在多进程中并专用于生成器的执行的远程网格上的可用处理器或引擎的数量,和在本地和远程处理时间之间观察到的经验比。例如,如果本地处理器和远程处理器没有过度装载其他任务,则该经验比可以接近两个处理器之间的频率比。为了监控远程执行时间,例如远程处理时间、远程反串行化时间以及远程串行化时间的度量可以被获取。为了监控本地执行时间,例如本地执行时间、本地反串行化时间以及本地串行化时间的度量可以被获取。为了监控数据流,例如串行化输入对象的大小和串行化输出对象的大小的度量可以被获取。当在远程处理器上处理数据时,输入和输出数据通过网络被交换。远程处理的效率直接联系到被交换的数据量。监控数据流的大小可以提供有用信息以帮助减少或避免使被交换的数据结构过载多余或没用的信息。为了监控总执行时间,例如执行特定生成器的总时间的度量可以被获取。在一些实施方式中,执行特定生成器的总时间可以是本地串行化时间、远程反串行化时间。远程处理时间、远程串行化时间以及本地反串行化时间的总和。该时间可以以逐个任务为基础被测量,且在属于单个作业的所有任务间是相当连贯的(即,时间很接近)。为了对不同类型的执行进行基准测试,例如加速和效率的比较度量可以从获取的其他度量中得到。加速是并行算法比对应的顺序算法快多少的测量。为了特定作业加速被定义为属于作业的所有任务的本地处理时间(如果本地执行)的总和除以使用并行执行方式(例如多进程)的作业执行时间(作业总时间)。理论上,在加速基本等于处理器数量时达到理想加速,也就是说,当串行化时间和反串行化时间近似0,或通过良好的处理器效率比进行补偿时。效率等于100*加速/处理器数量。另外,在理论上的理想情况,其中本地和远程处理器一样时,理想效率接近100%。
之前已经论述过用于执行生成器图形的生成器并这里可适用的各种技术。例如,在实施命令日志的实施方式中,命令日志被使用然后生成器图形被执行。此外,在支持未解析依赖性的可能性的本发明的实施方式中,生成器图形执行模块1070包括动态依赖性模块1075,该动态依赖性模块1075可以调用自动生成器图形生成模块1040。
图10还示出了提供机制(例如GUI)的可选生成器图形视窗模块1062,通过该模块1062程序员/用户可以查看生成器图形和生成器图形结构的生成器输出。此外,图10示出了可选的可配置交互生成器输出布局图形用户界面模块1085,用于提供图形用户界面(GUI)(包括块1030和1035的动态调用),该图形用户界面表示可配置交互生成器输出布局图形用户界面模块840。
在使用命令日志的本发明的实施方式中,不同的触发用于触发不同的动作。例如,响应于显式命令(开始记录和结束记录)、显式全局执行命令(记录在启动且在每个显式总执行命令后自动开始,且响应于接下来的显式总执行命令处理每一个日志)、显式数据准备命令等,生成器实例化命令可以被记录并批处理。类似地,响应于显式全局执行命令、第一获取命令、每一个获取命令等,数据准备命令可以被记录并批处理。
示例性跟踪结构
图11A-图11G是示出了根据本发明的一个实施方式的图10中的数据结构的示例性内容的框图。虽然图11A-图11G将这些数据结构作为表格示出,但是应当理解可以使用合适的数据结构(例如,哈希映射表(hash map)、集合、列表等)。
图11A是根据本发明的一个实施方式的图10中的类跟踪结构1092的示例的框图。在图11A中,类关键字列1110和类引用列1115被显示为分别用于存储类关键字和装载的类的对应的引用。
图11B是根据本发明的一个实施方式的图10中的实例跟踪结构1065的示例的框图。在图11B中,实例关键字列1120和实例引用列1125被显示用于分别存储实例关键字和对应的实例引用。在本发明的实施方式中,其中实例关键字在所有的类之间不需要是唯一的,实例跟踪结构还包括类关键字或实例的类的引用。
图11C是根据本发明的一个实施方式的图10中的生成器图形结构1060的示例的框图。在图11C中,类引用列1135、实例引用列1140以及方法引用列1145被显示为分别用于存储组成当前生成器图形的当前生成器的引用。这些引用可以采用各种形式。例如,这些列可以分别存储类1054(或可替换的1092)的引用、实例1052(或可替换的1065)的引用和方法1056(或可替换的1058)的引用。虽然在本发明的一个实施方式中,这些列存储引用,但在本发明的可替换实施方式中,这些列中的一个或多个可以存储关键字。
另外,图11C包括父生成器引用列1150(对每一条链接包括父生成器引用和依赖性确定生成器引用)和子生成器引用列1160(对每一条链接包括子生成器引用、依赖性确定生成器引用、链接模式以及粘附链接指示符)。每一个生成器在列1160中可以具有0个或多个子生成器链接。列1160中的每一个子生成器链接包括:1)子生成器引用,该子生成器引用是生成器图形结构的其他行的引用,用于根据生成器依赖性声明表示生成器依赖性;2)依赖性确定生成器引用,其是生成器图形结构的另一行的引用,并表示已经创建子链接的依赖性确定生成器;以及3)具有生成器依赖性类型的链接模式,用于标识生成器依赖性是否是参量、字段或排序依赖性的结果(见关于图7A-图7F的论述),且如果是参量,则为生成器依赖性的参量ID;和4)粘附指示符,用于指示链接模式是向上声明依赖性的结果(在支持向上声明依赖性的本发明的实施方式中)或粘附订阅的结果(在支持粘附订阅的本发明的实施方式中)且不能通过该生成器的生成器参量依赖性声明被修改(即,生成器存储在包含粘附指示符的列的行中)。每一个生成器在列1150中具有0个或多个父生成器链接。列1150中每一个父生成器链接包括:1)父生成器引用,该父生成器引用依照另一个生成器的子生成器引用存储回引用(即,生成器图形结构的另一行的引用,用于表示依赖于该生成器的父生成器);以及2)依赖性确定生成器引用,其是生成器图形结构的另一行的引用并表示已经创建父体链接的的依赖性确定生成器。因此,当链接被创建时,子生成器行的父生成器链接列和父生成器行的子生成器链接列被修改以表示链接(且依赖性确定生成器引用在这两者中相同)。在本发明的实施方式中,由于一个生成器图形中或不同的生成器图形中的多条路径可以包括给定的生成器,因此对于给定生成器可以有多条父生成器链接。
此外,图11C包括生成器输出缓存和覆盖生成器输出修改列1170,用于存储当前生成器输出和生成器是被覆盖的还是不被覆盖的输出值的指示。另外,图11C包括增量执行标记1180用于存储增量执行标记,如之前所述。
在一些实施方式中,图11C包括生成器执行模式设定列1173,用于存储生成器图形结构1060中每一个生成器的执行模式设定。例如,执行模式设定可以是多进程、多线程以及本地处理中的一者。
此外,图11C包括生成器度量列1175,用于存储生成器图形结构1060中每一个生成器的度量。使用度量获取模块1082在逐个生成器的基础上获取生成器度量。获取度量的处理的一些实施方式的细节在下面进行论述。
图11D是根据本发明的一个实施方式的图10中方法跟踪结构1058的示例的框图。在图11D中,方法关键字列1190和方法引用列1192被显示用于分别存储方法关键字和被装载类的方法的对应引用。此外,图11D还包括参量依赖性列1194、字段依赖性列1196、排序依赖性列1195、向上依赖性列1193、弱约束依赖性列1199、输出类列1197和包括默认执行模式的可选的附加注释列1198。参量依赖性列1194、排序依赖性列1195、向上依赖性列1193、弱约束依赖性列1199和字段依赖性列1196存储从方法的生成器依赖性声明陈述中解析的生成器依赖性信息(例如,见图7A的705),而输出类列1197存储关于方法的输出的输出类的信息(通过方法的签名可确定-例如,见图7A的710)。在本发明的一些实施方式中使用的参量依赖性列1194、字段依赖性列1196、排序依赖性列1195、向上依赖性列1193、弱约束依赖性列1199的示例性内容在后面提供。
图11E是根据本发明的一个实施方式的串行化形式本地映射的示例的框图。图11E中的串行化形式本地映射包括串行化形式标识符(ID)列1112、输入生成器关键字列1113、基础(underlying)类关键字和实例关键字列1114、串行化形式1116、串行化形式大小1117以及串行化时间1118。在一些实施方式中,串行化形式ID、输入生成器关键字、基础实例关键字以及串行化形式被用于由运行时1004实施并行化。该实施的细节在下面论述。在一些实施方式中,运行时1004实施植入以基于生成器获取度量。因此,运行时1004可以存储在串行化形式本地映射中虚线所指示的列中的串行化形式大小和串行化时间。植入的细节在下面论述。
图11F是根据本发明的一个实施方式的图10中运行时设定结构1048的示例的框图。表格包括初始执行模式列1121和最终执行模式列1123。如果执行模式在运行时全局水平上没有被覆盖,则最终的执行模式与初始执行模式相同。另一方面,如果执行模式在运行时全局水平上被覆盖,则最终执行模式与初始执行模式不相同。例如,如果运行时1004不支持多进程,则通过将本地执行指派为最终的多进程执行模式,可以在运行时全局水平上覆盖多进程。
图11G是图10中基于生成器的配置决定结构1049的示例的框图。表格包括类关键字列1182、方法关键字列1184、实例关键字列1186、执行模式设定列1188。执行模式选择命令1036可以基于类、方法、实例或以上任意组合来修改基于生成器的配置决定结构中的执行模式设定。因此,根据本发明的一个实施方式,类关键字列1182、方法关键字列1184以及实例关键字列1186中的一者或多者在特定行中可以为空。
远程计算
如之前所述,本发明的一个实施方式支持多进程执行模式。为了支持多进程,运行时通过串行化生成器的任务和每一个生成器的输入和/或基础实例,并发送串行化形式到由网格以由网格中的处理器来处理,从而与处理器的网格交互。
图12A是示出了根据本发明的一个实施方式的支持多进程的图10的另外的细节的框图。虚分界线1200的左边是具有面向生成器图形编程支持的运行时1004。虚分界线1200的右边是网格1290。在运行时1004侧,图12A包括来自图10的生成器图形执行模块1070(包括并行化模块1076、多进程模块1077、多线程模块1078以及本地执行模块1079)和网格分配器1081。在网格1290侧,图12A包括远程计算模块1270。
根据本发明的一个实施方式,如果生成器的执行模式是多进程,则并行化模块1076发送生成器到多进程模块1077。该多进程模块1077实例化可以包括多个任务的作业。多进程模块1077可以实例化生成器的任务。多进程模块1077还可以串行化任务以及生成器的输入和/或生成器的基础实例。然后多进程模块1077可以将串行化形式的任务添加到作业。多进程模块1077可以发送该作业到网格分配器1081。然后网络分配器1081可以发送该作业到网格1290的远程计算模块1270。网格1290处理作业的细节在以下论述。
在处理完作业后,作业中的任务的串行化输出和/或实例被返回到网格分配器1081。该网格分配器1081可以转发作业中的任务的串行化输出和/或实例到被反串行化的多进程模块1077。
动态生成器依赖性
如之前所述,本发明的一个实施方式支持非动态和动态生成器依赖性。在不同的实施方式可以支持不同类型的动态生成器依赖性的情况下,本发明的一个实施方式支持偶然和订阅类型的动态生成器依赖性。因此,非偶然(静态)、非订阅(直接)依赖性是非动态依赖性。
图12B是示出了根据本发明的一个实施方式的支持偶然和订阅类型的动态生成器依赖性的图10的另外的细节的框图。图12B包括来自图10的虚分界线1000;类定义,该类定义包括业务逻辑1010(包括数据1012、方法1014以及生成器依赖性声明1016);新的类模块1095;类1054(包括方法和生成器依赖性声明1056);新的实例模块1098;实例1052、实例跟踪结构1065、自动生成器图形生成模块1040、生成器图形结构1060、以及生成器图形执行模块1070(包括动态依赖性模块1075)。
图12B显示生成器依赖性声明1016可选地包括偶然依赖性1210、订阅依赖性1220和多个生成器1215。这里,多个生成器1215是指返回生成器集合的生成器依赖性的能力。另外,图12B包括自动生成器图形生成模块1040中的订阅模块1240和偶然模块1230,用于处理偶然依赖性1210和订阅依赖性1220。图12B还显示订阅模块1240访问订阅日志1250。此外,动态依赖性模块1075包括偶然模块1260和订阅模块1265,用于处理偶然依赖性1210和订阅依赖性1220。订阅模块1265访问订阅日志1250。
偶然和订阅依赖性的以下描述在使用类DEP(依赖性的简写)的本发明的实施方式的上下文中完成,所述类DEP被依赖性确定生成器返回并被具由面向生成器图形编程支持的运行时分析。类DEP包括以下字段:1)TYPE,可以被设定成订阅、非订阅向下声明(不是订阅的子生成器)或非订阅向上声明(不是订阅的父生成器);2)PROD,用于非订阅向下声明的依赖性并是子生成器的集合(这样,其可以存储0个或多个生成器);3)SUB TYPE,用于订阅依赖性且被设定成指示订阅依赖性的类型(用于支持多种类型的订阅的本发明的实施方式;这里描述的本发明的实施方式可以支持两种类型-粘附和吸收,可替换实施方式可以支持更多、更少和/或不同的订阅类型);4)SUB CRIT,用于订阅依赖性并被设定成指示订阅标准;5)PAR LINK MODE,用于粘附订阅依赖性和非订阅向上声明依赖性并被设定成指示应当是父生成器的什么链接模式;6)PAR CLASS,用于粘附订阅依赖性和非订阅向上声明依赖性并被设定成指示应当是父生成器的什么类(例如,类关键字);7)PAR METHOD,用于粘附订阅依赖性和非订阅向上声明依赖性并被设定成指示应当是父生成器的什么方法(例如,方法关键字);以及8)PARINSTANCE,用于粘附订阅依赖性和非订阅向上声明依赖性且被设定成指示应当是父生成器的什么实例(例如,实例关键字)(如果PAR INSTANCE是左空白,则子生成器的实例关键字用于父生成器)。可替换实施方式在粘附订阅依赖性和/或非订阅向上声明依赖性的情况下可以使用父生成器的集合(集合中的每一项保持PAR_CLASS,PAR_INSTANCE,PAR_METHOD,PAR_LINK MODE)。当然,本发明的其他可替换实施方式可以使用不同的结构来返回依赖性。
偶然依赖性
在本发明的一个实施方式中,非偶然和偶然的生成器依赖性都被支持。非偶然生成器依赖性是不依赖于其他生成器的输出的依赖性,而偶然生成器依赖性是依赖于其他生成器的输出的依赖性。虽然本发明的一个实施方式支持非偶然和偶然的生成器依赖性,但是可替换实施方式仅支持非偶然或偶然的(偶然生成器依赖性可以最初由默认值驱动)。
如之前所述,生成器可以被视为多个标识符的集合,一个标识符用于每一个指定粒度的附加层。在本发明的一个实施方式中,在一组标识符中的任意一个或所有的标识符可以基于当前数据值有条件地被确定的情况下,偶然生成器依赖性可以是偶然的。例如,第一偶然生成器依赖性可以仅使实例标识符被有条件确定(类和方法标识符是固定的),而第二偶然生成器依赖性可以使类、实例和方法标识符被有条件确定。虽然在本发明的一个实施方式中,偶然生成器依赖性的多个标识符的所有标识符是有条件的,但是本发明的可替换实施方式可以以不同的方式被实施(例如,只允许多个标识符的子集是有条件的)。
图13A-图13J是示出了根据本发明的一个实施方式的伪代码和示例性生成器的框图。此外,图13A-图13J中所示的实施方式使用用于偶然和非偶然依赖性的相同的依赖性确定机制。这样,出于解释的目的,图13A-图13J中的一些示例是非偶然依赖性的示例,而其他是偶然生成器依赖性的示例。非偶然生成器依赖性是其中依赖性是关于依赖性确定生成器的生成器依赖性,所述依赖性确定生成器为无关生成器(例如,在本发明的一个实施方式中,依赖性类型由于其生成器依赖性声明为空而是可标识的);而偶然生成器依赖性是其中依赖性是关于依赖性确定生成器的生成器依赖性,所述依赖性确定生成器为相关生成器(例如,在本发明的一个实施方式中,依赖性类型由于其生成器依赖性声明不为空而是可标识的)。
此外,图13A-图13J中带圈的数字和字母用于示出根据本发明的实施方式执行操作的顺序。另外,图13A-图13J中的注释X::Y::Z用于表示生成器关键字,所述生成器关键字由类关键字(X)、实例关键字(Y)以及方法关键字(Z)组成。另外虚线圈和虚箭头线表示在本发明的一些实施方式中没有被执行的操作。特别地,如果用于给定依赖性的无关依赖性确定生成器的执行经常返回相同的依赖性(例如,无关依赖性确定生成器),则本发明的一些实施方式中的该依赖性确定生成器在生成器图形中被执行但是不被实例化和链接。
显式依赖性确定生成器
图13A示出了根据本发明的一个实施方式的使用非快捷、非动态(非偶然、非订阅)依赖性的方法的生成器依赖性声明的伪代码;而图13B是示出了根据本发明的一个实施方式的示例性非快捷、非动态(非偶然、非订阅)生成器依赖性的框图。图13A显示:1)方法α1305的生成器依赖性声明陈述1300,其中该生成器依赖性声明陈述1300包括到生成器CW::IY::BETA的生成器依赖性;以及2)方法β1315的生成器依赖性声明陈述1310,其中该生成器依赖性声明1310为空,且方法β1315返回类DEP的实例作为参量。方法β1315包括生成器依赖性声明代码1320,该代码1320将依赖性类型(DEP.TYPE)设定成非订阅向下声明,将依赖性生成器(DEP.PROD)设定成生成器13,并返回DEP。
在图13A中,带圈的1指示生成器依赖性声明1300被访问(例如,由于基于方法α1305的生成器(感兴趣生成器)的命名、由于基于方法α1305的生成器(作为感兴趣生成器的子代)的自动发现,等)。图13B中带圈的2显示生成器C0::I0::ALPHA基于方法α1305被实例化。图13A中带圈的3指示到生成器CW::IY::BETA的生成器依赖性被处理以确定生成器依赖性,且由此带圈的4指示生成器依赖性声明1310被访问。图13中带虚线圈的5显示生成器CW::IY::BETA被实例化为依赖性确定生成器1380。图13B中带虚线圈的6指示生成器C0::I0::ALPHA在生成器图形中被链接以指示生成器CW::IY::BETA是子生成器。图13B中带圈的7指示生成器CW::IY::BETA被执行并返回DEP以标识生成器13。带圈的8指示生成器13被实例化,而带圈的9指示生成器13在生成器图形中作为子生成器被链接到生成器C0::I0::ALPHA。在图13B中,生成器C0::I0::ALPHA和生成器13是标准生成器1385(不是依赖性确定生成器)。
图13C示出了根据本发明的一个实施方式的使用非快捷、偶然、非订阅的生成器依赖性的方法的生成器依赖性声明的伪代码;而图13D是示出了根据本发明的一个实施方式的示例性非快捷、偶然、非订阅的生成器依赖性的生成器的框图。此外,图13D涉及图5A的生成器5、7A和7B,以及生成器5至生成器7A的动态依赖性的解析。
图13C显示:1)用于方法α1305的生成器依赖性声明陈述1300,其中生成器依赖性声明陈述1300包括生成器CW::IY::BETA的生成器依赖性;2)用于方法β1315的生成器依赖性声明陈述1325,其中该生成器依赖性声明陈述1325包括到生成器CU::IV::DELTA的生成器依赖性,且其中方法β1315返回作为参量的类DEP的实例;3)用于方法δ(delta)1334的生成器依赖性声明陈述1332,其中生成器依赖性声明陈述1332为空,且方法δ1334返回作为参量的类DEP的实例;以及4)用于方法γ(gamma)1340的生成器依赖性声明陈述1338,其中生成器依赖性声明陈述1338为空,且方法γ1340返回变量X(其中X来自外部源、默认值(显式或类中的常量))。方法β1315包括生成器依赖性声明代码1330,该代码1330将DEP.TYPE设定成非订阅向下声明,依据生成器CX::IZ::GAMMA的输出将DEP.PROD设定成生成器7A或7B,并返回DEP。方法δ1332包括生成器依赖性声明代码1336,该代码1336将DEP.TYPE设定成非订阅向下声明,将DEP.PROD设定成生成器CX::IZ::GAMMA,并返回DEP.PROD。
在图13C中,带圈的1指示生成器依赖性声明1300被访问(例如,由于基于方法α1305的生成器(作为感兴趣生成器)的命名、由于基于方法α1305的生成器(作为感兴趣生成器的子代)的自动发现,等等)。图13D中带圈的2显示生成器5基于方法α1305被实例化。图13C中带圈的3指示到生成器CW::IY::BETA的生成器依赖性被处理以确定生成器依赖性,且由此带圈的4指示生成器依赖性声明1325被访问。图13D中带圈的5显示生成器CW::IY::BETA被实例化作为依赖性确定生成器1380。图13D中带圈的6指示生成器5在生成器图形中被链接以指示生成器CW::IY::BETA是子生成器。
图13C中带圈的7指示到生成器CU::IV::DELTA的生成器依赖性被处理以确定生成器依赖性,且由此带圈的8指示生成器依赖性声明1332被访问。图13D中带虚线圈的9显示生成器CU::IV::DELTA被实例化作为依赖性确定生成器1380。图13D中带虚线圈的10指示CW::IY::BETA在生成器图形中被链接以指示生成器CU::IV::DELTA是子生成器。图13D中带圈的11指示生成器CU::IV::DELTA被执行并返回DEP以标识CX::IZ::GAMMA。带圈的12指示生成器CX::IZ::GAMMA被实例化,而带圈的13指示生成器CX::IZ::GAMMA作为子生成器在生成器图形中被链接到生成器CW::IY::BETA。
在图13D中,带圈的A指示生成器CX::IZ::GAMMA被执行并返回X到生成器CW::IY::BETA,而带圈的B指示生成器CW::IY::BETA返回DEP以标识生成器7A;带圈的C指示未解析的余项(方法β)1390现在被解析,且生成器7A被实例化,而带圈的D指示生成器5到生成器7A的链接。在图13D中,生成器CX::IZ::GAMMA、5以及7A是标准生成器1385。
即时(On the fly)依赖性确定生成器
图13E示出了根据本发明的一个实施方式的使用非快捷、偶然、非订阅的生成器依赖性和快捷、偶然、非订阅的生成器依赖性的方法的生成器依赖性声明伪代码;而图13F是示出了根据本发明的一个实施方式的非快捷、偶然、非订阅的生成器依赖性和快捷、偶然、非订阅的生成器依赖性的生成器的框图。与图13D类似,图13F涉及图5A的生成器5、7A和7B以及生成器5到生成器7A的动态依赖性的解析。
图13E-图13F与图13C-图13D相同,不同之处在于:1)生成器依赖性声明陈述1342替换生成器依赖性声明陈述1325;2)方法fly 1344替换方法δ1334;以及3)生成器CW::IY::FLY替换生成器CU::IV::DELTA。生成器依赖性声明陈述1342包括到CX::IZ::GAMMA的快捷生成器依赖性。因此,图13E中带圈的4现在指示生成器依赖性声明1342被访问。图13E中带圈的7现在指示到生成器CX::IZ::GAMMA的快捷生成器依赖性被处理以确定生成器依赖性,且由此运行时基于方法fly 1344即时调用依赖性确定生成器CW::IY::FLY。带圈的8现在指示生成器依赖性声明1332被访问。图13F中带虚线圈的9现在显示生成器CW::IY::FLY被实例化。图13F中带虚线圈的10指示生成器CW::IY::BETA在生成器图形中被链接以指示生成器CW::IY::FLY是子生成器。图13F中带圈的11指示生成器CW::IY::FLY被执行且返回DEP以标识CX::IZ::GAMMA。图13E-图13F中的余项与图13C-图13D中的相同。
依赖性确定生成器CW::IY::FLY的运行时生成即时减轻了应用程序员必须编写显式生成器依赖性声明代码并基于该代码实例化依赖性确定生成器的麻烦。此外,其还允许程序员为方法β1315在生成器依赖性声明陈述中直接规定生成器CX::IZ::GAMMA的依赖性,而不是规定依赖性确定生成器CU::IV::DELTA。
快捷技术可以用于多种情况,且可以另外具有多种格式。例如,虽然在图13E-图13F中快捷是非偶然(其直接标识子生成器)且是在用于方法的生成器依赖性声明陈述中,其中父依赖性确定生成器基于该方法,但是其他情况和格式可以被显示如下:1)图I-图J示出快捷的使用,该快捷是非偶然的且在用于方法的生成器依赖性声明陈述中,其中父标准生成器基于该方法;以及2)图13G-图13H示出两个快捷的使用,其中一个是偶然的且是用于方法的生成器依赖性声明陈述的一部分,其中依赖性确定生成器基于该方法。
图13G示出根据本发明的一个实施方式的使用快捷、偶然、非订阅的生成器依赖性和快捷、非偶然、非订阅的生成器依赖性的方法的生成器依赖性声明的伪代码;而图13H是示出根据本发明的一个实施方式的示例性快捷、偶然、非订阅的生成器依赖性和快捷、非偶然、非订阅的生成器依赖性的生成器的框图。图13G显示:1)用于方法α1305的生成器依赖性声明陈述1345,其中生成器依赖性声明陈述1345包括到生成器<P>GETC1::I1::M1的快捷、偶然生成器依赖性;2)用于方法fly1 1355的生成器依赖性声明陈述1350,其中生成器依赖性声明陈述1350包括到生成器C0::I0::GETC1的快捷、非偶然生成器依赖性,且方法fly1 1355返回作为参量的DEP的实例;3)用于方法fly2 1362的生成器依赖性声明陈述1332,其中方法fly2 1362返回作为参量的DEP的实例;以及4)用于方法getc1 1370的生成器依赖性声明陈述1365,其中方法getc1 1370返回具有值CX或CY的C1。
响应于快捷依赖性<P>GETC1::I1::M1(指示该快捷被用于类关键字)运行时提供方法FLY1 1355及其生成器依赖性声明陈述1350。方法fly1 1355包括生成器依赖性声明代码1360,该代码1360将DEP.TYPE设定成非订阅向下声明,依据生成器C0::I0::GETC1的C1输出值将DEP.PROD设定成生成器CX::I1::M1或CY::I1::M1,并返回DEP。虽然在图13H的示例中<P>用于指定其是偶然的生成器的类关键字,但是本发明的可替换实施方式可以使用其他语法。此外,虽然在图13H的示例中,<P>用于指定其是偶然的生成器的类关键字,但是本发明的一个实施方式支持具有多个和/或不同的标识符,所述标识符组成以这种方式被指示为偶然的生成器关键字。
在图13G中,带圈的1指示生成器依赖性声明1345被访问(例如,由于基于方法α1305的生成器(作为感兴趣生成器)的命名,由于基于方法α1305的生成器(作为感兴趣生成器的子代)的自动发现,等等)。图13H中带圈的2显示生成器C0::I0::ALPHA基于方法α1305被实例化。图13G中带圈的3指示快捷生成器依赖性被处理以确定生成器依赖性且运行时提供方法fly1 1355;且由此,带圈的4指示生成器依赖性声明1350被访问。
图13H中带圈的5显示生成器C0::I0::FLY1被实例化作为依赖性确定生成器1380。图13H中带圈的6指示生成器C0::I0::ALPHA在生成器图形中被链接以指示生成器C0::I0::FLY1是子生成器。图13G中带圈的7指示到生成器C0::I0::GETC1的快捷生成器依赖性被处理以确定生成器依赖性且运行时提供方法fly2 1362,且由此,带圈的8指示生成器依赖性声明1332被访问。图13H中带虚线圈的9显示生成器C0::I0::FLY2被实例化。图13H中带虚线圈的10指示生成器C0::I0::FLY1在生成器图形中被链接以指示生成器C0::I0::FLY2是子生成器。
图13H中带圈的11指示生成器C0::I0::FLY2被执行并返回DEP以标识生成器C0::I0::GETC1。带圈的12指示生成器C0::I0::GETC1被实例化,而带圈的13指示生成器C0::I0::GETC1在生成器图形中被链接到作为子生成器的生成器C0::I0::FLY1。
在图13H中,带圈的A指示生成器C0::I0::GETC1被执行并返回C1=CX到生成器C0::I0::FLY1,而带圈的B指示生成器C0::I0::FLY1返回DEP以标识生成器CX::I1::M1;带圈的C指示未解析的余项(方法fly1)1390现在被解析,且带圈的D指示生成器C0::I0::ALPHA到生成器CX::I1::M1的链接。在图13H中,生成器C0::I0::GETC1、C0::I0::ALPHA以及CX::I1::M1是标准生成器1385。
依赖性确定生成器C0::I0::FLY1和C0::I0::FLY2的运行时产生即时减轻了应用程序员必须编写显式生成器依赖性声明代码并基于该代码实例化依赖性确定生成器的麻烦。此外,其允许应用程序员在用于方法α1305的生成器依赖性声明陈述中通过方法getC1在生成器**::I1::M1上直接规定偶然依赖性,而不是规定依赖性确定生成器CW::IY::BETA。
图13I示出了根据本发明的一个实施方式的使用快捷、非动态(非偶然、非订阅)生成器依赖性的方法的生成器依赖性声明的伪代码;而图13J是示出了根据本发明的一个实施方式的示例性快捷、非动态生成器依赖性的生成器的框图。图13I显示:1)用于方法α1305的生成器依赖性声明陈述1372,其中生成器依赖性声明陈述1372包括到生成器10的快捷生成器依赖性;2)用于方法fly 1376的生成器依赖性声明陈述1374,其中该生成器依赖性声明陈述1374为空,且方法fly 1376返回作为参量的DEP的实例。响应于快捷依赖性由运行时提供方法fly 1776及其生成器依赖性声明陈述1374。方法fly1376包括生成器依赖性声明代码1378,该代码1378将DEP.TYPE设定成非订阅向下声明,将DEP.PROD设定成生成器10,并返回DEP。
在图13I中,带圈的1指示生成器依赖性声明1372被访问(例如,由于基于方法α1305的生成器(作为感兴趣生成器)的命名,由于基于α1305的生成器(作为感兴趣生成器的子代)的自动发现,等等)。图13J中带圈的2显示生成器C0::I0::ALPHA基于方法α1305被实例化。图13I中带圈的3指示快捷生成器依赖性被处理以确定生成器依赖性且运行时提供方法fly1376;且由此,带圈的4指示生成器依赖性声明1374被访问。图13J中带虚线圈的5显示生成器C0::I0::FLY被实例化作为依赖性确定生成器1380。图13J中带虚线圈的6指示生成器C0::I0::ALPHA在生成器图形中被链接以指示生成器C0::I0::FLY是子生成器。
图13J中带圈的7指示生成器C0::I0::FLY被执行且返回DEP以标识生成器10。带圈的8指示生成器10被实例化,而带圈的9指示生成器C0::I0::ALPHA在生成器图形中被链接以指示生成器10是子生成器。在图13J中,生成器C0::I0::ALPHA和生成器10是标准生成器1385。
应当理解,在本发明的一个实施方式中,运行时程序员编写单个fly方法以解释所有支持的语法和组合(例如,方法fly 1334、方法fly1 1355、方法fly21362、方法fly 1376)并将该fly方法包含在运行时中。这不但允许应用程序员避免编写用于依赖性确定生成器的代码,其中在该依赖性确定生成器中fly方法可以被使用,运行时程序员仅需要编写通用fly方法(用于所有支持的情况的单个fly)。此外,应当理解快捷依赖性允许运行时使用依赖性确定生成器而同时允许应用程序员指示生成器依赖性声明中的标准生成器(例如,图13G-图13J)。
方法跟踪结构
回过来参考图11D的方法跟踪结构,现在将描述在本发明的一些实施方式中使用的参量依赖性列1194、字段依赖性列1196、排序依赖性列1195、向上依赖性列1193、以及弱约束依赖性列1199的示例性内容。具体地,参量依赖性列1194存储项的集合,每项用于每个参量依赖性。在本发明的一个实施方式中,每一项包括以下:1)参量ID;2)类关键字性质标识符,为显式类、相同类以及偶然类中的一者;3)当类关键字性质标识符指示显式类时所填充的显式类关键字性标识符;4)当类关键字性质标识符指示偶然类时所填充的偶然类确定方法关键字标识符;5)实例关键字性质标识符,为显式实例,相同实例以及偶然实例中的一者;6)当实例关键字性质标识符指示显式实例时所填充的显式实例关键字标识符;7)当实例关键字性质标识符指示偶然实例时所填充的偶然实例确定方法关键字标识符;8)方法关键字性质标识符,为显式方法、相同方法以及偶然方法中的一者;9)当方法关键字性质标识符指示显式方法时所填充的显式方法关键字标识符;10)当方法关键字性质标识符指示偶然方法时所填充的偶然方法确定方法关键字标识符;以及11)快捷标识符,指示生成器依赖性声明陈述中的用于参量的生成器依赖性声明是否包含快捷的指示(即,生成器依赖性声明陈述直接标识标准子生成器而不是依赖性确定生成器)。
各种关键字性质标识符的“...显式”指示用于显式关键字被提供用于生成器依赖性声明陈述中的生成器依赖性的情况。通过举例的方式,图13A的生成器依赖性声明陈述1300的生成器依赖性“CW::IY::BETA”提供显式类、实例以及方法关键字。
在本发明的一些实施方式中,速记技术被支持用于生成器依赖性声明陈述,从而:1)如果过没有为给定生成器依赖性提供类,则使用与父生成器相同的类;以及2)如果没有为给定生成器依赖性提供类和实例,则使用与父生成器相同的类和实例。在本发明的其他实施方式中,语法用于允许类、实例以及方法的任意组合与父体相同(除了所有都相同)(例如,分隔符用于指定类、实例以及方法中的每一个,且没有这种分隔符指示与父体相同-通过特定示例的方式,语法可以是“#C:”、“#I:”和“#M:”,由此生成器依赖性声明陈述中的生成器依赖性可以是#C:”类关键字”::#I:”实例关键字”::#M:”方法关键字”)(其中引号表示值或变量的占位符)不同关键字性质标识符的“...相同”指示用于在生成器依赖性声明陈述中使用速记技术的情况。
如之前所示,在本发明的一些实施方式中,偶然生成器依赖性的指示通过在生成器依赖性声明陈述自身中使用的语法(例如,<P>)而被支持(见图13G的1345),且该语法可以用于生成器依赖性的类、实例和方法的一者或多者。不同关键字性质标识符的“...偶然”指示用于标识该偶然生成器依赖性何时发生,而“偶然...确定方法关键字标识符”指示子生成器的方法关键字(类和实例与父生成器的相同)。通过举例的方式,图13G中的生成器依赖性声明1345的生成器依赖性“<P>GETC1::I1::M1”提供偶然类(其中偶然类确定方法关键字是GETC1)、显式实例关键字以及显式方法关键字。
排序依赖性列1195、向上依赖性列1193以及弱约束依赖性列1195的每一个存储项的集合,每一项用于每个排序依赖性、向上依赖性以及弱约束依赖性。在本发明的一个实施方式中,每一个这样的项具有与用于参量依赖性的集合项相同的结构,除了不包括参量ID。此外,尽管图13A-图13J示出了源于依赖性确定生成器的非订阅向下声明的依赖性,但是应当理解在向上声明的依赖性或弱约束依赖性的情况,参照图7F-图7G所论述的,依赖性确定生成器可以返回其他依赖性。
字段依赖性列1196存储项的集合,每一项用于每个字段依赖性。虽然在本发明的一个实施方式中每一项包括属性方法关键字,但在本发明的可替换实施方式中,每项可以具有与来自排序依赖性的集合项相同的结构。
订阅依赖性
在本发明的一个实施方式中,非订阅和订阅的生成器依赖性都被支持。当为给定方法声明订阅生成器依赖性且从该给定方法实例化给定生成器时,运行时可以在运行时期间解析符合订阅标准的一组零个或多个生成器(基于其他生成器的存在)。虽然在本发明的一个实施方式支持非订阅和订阅的生成器依赖性,但是可替换实施方式仅支持非订阅。此外,虽然在本发明的一个实施方式中支持两种类型的订阅依赖性(吸收和粘附),但是本发明的可替换实施方式支持更多、更少和/或不同类型的订阅生成器依赖性。
图14A-图14C是示出了根据本发明的一个实施方式的吸收和粘附订阅的框图。图14A是根据本发明的一个实施方式的图12B中的订阅日志1250的示例的框图。虽然图14A示出作为表格的这种日志结构,但是应当理解可以使用任意合适的数据结构(例如,哈希映射表)。图14B是示出根据本发明的一个实施方式的非偶然、吸收订阅生成器依赖性的示例性生成器的框图。图14C是示出根据本发明的一个实施方式的非偶然、粘附订阅生成器依赖性的示例生成器的框图。图14A的表中显示了填充有在图14B-图14C的示例中使用的内容的两行。图14B-图14C中使用带圈的数字来示出根据本发明的一个实施方式执行操作的顺序。
在图14A中,订户的生成器关键字列1400、订阅类型列1405以及用于触发生成器的订阅标准列1410被显示用于分别存储对应于列名称的内容。此外,图14A显示父链接模式列1425用于存储订阅依赖性的父生成器的链接模式;该信息将参考图14B-图14C被更详细地描述。
图14A还显示用于吸收订阅的匹配生成器列1415和完成列1420。匹配生成器列1415用于存储符合吸收订阅的订阅标准的触发生成器的生成器关键字,而完成列1420用于在当前组的生成器图形的给定执行期间跟踪吸收订阅是否已完成。匹配生成器列1415和完成列1420提供另外的可选优化,其允许扫描在自动生成器图形生成和生成器图形执行之间划分的被实例化的生成器的工作,这在后面描述。
图14A还显示用于粘附订阅的父类列1430、父方法列1435以及父实例列1437。父类列1430、父方法列1435以及父实例列1437分别存储被创建用于粘附订阅的父生成器的类关键字、方法关键字以及实例关键字。此外,图14A还显示依赖性确定生成器引用列1421存储创建订阅的依赖性确定生成器的引用。
吸收订阅
在吸收订阅生成器依赖性中,该依赖性是符合吸收订阅标准的当前生成器图形结构的所有生成器的集合。参考图14B,带圈的1表示生成器1450被实例化(例如,由于生成器1450(作为感兴趣生成器)的命名、由于生成器1450(作为感兴趣生成器的子代)的自动发现,等等)。生成器1450基于方法,该方法的生成器依赖性声明包括生成器依赖性(例如,具有参量ID X)的方法。带圈的2表示生成器1450的生成器依赖性被处理以标识生成器1455。
带圈的3表示生成器1450在生成器图形中被链接到作为子生成器的生成器1455。带圈的4表示生成器1455的执行。生成器1455是依赖性确定生成器,包括生成器依赖性声明代码,该代码指示吸收订阅生成器依赖性并指示吸收订阅标准。这样,生成器1455的执行导致填充订阅日志。参考图14A的第一行中的示例,订户的生成器关键字列1400、订阅类型列1405、用于触发生成器的订阅标准列1410、父链接模式列1425以及依赖性确定生成器引用列1421分别填充有生成器1450的生成器关键字、用于指示订阅是吸收类型的指示、包含在生成器1455中的吸收订阅标准以及链接到生成器1455的生成器1450的链接模式(在吸收订阅的情况下,其为参量依赖性且包括参量ID,但是其粘附指示符在以上示例中指示没有粘附的参量ID X)和生成器1455(创建订阅的依赖性确定生成器)的引用。
带圈的5A-图5N表示生成器1460A-N的实例化。在该示例中,生成器1460A-N符合吸收订阅标准,由此为触发生成器。这样,带圈的6A-N指示生成器1450到生成器1460A-N的链接(在以上示例中,通过参量ID X)。带圈的7指示对于生成器图形的当前执行,吸收订阅依赖性已完成,且生成器1450之后被执行。
在本发明的一个实施方式中,吸收订阅标准可以是组成生成器关键字任意关键字中的一个或多个。因此,在生成器关键字包括类关键字、实例关键字以及方法关键字的本发明的实施方式中,订阅标准可以是一个或多个这样的关键字。例如,参考图11C,针对符合订阅标准的生成器对实例化的生成器的扫描是对生成器图形结构的第一个三列中的一个或多个进行扫描以确定实例化的生成器的关键字是否与吸收订阅标准的关键字匹配。虽然在本发明的一个实施方式中吸收订阅标准可以是组成生成器关键字的任意关键字中的一个或多个,但是在本发明的可替换实施方式中吸收订阅标准被限定为组成生成器关键字的关键字的子集。
粘附订阅
在粘附订阅生成器依赖性中,该依赖性使父生成器针对符合粘附订阅标准的每一个生成器而被实例化。参考图14C,带圈的1指示生成器1470被实例化(作为生成器1470(由于感兴趣生成器)的命名、由于通过排序依赖性(例如,由于排序依赖性或弱约束依赖性等)生成器1470(作为感兴趣生成器的子代)的自动发现,等等)。生成器1470是依赖性确定生成器,包括生成器依赖性声明代码,该代码指示粘附订阅、用于触发生成器的粘附订阅标准以及被创建的父生成器的粘附订阅特性。
生成器1470的执行导致填充订阅日志。参考图14A的第二行中的示例,订户的生成器关键字列1400、订阅类型列1405以及用于触发生成器的订阅标准列1410分别填充有生成器1470的生成器关键字、用于指示订阅是粘附类型的指示以及包含在生成器1470中用于触发生成器的粘附订阅标准。此外,父类列1430、父方法列1435、父实例列1437以及链接到触发生成器的父生成器的链接模式列1425填充有被创建的父生成器的粘附订阅特性——在本发明的该实施方式中,分别是被实例化的父生成器的类、被实例化的父生成器的方法、被实例化的父体生成器的实例(如果被留为空,则等于触发生成器的实例关键字)、链接模式(其在粘附订阅的情况下可以是:1)参量、字段或排序依赖性;2)参量ID(如果参量依赖性——父生成器的参量ID被链接到触发生成器(例如参量ID Y))。此外,依赖性确定生成器引用列1421填充有创建订阅的依赖性确定生成器引用(图14C中的生成器1470)。
参考图14C,带圈的2指示生成器1475被实例化(例如,由于生成器1475(作为感兴趣生成器)的命名、由于生成器1475(作为感兴趣生成器的子代)的自动发现,等等)。此外,可以确定生成器1475是否符合用于触发生成器的粘附订阅标准。带圈的3指示响应于该触发生成器1475,基于用于被创建的父生成器的粘附订阅标准来实例化生成器1480。参考图14C的示例性第二行,类关键字、方法关键字、实例关键字以及链接模式分别从父类列1430、父方法列1435、实例列1347以及父链接模式列1425中被访问。父生成器具有生成器关键字,该关键字包括被访问的类关键字、被访问的实例关键字(如果被留为空,则为触发生成器(图14C中的生成器1475)的实例关键字)以及被访问的方法关键字——在图14C的示例中,为生成器1480。带圈的4指示实例化的父生成器1480在生成器图形中通过被访问的连接模式被链接到子触发生成器1475(在以上示例中,链接模式类型=参量依赖性;链接模式参量ID=Y)。还有在参量依赖性的情况中,在带圈的4处,粘附指示符被设定成指示粘附——在用于实例化的父生成器1480所基于的方法的生成器的依赖性声明陈述的位置中的生成器依赖性对于生成器1480应当被忽略——这防止粘附订阅生成器依赖性创建的链接被后来的自动生成器图形生成操作重写。
在本发明的一个实施方式中,用于触发生成器的粘附订阅标准可以是组成生成器关键字的关键字的一个或多个(实例关键字除外)。因此,在生成器关键字包括类关键字、实例关键字以及方法关键字的实施方式中,用于触发的粘附订阅标准可以是类、实例以及方法关键字中的一个或多个。例如,参考图11C,针对符合用于触发生成器的粘附订阅标准的生成器,对实例化的生成器的扫描是对生成器图形结构的第一到第三列中的一个或多个进行扫描以确定实例化的生成器的关键字是否匹配用于触发生成器的粘附订阅标准的关键字。虽然在本发明的一个实施方式中,用于触发生成器的粘附订阅标准可以是组成生成器关键字的关键字的一个或多个,但是在本发明的可替换实施方式中,吸收订阅标准可以是进一步限定数量的组成生成器关键字的关键字。
图14D-图14E示出了根据本发明的一个实施方式的基于体依赖性确定生成器的父生成器的选择。虽然图14D-图14E参考参量依赖性被描述,但是本发明的实施方式可以支持使用排序和字段依赖性。
图14D示出了根据本发明的一个实施方式的基于粘附订阅创建的父依赖性确定生成器的父生成器的选择。像图14C,图14D显示粘附订阅生成器1470和触发生成器1475;但是,生成器1480不同,图14D显示通过粘附订阅生成器1470的粘附订阅创建的依赖性确定生成器1480。此外,图14D显示粘附订阅的连接模式是参量依赖性、参量ID=X,且粘附指示符=粘附。如果从生成器1475到依赖性确定生成器1480的虚曲线所示,依赖性确定生成器返回的DEP可以基于生成器1475本身的输出(参量ID=X的参量)。在图14D中,依赖性确定生成器1480在生成器1482上返回非订阅向上声明的生成器依赖性,具有指示参量依赖性和参量ID=Y的链接模式。虽然参量ID X和Y在图14D中用于显示它们可以不同,但应当理解它们可以相等。
图14E示出了根据本发明的一个实施方式的基于子依赖性确定生成器创建的父依赖性确定生成器的父生成器的选择,其中子依赖性确定生成器被排序依赖性链接。图14E在结构上与图14D类似;具体地,生成器1475、1480以及1482用生成器1486、1496以及1498来替换。但是,不同于在生成器1480和1475之间创建链接的粘附订阅生成器1470,生成器1486在依赖性确定生成器1494上具有排序依赖性(例如,通过向上依赖性或弱约束依赖性创建),其通过非订阅向上声明的依赖性来创建依赖性确定生成器1496。
值得注意粘附订阅和非订阅向上声明的依赖性(例如,通过向上依赖性和/或弱约束依赖性而被创建)导致自下而上建立生成器图形(而不是之前所述的自上而下建立)。此外,该自下而上建立不限于单个层的建立,而是刻意多个层(例如,如果由于粘附订阅或非订阅向上声明的依赖性,父生成器被实例化,相同的父生成器还可以是用于粘附订阅的触发生成器或可以包括非订阅向上声明的依赖性且使另一个父生成器被实例化,等)。在这种意义上,粘附订阅和非订阅向上声明的依赖性使生成器图形的建立倒置。
虽然在本发明的一些实施方式中,由粘附订阅特性标识的父生成器是标准生成器(见图14C),但是可替换实施方式可以被实施为支持其他类型的生成器的标识。例如,在允许粘附订阅特性标识依赖性确定生成器的本发明的实施方式中(见图14D),这样的依赖性确定生成器可以访问触发生成器的输出,且可以基于该输出触发作为需要粘在子体上的父生成器的特定生成器的创建(该父生成器可以已经存在或不存在;如果已经存在,则被简单链接且子生成器被添加到其参量;如果不存在,则其被创建)。在依赖性确定生成器返回常量的情况下生成器模拟吸收订阅。依赖性确定生成器返回生成器(其实例关键字对于每一个触发生成器是唯一的)(例如,返回其实例关键字是触发生成器的生成器关键字的生成器)的情况造成于每一个子生成器有单独的父生成器并且被称为纯粘附订阅。依赖性确定生成器返回对每一个触发生成器既不是常量也不是唯一的实例关键字的情况可以混合纯粘附订阅和吸收订阅的行为且被称为非纯粘附订阅。
示例性优点
如之前所述,在本发明的一个实施方式中,生成器依赖性针对方法被声明作为规定使用合适实例而不使用手动调用排序代码的方法调用排序的方式(其中合适的实例包括作为参量使用的实例、被实例方法使用的实例以及被类方法使用的元类实例);有效地,生成一些或全部手动调用排序代码的的工作被以下替代:1)编写生成器依赖性声明的应用程序员完成的工作;以及2)发现并建立生成器图形并执行该生成器图形的生成器的运行时完成的工作。尽管编写运行时的工作量相对较大,但是其只需要编写一次就可以用于执行为运行时编写的面向对应应用;相比之下,对于一般的应用,编写生成器依赖性声明的工作量与编写手动调用排序代码相比相对较低。
非动态生成器依赖性提供用于规定无条件方法调用排序代码的方式,从而避免对编写无条件手动调用排序代码的需要。偶然生成器依赖性提供规定有条件处理的方式,从而避免对编写有条件手动调用排序代码的需要。支持生成器依赖性允许集合被返回的生成器,其提供规定在集合作为参数被传递之前的集合的填充,从而不需要编写手动调用排序代码中的多个调用以在该集合被作为参数传递之前填充该集合。支持订阅提供这样的环境,在该环境中程序员不需要为每一种类型的被收听(listen)的对象编写特定的收听代码(例如,在面向生成器图形编程的电子数据表中,吸收订阅可以用于通过使该吸收订阅标准标识在范围内的单元来计算一定范围的单元的平均值(每一个单元是一个生成器),并在每一次新生成器被添加到吸收订阅时重新计算平均值;在面向生成器图形编程的电子数据表中,粘附订阅可以通过使粘附订阅标准标识保持当前值内容的单元和标识执行当前值转换的被实例化的粘附生成器的粘附订阅特性而用作当前值转换器(粘附订阅创建的生成器(保持转换后的量)之后可以用于其他单元中的显示))。
操作
新实例命令
图15是根据本发明的一个实施方式的用于实例化新实例的流程图。如之前参考图10所述,图10中新类模块1095可以被实施为新实例模块1098的一部分。图15的流程图假定该实施方式并被新实例模块1098执行;图15的流程图中表示新类模块1095的部分被显示为虚线块1580,其包括块1540和1550。
响应于新实例命令(块1510),控制传递到块1520。在块1520中,确定是否已经存在实例。如果不存在,则控制传递到块1530,否则,实例不需要被实例化且控制传递到1570,在块1570中,流程图结束。在支持实例关键字的一个实施方式中,通过访问用于被提供作为新实例命令的一部分的实例关键字(和类关键字,如果实例关键字在类中不需要是唯一的)的图10中的实例跟踪结构1065来执行块1520。
在块1530中,确定实例的类定义是否已经被装载。如果没有,则控制传递到块1540;否则,控制传递到块1560。在支持类关键字的一个实施方式中,通过访问用于被提供作为新实例命令的类关键字的图10中的类跟踪结构1092来执行块1540。
在块1540,类被装载且控制传递到块1550。在块1550,类定义根据类关键字被存储并自省,包括任意生成器依赖性声明陈述(根据类中的方法关键字被存储,见图11D)。控制从块1550传递到块1560。参考图10,在块1540和1550执行以下:1)类从类定义被装载,该类定义将业务逻辑1010包括到类1054中(该装载使类的方法和生成器依赖性声明被存储在方法和生成器依赖性声明1056中);2)类可以被添加到类跟踪结构1092;以及3)方法可以被添加到方法跟踪结构1058。此外,方法的输出类可以被装载。
在块1560,类的实例可以被实例化并根据实例关键字被存储。参考图10,该实例可以被实例化成实例1052;且该实例可以被添加到实例跟踪结构1065。控制从块1550传递到块1570,在块1570中流程图结束。在使用对象关系映射技术的本发明的一些实施方式中,作为块1560的一部分,数据可以从外部数据源被装载以填充实例的字段。
在本发明的一些实施方式中,类和实例可以在具有面向生成器图形编程支持的运行时不知道的情况下被装载/实例化(例如,在图9A中,如果运行时915装载/实例化而运行时910不知道)。在这种情况下,本发明的实施方式还支持实例关键字,该实例关键字是类的实例的实例关键字(保持两个元素:实例关键字性质,指示关键字标识符是否是对实例或对另一个对象(例如串)的引用;和关键字标识符,可以是实例的引用或另一个对象(例如串)),块1520和1530询问实例和类是否在具有面向生成器图形编程支持的运行时知道的情况下被实例化/装载。在具有面向生成器图形编程支持的运行时不知道已经装载的类的情况下,类可以不被装载,但是类可以被添加到类跟踪结构1092且方法可以被添加到方法跟踪结构1058。在在具有面向生成器图形编程支持的运行时不知道已经实例化的实例的情况下,实例可以不被实例化,但是实例可以被添加到实例跟踪结构1065。
新生成器和不覆盖命令
图16A是根据本发明的一个实施方式的实例化新生成器和不覆盖生成器的流程图。参考图10,图16A的流被自动生成器图形执行模块1040和覆盖生成器模块1045(或,参考图10的可替换实施方式所述的处理覆盖和不覆盖的模块)执行。
响应于新生成器命令(块1600),控制传递到块1605。在本发明的一个实施方式中,新生成器命令可以响应于各种情况来执行。下面的表2标识根据本发明的一个实施方式的各种情况和传递的参数。
表2
情况 | 调用器生成器 | 调用的生成器(如果不存在就被创建) | 调用类型 | 链接模式 | 依赖性确定生成器引用 |
感兴趣生成器 | N/A | 被创建的感兴趣生成器 | 感兴趣的 | N/A | N/A |
非订阅向下声明 | 父 | 子 | 非订阅向下声明 | 调用器父生成器链接模式 | 提供依赖性的依赖性确定生成器 |
粘附订阅 | 子 | 父(来自被创建的父生成器的粘附订阅特性的父类、方法和实例关键字;如果实例关键字为空,则为已有的子调用器生成器的实例关键字) | 粘附 | 来自被创建的父生成器的粘附订阅特性的调用的父生成器链接模式 | 提供依赖性的依赖性确定生成器 |
覆盖 | N/A | 被覆盖的生成器 | 被覆盖 | N/A | N/A |
非订阅向上声明 | 子 | 父 | 非订阅向上声明 | 调用的父生成器链接模式 | 提供依赖性的依赖性确定生成器 |
在块1065中,确定生成器是否已经存在。如果不存在,则控制传递到块1610;否则,控制传递到1670。通过访问作为新生成器命令的一部分的被标识的类、实例和方法(例如,通过关键字和/或引用)来执行块1605。在支持生成器关键字的一个实施方式中,通过访问用于被提供作为新生成器命令的生成器关键字(表2的调用的生成器列中的生成器关键字)的图10中生成器图形结构1060来执行块1605。
在块1610中,利用新实例命令调用新实例模块,并且控制传递到块1615。在本发明的一个实施方式中,通过使用来自表2的调用的生成器列中的生成器关键字的实例关键字来调用图15的流程图从而执行块1610。
在块1615中,生成器的实例的类定义被访问且控制传递到块1620。参考图10,通过使用来自表2的调用的生成器列中的生成器关键字的类关键字来执行块1615,从而根据类跟踪结构1092访问类1054中合适的一个。
在块1620,生成器的方法和生成器依赖性声明陈述被访问且控制传递到块1623。参考图10,通过使用来自表2的调用的生成器列中的生成器关键字的方法关键字来执行块1620,从而访问来自位于块1615中的类的方法和生成器依赖性声明1056中合适的一个。
在块1623,确定生成器执行模式且控制传递到块1625。下面论述执行块1623的一个示例性方式的详情。在一些实施方式中,默认执行模式被定义为在节点层的注释。终端用户或客户端节点通过基于生成器的可配置决定结构(例如,图10中基于生成器的可配置决定结构1049)在类、方法、实例或以上任意组合的基础上可以在运行时覆盖行为。此外,运行时设定可以被提供以依据计算环境使运行时通过(单个机器上的一些处理器的可用性、网格可用性、处理器的装载,等)使执行在订阅执行模式中被实施从而忽略这些编程注释或用户定义的配置。
在块1625,生成器被添加到生成器图形且控制传递到块1630。参考图11C中的本发明的实施方式,第一个三列被填充。
在块1630,对于每一个注册的订阅,订阅过滤标准被处理以确定生成器是否匹配。参考图14A中的本发明的实施方式,当订阅被添加到订阅日志时该订阅被认为已注册。注册订阅的示例性操作在后面描述。块1630是可选优化,其允许扫描实例化的生成器的工作在生成器图形生成和生成器图形执行之间被划分。这样,本发明的可替换实施方式可以不执行块1630。
在块1635,如果由于依赖性生成器被调用,则生成器被链接到生成器图形。控制从块1635传递到块1640。执行块1635的方式取决于导致新生成器命令被执行的情况。例如,如果所述情况是感兴趣生成器或被覆盖的生成器,则由于依赖性生成器不被调用并且不做任何事。相反,如果情况是直接的,则由于直接依赖性而调用生成器;且参考图11C中的本发明的实施方式,执行以下:1)调用的子生成器的父生成器引用列1150(表2的调用的生成器列)被填充有父调用器生成器的行(表2的调用器生成器列);2)父调用器生成器的行的子生成器引用列1160(表2的调用器生成器列)被填充有调用的子生成器的行的引用(表2的调用的生成器列),且根据表2的链接模式列链接模式被设定。
相反,如果情况是粘附订阅,则由于触发生成器被标识而调用生成器;且参考图11C中的本发明的实施方式,执行以下:1)调用器子生成器的父生成器引用列1150(表2的调用器生成器列)被填充有父调用的生成器的行的引用(表2的调用的生成器列),且根据表2的链接模式列链接模式被设定以及合适的参量ID标识符被设定成指示粘附;以及2)父调用的生成器的行的子生成器引用列1160(表2的调用的生成器列)被填充有调用器子生成器的行的引用(表2的调用器生成器列)。
在块1640中,生成器被标记为未执行且控制传递到块1645。参考图11C中本发明的实施方式,合适行的增量执行标记列1180为填充有未执行的指示。
在块1645中,确定生成器是否具有任何依赖性且没有被覆盖。如果是,则控制传递到块1650;否则,控制传递到块1665。通过检查在块1620中访问的生成器依赖性声明以及表2的调用类型列来执行块1645。
在块1650中,对于现在被解析的生成器依赖性声明中的每一个依赖性,确定生成器的数量且为每一个生成器调用新生成器命令。控制从块1650传递到块1655。本发明的不同实施方式在不同时间确定不同类型的依赖性;在本发明的一个示例性实施方式中执行块1650的方式将在后面描述。
在块1655中,如果生成器的所有相关生成器存在并已经被执行,则该生成器被添加到执行开始日志。控制从块1655传递到块1660。对于作为该流程的当前重复的一部分而实例化的给定生成器,块1655被执行,然后用于相关的生成器的该流程的其他重复的调用将返回生成器的执行状态(见块1660)(例如,参考图11C的本发明的实施方式,来自合适行的增量执行标记列1180的状态)。如果所有依赖性生成器存在且所有依赖性生成器的执行状态被执行,则当前重复的生成器被添加到执行开始日志。
在块1660中,生成器的执行状态作为参数被返回。
在块1665中,生成器被添加到执行开始日志且控制传递到块1660。
在块1670中,与块1635类似,如果由于生成器被调用,则生成器被链接到生成器图形。控制从块1670传递到块1675。出于各种原因,可以达到块1670。例如,由于响应于生成器覆盖命令之前生成器被实例化但没有被链接到生成器图形,则可以达到块1670。作为另一个示例,由于生成器已经是生成器图形的一部分且被添加到另一个生成器图形(例如,响应于是感兴趣生成器、感兴趣生成器的子代等而之前被实例化),可以达到块1670。
在块1675中,确定新生成器流程是否由于覆盖、粘附订阅依赖性或非订阅向上声明的依赖性而被调用。如果是,则控制传递到块1680;否则,控制传递到块1660。通过检查表2的调用类型列来了解这是否是对于被覆盖的生成器、粘附订阅依赖性或非订阅向上声明的依赖性的调用,从而执行块1675。
在块1680中,与块1640类似,生成器被标记为未执行且控制传递到块1665。出于各种原因,可以达到块1680。
响应于生成器不覆盖命令(块1690),控制传递到块1695。在块1695,生成器被标记为没有被覆盖且控制传递到块1640。参考图11C的本发明的实施方式,生成器的行的生成器输出缓存和覆盖生成器输出指示列1170被访问且被改变以指示该生成器不再被覆盖。继续该流程,块1640可以通向块1645,且如果生成器具有任何依赖性,则块1640可以通向块1650,块1650使生成器下面的生成器图形被发现且如果还没有则被建立。如果该生成器下面的生成器图形已经被发现并建立,则新生成器命令的调用可以使流程从1600到1605,到1670等;此外,在块1660中的生成器下的图形的生成器的执行状态的返回将确定生成器是否被添加到块1655中的执行开始日志。但是,如果生成器下的生成器图形没有被发现并建立,则新生成器命令的调用使生成器在流程从1600到1605,到1610等的过程中被发现并建立。
图16B是根据本发明的一个实施方式的图16A的块1623的流程图。因此,控制从块1620流向块1623中的块16231。在块16231中,运行时执行设定覆盖被检查。然后在块16233确定运行时执行设定覆盖是否被激活。如果其被设定,则在块16234根据运行时执行设定而设定执行模式。否则,在块16235中来自终端用户的执行模式选择的基于生成器的可配置决定结构被检查且控制传递到块16236。在块16236,确定终端用户是否做出任何执行模式选择。如果做出,则在块16237根据基于生成器的可配置决定结构中的设定而设定执行模式。否则,在块16238,生成器的方法定义被检查用于被定义为在节点层的注释的执行模式,且根据该注释而设定执行模式。从块16238或块16237,控制传递到块16239以结束块1623中的进程。
图17是根据本发明的一个实施方式的图16的块1650的流程图。因此,在块1650中,控制从块1645流向块1700。在块1700中,针对生成器的生成器依赖性声明(每一个用于每个参量依赖性、字段依赖性、排序依赖性、向上依赖性以及弱约束依赖性)中的每一个依赖性,下面的块1705-1745被执行。参考图10和11D,方法跟踪结构被访问以确定关于生成器依赖性的信息。还应当理解块1715、1725、1730、1740、1745以及1750是在执行生成器图形之前被执行时的优化。
在块1705中,确定依赖性是否是由于粘附依赖性而已经被链接的参量依赖性。如果是,则控制传递到块1710,其中针对该依赖性,流程结束;否则控制传递到块1715。关于图11C中所示的本发明的实施方式,粘附参量标识符被检查以确定该依赖性的参量ID是否属于粘附订阅参量依赖性或向上声明的参量依赖性。
在块1715中,确定依赖性是否是偶然依赖性。如果是,则控制传递到块1720;否则,控制传递到块1725。通过检查依赖性锁标识的子生成器的生成器依赖性声明来确定其是否为空(子生成器是无关生成器)从而执行块1715。参考图13A-图13J,这对具有带虚线圈的数字的生成器可以为真(例如,在图13D中,生成器CU::IV::DELTA),但是对其他生成器为假(例如,在图13D中,生成器CU::IY::BETA)。因此,参考图13D,块1715由带圈的1、4、和8来表示。块1715和从该块1715经过块1725-1750的流程是一种优化,两者都避免添加/链接具有带虚线圈的数字的生成器到生成器图形,也避免在自动生成器图形生成和生成器图形执行之间划分执行生成器和处理订阅的工作。
在块1720中,依赖性确定方法的新生成器命令被调用且流程结束。例如,参考图13D,块1720引起带圈的5、6和7所表示的。
在块1725中,依赖性确定生成器被执行且控制传递到块1730。例如,参考图13D,块1725由带圈的11(从而,之前所述实施方式示出的图17的流程,其中图13D的带圈的9和10没有被执行)表示。
在块1730中,确定依赖性是否是直接(非订阅)依赖性。如果是,则控制传递到1750;否则控制传递到块1740。换句话说,在块1725中,依赖性确定生成器的方法中的生成器依赖性确定代码被执行,所述代码是父生成器的生成器依赖性声明中的一部分。执行该生成器依赖性声明代码(该代码可以标识依赖性是否是订阅依赖性),可以确定父生成器的生成器依赖性类型。参考图13D中的示例,带圈的11可以使图17的流程从块1730传递到块1750。
在块1750中,确定由块1725中的依赖性确定生成器的执行返回的生成器的数量,且为每一个生成器调用新生成器命令。例如,参考图13D,块1750引起带圈的12和13以及带圈的C和D。
参考图14B的吸收订阅示例,块1725表示带圈的4;其使流程经过块1730传递到块1740。
在块1740中,订阅被添加到订阅日志,且如果该订阅是吸收的,则被标记为未完成。控制从块1740传递到块1745。参考图14A中所示的本发明的实施方式,订阅日志被填充有之前所述的订阅。
在块1745中,所有被实例化的生成器被扫描以了解它们是否匹配订阅的标准(从而是触发生成器),且任意匹配被处理。
图18是根据本发明的一个实施方式的图17的块1745的流程图。因此,控制从块1740流向块1745中的块1800。在块1800中,对于每一个被实例化的生成器,以下的块1810-1830被执行。
在块1810中,确定生成器是否符合订阅的标准。如果符合,则控制传递到块1815;否则,控制传递到块1830,其中针对当前被处理的生成器,流程结束。参考图11C和14A中所示的本发明的实施方式,生成器图形被访问以确定它们是否包括符合订阅标准的生成器。
处理匹配的生成器的方式依据被处理的订阅的类型。参考块1815,如果订阅是吸收类型,则控制传递到块1825;否则,控制传递到块1820。块1815可以响应于表2的调用类型而被执行。
在块1825中,匹配的生成器被添加到订阅日志且具有吸收订阅的生成器被链接到匹配的生成器。控制从块1825传递到块1830。参考图11C和14A-图14B中所示的本发明的实施方式,以下被执行:1)来自触发生成器的订阅标准列1410的订阅标准在块1810中被使用且匹配的生成器被定位(生成器1460A-N中的一个);2)匹配的生成器被添加到订阅的行处的匹配的生成器列1415;以及3)具有吸收订阅的生成器(例如生成器1450)被链接到图11C的生成器图形结构中的匹配的生成器(例如,生成器1460A-N中的一个)。
在块1820中,新生成器命令被调用,用于被创建的父生成器。控制从块1820传递到块1830,在块1830中,对于在块1800中选择的当前生成器流程图结束。参考图14A和14C中所示的本发明的实施方式,以下被执行:1)来自触发生成器的订阅标准列1410的订阅标准在块1810中被使用且匹配的生成器被定位(例如,生成器1475);以及2)新生成器命令被调用,具有按以下设定的表2的参数:a)调用类型是粘附;b)调用器生成器是调用器子生成器(例如生成器1475)的生成器关键字;c)调用的生成器是被创建的调用的父生成器(例如生成器1480)的生成器关键字,使用来自被创建的父生成器的粘附订阅标准的父类和方法关键字(图14A,列1425和1430)以及调用器子生成器的实例关键字来形成所述生成器关键字;以及d)调用的父生成器的链接模式,使用来自在合适行的父参量ID列1425中的参量ID来形成链接模式。
图19是根据本发明的一个实施方式的图16的块1630的流程图。因此,控制从块1625流向块1630中的块1900。图19与图18非常类似。具体地,图19中的块1910、1915、1920以及1930与块1810、1815、1820以及1830相同;而块1900和1925与块1800和1825不同。这样,这里只描述不同之处。
块1900指示为每一个注册的订阅所执行的流程,而块1800指示为每一个实例化的生成器所执行的流程。因此,图18的流程侧重在单个订阅且扫描所有生成器,而图19的流程侧重在单个生成器且扫描所有订阅。
块1925与块1825相同,不同在于吸收订阅被标记为未完成。参考图14A中所示的本发明的实施方式,在合适行的完成的列1420被更新以指示未完成。
图20是根据本发明的一个实施方式的图16中的块1635和1670的流程图。因此,控制从块1605和块1630流向块1635和1670中的块2005。在块2005中,确定图16的流程图的重复是否由于依赖性被调用(例如,从之前重复的块1630(块1920)或1650(块1720、1750或1745/1820))。如果不是,则控制根据流程进入的地方(从块1630或1605)而传递到块1640或1675。
在块2010,确定流程是否由于粘附订阅或非订阅向上声明情况而被调用。如果不是,则控制传递到块2015;否则,控制传递到块2020。通过检查表2的调用类型参数(即,调用类型是粘附订阅还是订阅向上声明)来执行块2010。参考图18和19中所示的本发明的实施方式,是否新生成器命令从块1820或1920被调用。
在块2020,当前父生成器被链接到调用器子生成器。参考图11C和14C中所示的本发明的实施方式,以下被执行:1)使用来自表2的链接模式列的参数所标识的链接模式,由来自表2的调用的生成器列的参数所标识的调用的父生成器(例如生成器1480)在图11C的生成器图形结构中被链接到由来自表2的调用器生成器列的参数所标识的调用器子生成器(例如,生成器1475)。
在块2015中,调用器父生成器被链接到当前调用的子生成器。参考图11C中所示的本发明的实施方式,由来自表2的调用器生成器列的参数所标识的调用器父生成器在图11C的生成器图形结构中被链接到由来自表2的调用的生成器列的参数所标识的调用的子生成器。从块2015和2020,控制依据流程进入的地方(从块1605或1630)而传递到块1640或1675。
图21A是根据本发明的一个实施方式的覆盖生成器的流程图。参考图10,由覆盖生成器模块1045执行图21A的流程(或,如参考图10的可替换实施方式所述的处理覆盖和不覆盖的模块)。
响应于覆盖生成器命令(块2110),控制传递到块2120。在块2120,对于由覆盖生成器命令所标识的每一个生成器,调用新生成器命令,且控制传递到块2130。在本发明的一个实施方式中,块2120在被覆盖的生成器还没有被实例化情况下被执行以及将该生成器标记为未执行的(块1640或1680)并将其记录在执行开始日志上(块1665)。不允许覆盖还没有被实例化的生成器的本发明的可替换实施方式不会执行块2120。
在块2130中,在生成器输出缓存中(以及如果输出是字段,则在实例中的)的输出被设定且该生成器被标记为被覆盖。
图21B是根据本发明的一个实施方式的覆盖生成器执行模式的流程图。参考图10,由并行化模块1076执行图21B的流程(或如参考图10的可替换实施方式所述的处理并行化的模块)。
响应于覆盖执行模式命令(块2150),控制传递到块2155。在块2155中,生成器执行模式设定在生成器图形结构1060中被覆盖。
图21C是根据本发明的一个实施方式的用于覆盖生成器执行模式的流程图。参考图10,由并行化模块1076执行图21C的流程(或如参考图10的可替换实施方式所述的处理并行化的模块)。
响应于运行时执行模式设定覆盖命令(块2160),控制传递到块2165。在块2165中,生成器执行模式设定在运行时设定结构1048中被全局上覆盖。
图21D是根据本发明的一个实施方式的覆盖生成器执行模式的流程图。参考图10,由并行化模块1076执行图21D的流程(或如参考图10的可替换实施方式所述的处理并行化的模块)。
响应于可配置的执行模式决定结构覆盖生成器命令(块2170),控制传递到块2175。在块2175中,生成器执行模式设定在类、方法、实例或以上任意组合的基础上在基于生成器的可配置决定结构中被全局上覆盖。
全局执行命令
图22A是根据本发明的一个实施方式的当前生成器图形的执行的流程图的一部分;而图22B是根据本发明的一个实施方式的当前生成器图形的执行的流程图的另一部分。参考图10,由生成器图形执行模块1070来执行图22的流程。
响应于全局执行命令,块2200显示一组候选生成器基于执行开始日志上的生成器被选择以被执行,且控制传递到块2205。在本发明的一个实施方式中,被覆盖的生成器被标记为未执行且该生成器的执行返回它们的被覆盖结果(而不是使它们的方法被执行),当前组的候选生成器是执行开始日志上的生成器。虽然本发明的一个实施方式在上面被描述,其中被覆盖的生成器被标记为未执行且它们的执行返回其被覆盖的结果(而不是使它们的方法被执行),但是可替换实施方式可以以不同的方式操作(例如,标记被覆盖的生成器为已执行且当选择当前组的候选生成器时,执行开始日志的无关生成器和执行开始日志上的被覆盖的生成器的父体被选择)。
在块2205中,准备用于执行的生成器的子集从一组候选生成器中被选择且控制传递到块2207。执行块2205的示例性方式在后面描述。
在块2207中,如果并行化被激活,则并行化执行当前组的就绪生成器中的生成器。执行块2207的示例性方式在后面描述。之后控制从块2207传递到块2208。
在块2208中,任务从支持的执行模式的结果任务队列中的一个被读取并被移除。在当前示例中,结果任务队列包括MP_RESULT_TASK_QUEUE、MT_RESULT_TASK_QUEUE和LOCAL_RESULT_TASK_QUEUE。控制从块2208传递到块2209。
在块2209中,运行时确定生成器的后置处理是否必须跳过。如果基准测试被激活,则生成器可以被本地执行以及多进程处理。因此,生成器的后置处理在本地执行后被跳过。基准测试的更具体的详情在后面论述。回过来参考图22A,如果后置处理必须被跳过,则控制传递到图22B中的块2248。否则,控制传递到块2210。
在块2210中,当前组的就绪生成器中的生成器按类型被分类——标准生成器进入块2220而依赖性确定生成器进入块2235。在本发明的一个实施方式中,通过检查生成器的返回类来执行块2210。参考图10和11D,方法跟踪结构被访问以确定生成器的输出类是否是DEP,从而该生成器是否是依赖性确定生成器。
在块2220中,对于这些父体(如果有的话)在这些执行的标准生成器的任意一个上具有吸收订阅,该订阅被标记为未完成。参考图14A,完成的列1420的合适行被设定成指示未完成。
在块2235中,对于任意发现的生成器,新生成器命令被执行,且对于任意订阅,订阅记录和处理被执行,然后控制传递到2240。块2235的新生成器命令的一部分以与块1750相似的方式被执行,而订阅记录和处理以与块1740和1745相似的方式被执行。
在块2240中,添加到一组候选生成器,其新添加到执行开始日志。控制从块2240传递到块2245。块2240以与块2200相似的方式被执行,不同的只是作为块2235的结果的新添加到执行开始日志的生成器被添加到一组候选生成器。
在块2245中,被执行的生成器被标记为已执行,生成器输出缓存(和实例缓存)在必要时被更新,生成器度量(如果获得)在图10的生成器图形结构1060中被更新,被执行的生成器的任意父生成器被添加到当前组的候选生成器,且被执行的生成器从当前组的候选和就绪生成器中被移除。在一些实施方式中,可以通过读取对应的任务度量和对应的作业引用来更新生成器度量。使用作业引用,作业度量可以从作业度量映射表中被读取。可替换地,如果没有使用作业度量映射表,则可以通过读取任务度量和作业度量来更新生成器度量。任务度量、作业度量以及作业度量映射表的具体详情在下面论述。控制从块2245传递到块2248。
在块2248,检查结果任务队列以确定所有的队列是否为空。如果至少一个结果任务队列不为空,则控制传回到块2208以继续处理不为空的结果任务队列中的结果。否则,如果所有的结果任务队列为空,则控制传递到块2250。
在块2250,确定一组就绪生成器是否为空,如果不为空,则控制传递到块2205;否则,控制传递到块2255。
在块2255,确定所有的订阅是否已经完成。如果是,则控制传递到块2265,在块2265流程图结束;否则,控制传递到块2260。参考图14A中的本发明的实施方式,为任何未完成的吸收订阅来扫描订阅类型列1405和完成的列1420。
在块2260,未完成的吸收订阅被处理且控制传回到块2205。执行块2260的示例性方式在后面描述。
图23是根据本发明的一个实施方式的图22的块2205的流程图。因此控制从块2200流向块2205中的块2305。在块2305中,对于一组候选生成器的的每一个生成器,以下的块2310-2325被执行。
在块2310中,确定生成器是否具有任意未完成的吸收订阅依赖性。如果有,则控制传递到块2325;否则,控制传递到块2315。参考图14A的实施方式,为匹配到当前选择的生成器和吸收订阅类型,扫描订户的生成器关键字列1400和订阅类型列1405;且如果找到匹配,则在合适的行检查完成的列1420从而确定吸收订阅依赖性的状态。
在块2315中,确定当前选择的生成器所依赖的生成器是否被执行。如果没有,则控制传递到块2315;否则,控制传递到块2320。参考图11C中所示的本发明的实施方式,检查用于子依赖性的行的增量执行标记列1180以确定当前选择的生成器的子代的执行状态。
在块2320中,当前选择的候选生成器被添加到当前组的就绪生成器,且控制传递到块2325。
在块2325中,对于在块2305中选择的当前生成器的流程结束。
图24是根据本发明的一个实施方式的图22B的块2260的流程图。从而,控制从块2255流向块2260中的块2505。在块2505中,对于每一个具有未完成的吸收订阅依赖性的生成器,以下块2510-2525被执行。
在块2510中,确定所有匹配的生成器是否已被执行。如果是,则控制传递到块2515;否则,控制传递到块2525。参考图11C和14A的实施方式,在合适的行的匹配的生成器列1415被访问以确定匹配的生成器,且为每一个匹配的生成器检查在合适的行的增量执行列1180。
在块2515中,吸收订阅被标记为完成且控制传递到块2520。参考图14A的实施方式,在合适的行的完成的列1420被设定成指示完成。
在块2520中,在块2505中选择的生成器被添加到当前组的候选生成器且控制传递到块2525。
在块2525中,用于在块2505中的选择的生成器的流程结束。
图25和26是根据本发明的一个实施方式的图22的块2207的流程图。因此,控制从块2205流向图25中的块2610。在块2610中,用于多进程、多线程以及本地执行的各种任务队列和用于多进程的作业的实例化被执行。执行块2610的示例性方式在后面描述。控制从块2610传递到块2620。
在块2620中,一组就绪生成器被扫描以逐个处理该组中的生成器。控制从块2620传递到块2622。
在块2622中,生成器的执行模式从例如图11C的图形结构的生成器图形结构中读取。然后控制传递到块2625。
在块2625中,涉及生成器和生成器的输出的任务被创建。控制从块2625传递到块2630。
在块2630中,确定生成器应当在哪种执行模式下被执行。在一些实施方式中,支持三种执行模式,即多进程、多线程以及本地执行。如果执行模式被确定为本地执行,则控制传递到块2632。如果执行模式被确定为多线程,则控制传递到块2634。如果执行模式被确定为多进程,则控制传递到块2635。
在块2632中,生成器的任务被推入到用于本地执行的执行任务队列中,即LOCAL_EXECUTION_TASK_QUEUE。然后控制传递到块2640。
在块2634中,生成器的任务被推入到用于多线程的执行任务队列中,即MT_EXECUTION_TASK_QUEUE。然后控制传递到块2640。
在块2635中,生成器的任务被推入到用于多进程的执行任务队列中,即MP_EXECUTION_TASK_QUEUE。然后控制传递到块2636。在块2636中,确定是否请求远程执行和本地执行之间的基准测试。如果没有请求,则控制传递到块2640。但是,如果请求了基准测试,则控制传递到块2637。
在块2637中,被推入到MP_EXECUTION_TASK_QUEUE的任务被标记以跳过后置执行处理。然后涉及生成器和生成器的输出的新的任务被创建并也被推入到块2638中的用于本地执行的执行任务队列,即LOCAL_EXECUTION_TASK_QUEUE。然后控制传递到块2639以在被添加到MP_EXECUTION_TASK_QUEUE的任务中存储被添加到LOCAL_EXECUTION_TASK_QUEUE的任务的引用以用于之后的匹配。在块2639后,控制传递到块2640。
在块2640中,确定一组就绪生成器中的所有生成器是否已经被扫描。如果没有,则控制传回到块2620以继续扫描一组就绪生成器中的生成器。否则,控制传递到图26B中的块2642。
在块2642中,运行时确定MT_EXECUTION_TASK_QUEUE是否为空,如果为空,则控制传递到块2660。否则,控制传递到块2644。
在块2644中,运行时启动线程池机制(如果还没有启动)。控制从块2644传递到块2650。
在块2650中,单独的线程被实例化以执行MT_EXECUTION_TASK_QUEUE中的任务上的多线程。执行块2650的示例性方式在后面描述。控制从块2650传递到块2660。
在块2660中,多进程和本地执行被实施以执行MP_EXECUTION_TASK_QUEUE和LOCAL_EXECUTION_TASK_QUEUE中的任务。执行块2660的示例性方式在后面描述。控制从块2660传递到块2670。
在块2670中,确定MT_RESULT_TASK_QUEUE的当前大小是否等于MT_EXECUTION_TASK_QUEUE的初始大小。如果不是,则控制保持在块2670中,这是因为在MT_EXECUTION_TASK_QUEUE的所有任务上多线程还没有被完成。否则,控制从块2670传递到块2690且过程在块2207中结束。虽然在上述的示例性流程中多线程、多进程以及本地执行按顺序被执行,但是应当理解在一些可替换实施方式中可以并行执行多线程、多进程和本地执行的任意组合。
图27A和27B是根据本发明的一个实施方式的图26的块2610的流程图。因此,控制从块2205流向图27A的块2710。在块2710中,确定MT_RESULT_TASK_QUEUE是否被实例化。如果是,则块2715中MT_RESULT_TASK_QUEUE在被清除。否则,在块2713中MT_RESULT_TASK_QUEUE被实例化。然后控制从块2713或块2715传递到块2720。
在块2720中,确定MT_EXECUTION_TASK_QUEUE是否被实例化。如果是,则在块2725中MT_EXECUTION_TASK_QUEUE被清除。否则,在块2723中MT_EXECUTION_TASK_QUEUE被实例化。然后控制从块2723或2725传递到块2730。
在块2730中,确定MP_RESULT_TASK_QUEUE是否被实例化。如果是,则在块2735中MP_RESULT_TASK_QUEUE被清除。否则,在块2733中MP_RESULT_TASK_QUEUE被实例化。然后控制从块2733或2735传递到块2740。
在块2740中,确定MP_EXECUTION_TASK_QUEUE是否被实例化。如果是,则在块2745中MP_EXECUTION_TASK_QUEUE被清除。否则,在块2743中MP_EXECUTION_TASK_QUEUE被实例化。然后控制从块2743或块2745传递到图27B中的块2750。
在块2750中,确定LOCAL_RESULT_TASK_QUEUE是否被实例化。如果是,则在块2755中LOCAL_RESULT_TASK_QUEUE被清除。否则,在块2753中LOCAL_RESULT_TASK_QUEUE被实例化。然后控制从块2753或块2755传递到块2760。
在块2760中,确定LOCAL_EXECUTION_TASK_QUEUE是否被实例化。如果是,则在块2765中LOCAL_EXECUTION_TASK_QUEUE被清除。否则在块2763中LOCAL_EXECUTION_TASK_QUEUE被实例化。然后控制从块2763或块2765传递到块2620。
图28A是根据本发明的一个实施方式的执行多线程的过程的流程图。如上所述,单独的线程在图26的块2650中被实例化以执行多线程。
在块2820中,确定MT_MXECUTION_TASK_QUEUE是否为空。如果MT_EXECUTION_TASK_QUEUE为空,也就是MT_EXECUTION_TASK_QUEUE中所有的任务已经被放入(seed to)对应的执行线程,则过程结束。否则,即还有至少一个任务要被放入执行线程,则控制传递到块2825以确定在池中是否存在可用的任意线程。如果在池中没有可用线程,则控制保持在块2825直到存在可用线程。当存在可用线程时,控制传递到块2830。
在块2830中,任务从MT_EXECUTION_TASK_QUEUE中移除且该移除的任务被装入到可用线程。然后控制传回到块2820以重复块2820、2825以及2830,直到所有的任务从MT_EXECUTION_TASK_QUEUE移除。注意,块2820、2825以及2830中的进程可以被实例化的线程执行以避免阻碍剩余的流程。
图28B是示出了在线程内的任务放入执行和可选的度量获取的流程图。如果请求植入,则运行时开始在块2810中测量任务执行时间。否则,块2810被跳过。控制从块2810传递到块2831。在块2831中,通过调用具有合适实例和输出的任务的方法来执行线程中的任务。当任务的执行完成时,输出和/或修改的实例从该方法被返回且该线程被终止。控制从块2831传递到块2815。如果请求植入,则在块2815中运行时结束测量任务执行时间。否则,块2815被跳过。
图28C是根据本发明的一个实施方式的响应于线程终止回调的过程的流程图。在块2832中,线程终止回调被接收。
在块2834中,如果有的话,终止的线程内的任务的输出和获得的度量(例如任务执行时间)被存储在由终止的线程所执行的任务中,且具有该输出和获得的度量的任务(如果有的话)被推入到MT_RESULT_TASK_QUEUE。然后控制传递到块2836。在块2836中,终止的线程被标记为在线程池中可用。
图29A和29B是根据本发明的一个实施方式的图26的块2660的流程图。因此,控制从块2650流向图29A中的块2910。注意,为植入而执行的但不用于实施生成器执行的并行化的块在图29A和29B中用具有点划线边界的块示出。
在块2910中,检查MP_EXECUTION_TASK_QUEUE是否为空。如果MP_EXECUTION_TASK_QUEUE为空,则没有被多进程处理的任务,从而控制传递到块2670。否则控制传递到块2915。
在块2915中,作业被实例化且作业标识符(ID)被分配给该作业。此外,TASKS_LOCAL_MAP也在块2915中被实例化。然后控制传递到块2918。如果请求了植入,则块2918被执行以开始测量作业总时间。否则,块2918被跳过。然后控制传递到块2920。
在块2920中,任务从MP_EXECUTION_TASK_QUEUE中被读取并被移除。然后控制传递到块2921。如果请求了植入,则块2921被执行以开始测量任务总时间。否则,块2921被跳过。然后控制传递到块2923。
在块2923中,唯一的任务标识符(ID)被分配给所述任务并和任务引用一起存储在TASKS_LOCAL_MAP中。然后控制传递到块2925以实例化任务串行化形式并使任务串行化形式填充有对应于该任务的生成器的任务ID、类名称和方法名称。然后控制传递到块2930。
在块2930中,如果已经被创建,则所有输入生成器和基础实例的每一个的串行化形式被发现。可替换地,如果串行化形式没有被创建,则在块2930中被创建。执行块2930的示例性方式在这里论述。控制从块2930传递到块2960。
在块2960中,任务串行化形式被添加到作业的串行化任务执行队列,即JOB.SERIALIZED_TASKS_EXECUTION_QUEUE。然后控制传递到块2965。
在块2965中,确定MP_EXECUTION_TASK_QUEUE是否为空。如果MP_EXECUTION_TASK_QUEUE不为空,则控制传回到块2920以继续完成MP_EXECUTION_TASK_QUEUE中剩下的任务。否则,控制传递到块2970。
在块2970中,作业被发送到多个远程处理器的网格。处理器的网格执行远程计算以执行该作业。远程计算的一个示例性流程的细节在这里被论述。然后控制传递到块2972以执行本地执行。控制从块2972传递到块2973。
在块2973中,确定作业是否完成。如果没有,则控制保持在块2973中,直到作业被完成。当作业完成时,控制传递到图29B中的块2975。
参考图29B,在块2975中,作业虚拟本地处理时间被设定成0。根据本发明的一个方面,作业虚拟本地处理时间是本地执行的作业中所有任务所花的时间。控制从块2975传递到块2977。
在块2977中,任务从作业的串行化结果队列(即,JOB.SERIALIZED_TASKS_RESULTS_QUEUE)被读取并被移除。然后控制传递到块2979以使用存储在TASKS_LOCAL_MAP中的任务ID来发现任务引用。然后控制传递到块2980。
如果请求了植入,则块2980被执行以确定输出串行化形式大小并开始测量输出的本地反串行化时间。否则,块2980被跳过且控制传递到块2981。在块2981中,任务输出中的输出被反串行化。控制从块2981传递到块2982。如果再一次请求了植入,则块2982被执行以结束测量本地反串行化时间。此外,如果请求了植入,则块2984、2985、2987以及2989可以被执行。否则,块2984、2985、2987以及2989被跳过且控制从块2981传递到块2990。
在块2984中,运行时结束测量任务总时间且然后从任务总时间中去除本地执行时间。控制从块2984传递到块2985。
在块2985中,确定是否请求了基准测试。如果请求了基准测试,则控制传递到块2987然后到块2989。否则,控制从2985传递到2989而跳过块2987。
如上参考图25和26所述,基准测试被请求以比较本地和远程执行时间。因此,根据本发明的一个实施方式,如果基准测试被请求,则使用多进程来在本地和远程两地执行任务。因此,在块2987中,如果请求了基准测试,则运行时可以在LOCAL_RESULT_TASK_QUEUE中找到对应的任务。此外,运行时可以将存储在任务中的本地处理时间添加到作业虚拟本地处理时间。这样,当所有任务已被执行时,作业虚拟本地处理时间等于作业中所有任务的本地处理时间之和。控制从块2987传递到块2989。
在块2989中,例如任务总时间的任务度量和作业ID被添加到任务。控制传递到块2990。注意,如果请求了植入,则块2987和2989被执行。否则,块2987和2989可以被跳过。
在块2990中,任务被推入MP_RESULT_TASK_QUEUE中。然后控制传递到块2991。在块2991中,确定JOB.SERIALIZED_TASKS_RESULTS_QUEUE是否为空。如果不为空,则控制传回到块2977以继续从队列读取任务并对输出进行反串行化。否则,如果请求了植入,则控制传递到块2992。如果没有请求植入,则控制从块2991传递到图26B中的块2670。
如果请求了植入,则块2992、2993、2995、2996以及2997可以被执行。否则,块2992、2993、2995、2996以及2997可以被跳过。在块2992中,结束作业总时间的测量,然后本地执行时间从作业总时间中被去除。控制从块2992传递到块2993。
在块2993中,确定是否请求了基准测试。如果请求了基准测试,则控制传递到块2995。在块2995中,通过将作业虚拟本地处理时间除以作业总时间来计算作业加速。然后控制从块2995传递到块2996。在块2996中,通过将作业加速除以网格中可用且专用于执行作业的处理器的个数来计算作业效率。控制从块2996传递到块2997。否则,如果没有请求基准测试,则控制从块2993直接传递到块2997。
在块2997中,作业的度量(例如,作业加速、作业效率、作业总时间等)被添加到作业中的每一个任务。控制从块2997传递到图26B中的块2670。
图30显示了根据本发明的一个实施方式的图29A的块2930的流程图。因此,控制从块2925流向图30中的块3010。在块3010中,确定输入生成器或基础实例的串行化形式是否基于输入生成器关键字或基础实例关键字在SERIALIZED_FORM_LOCAL_MAP中被创建。如果串行化形式已经被创建,则控制传递到块3015。否则,控制传递到块3020。
在块3015中,串行化形式ID和串行化形式从SERIALIZED_FORM_LOCAL_MAP中被读取。然后控制传递到块3040。
在块3020中,串行化形式标识符被分配给输入生成器或基础实例。然后控制传递到块3022。
在块3022中,开始本地串行化时间的测量。然后控制传递到块3024。
在块3024中,为输入生成器或基础实例创建串行化形式。然后控制传递到块3026。
在块3026中,结束本地串行化时间的测量。然后控制传递到块3028。
在块3028中,确定输入串行化形式大小。然后控制传递到块3030。
在块3030中,输入生成器关键字或基础实例关键字、串行化形式ID以及串行化形式被存储到SERIALIZED_FORM_LOCAL_MAP。该SERIALIZED_FORM_LOCAL_MAP依据各种因素(例如存储器需求、性能需求等)可以是基于逐个作业的全局的的或被分配或释放的。然后控制传递到块3034。
在块3034中,输入串行化形式大小和串行化时间与串行化形式ID一起被存储在SERIALIZED_FORM_LOCAL_MAP中。然后控制传递到块3040。注意,如果请求了植入,则上述的块3022、3026、3028以及3034可以被执行。如果没有请求植入,则块3022、3026、3028以及3034可以被跳过。
在块3040中,确定串行化形式ID是否在JOB.SERIALIZED_FORM_MAP中。如果在,则控制传递到块3045。否则,控制传递到块3043。
在块3043中,串行化形式ID和串行化形式被存储在JOB.SERIALIZED_FORMS_MAP中。然后控制传递到块3045。
在块3045中,串行化形式ID作为输入或基础实例被添加到任务串行化形式。控制从块3045传递到块3050。
在块3050中,确定是否存在还没有被处理的另外的输入生成器或者是否基础实例还没有被处理。如果存在,则控制传回到块3010。否则,控制传递到图29A中的块2960。
图31A和31B显示了根据本发明的一个实施方式的用于多进程的远程计算的流程图。同样,如果请求了植入,则可以执行用点划线示出的块,而如果没有请求植入,所述块可以被跳过。如上所述,包括多个对应于生成器的任务的作业被分派到用于执行的处理器的网格。网格中的每一个处理器也被称为工作者(worker),可以缓存JOB_SERIALIZED FORMS_MAP。例如,如果作业持有一千个任务且有10个工作者执行这些任务,则网格分配器一次将JOB_SERIALIZED FORMS_MAP发送给每一个工作者,且JOB_SERIALIZED FORMS_MAP在工作者层被缓存。当作业完成时,网格分配器发送命令给工作者以清空缓存。该流程在块3108开始。
在块3108中,从网格分配器接收JOB_SERIALIZED_FORMS_MAP和持有输入ID、类名称以及方法名称的任务串行化形式。然后控制传递到块3110。在块3110中,使用类名称来定位类且使用方法名称来定位方法。类和方法被装载以重新构建任务。然后控制传递到块3112。
在块3112中,任务输入ID或实例ID从JOB.SERIALIZED_FORMS_MAP中被查询。然后控制传递到块3120。
在块3120中,确定是否找到输入ID。如果没有,则控制传递到块3190以返回错误。否则,控制传递到块3130。
在块3130中,确定对应于输入ID的JOB.SERIALIZED_FORMS_MAP的项是否已经被反串行化。如果已经被反串行化,则控制传递到块3150。否则,控制传递到块3132。
在块3150中,提取输入的反串行化形式。然后控制传递到块3155。
在块3132中,开始远程反串行化时间的测量。然后控制传递到块3134以反串行化对应于输入ID的JOB.SERIALIZED_FORMS_MAP的项。控制从块3134传递到块3136。在块3136中,结束远程反串行化时间的测量。然后控制传递到块3138。
在块3138中,JOB.SERIALIZED_FORMS_MAP中对应项被加入(enrich)反串行化形式。然后控制传递到块3143。
在块3143中,实例或标准输入被添加到任务定义。然后控制传递倒块3155。
在块3155中,确定所有的输入ID(即,所有的标准输入和基础实例)是否已被处理。换句话说,确定任务是否已经完全被重新组成或反串行化。如果是,则控制传递到图31B中的块3160。否则,控制传回到块3112以处理下一个输入ID。
参考图31B,远程处理时间的测量在块3160中开始。然后控制传递到块3162。
在块3162中,具有合适实例和输入的方法被调用。作为执行的结果,方法可以返回输出和/或修改该方法的实例。运行时接收从该方法返回的输出和/或修改的实例。然后控制从块3162传递到块3166。
在块3166中,结束远程处理时间的测量。然后控制传递到块3170。
在块3170中,开始远程串行化时间的测量。控制传递到块3172以串行化返回的输出和/或修改的实例并将该串行化的输出和/或串行化的修改的实例附加到任务上。然后控制传递到块3174。在块3174中,结束远程串行化时间的测量。控制从块3174传递到块3176。
在块3176中,度量(例如,远程串行化时间、远程反串行化时间等)被存储在任务中。然后控制传递到块3180。
在块3180中,任务被发回到运行时的网格分配器且流程结束。同样的,如果请求了植入,则执行用点划线示出的块,而如果没有请求植入则可以跳过所述块。
图32显示了根据本发明的一个实施方式的图29A的块2972的流程图。因此,控制从块2970流向图32的块3202。同样的,如果请求了植入,则执行用点划线示出的块,而如果没有请求植入则可以跳过所述块。
在块3202中,开始本地执行时间的测量。然后控制传递到块3210。
在块3210中,任务从LOCAL_EXECUTION_TASK_QUEUE中被移除并且通过调用具有合适的实例和输入的方法来本地执行该任务。当执行完成时,方法返回方法的输出和/或修改的实例。然后控制传递到块3212。
在块3212中,结束本地执行时间的测量。然后控制传递到块3220。
在块3220中,任务的输出被存储在任务中。然后控制传递到块3223。
在块3223中,度量(例如本地执行时间)也被存储在任务中。然后控制传递到块3230。
在块3230中,任务被推入到LOCAL_RESULT_TASK_QUEUE中。控制从块3230传递到块3240。
在块3240中,确定LOCAL_EXECUTION_TASK_QUEUE是否为空。如果队列为空,则控制传递到图29A中的块2973。否则,控制传回到块3202以重复在本地执行另一个任务的过程。
可替换实施方式
虽然图中的流程图显示了本发明某些实施方式所执行的操作的特定顺序,但是应当理解该顺序是示例性的(例如,可替换实施方式可以以不同顺序执行操作、结合某些操作、与某些操作重叠等)。
虽然根据一些实施方式描述了本发明,但是本领域技术人员可以理解本发明不限于所述的实施方式,而且可以通过在所附权利要求的实质和范围内做出修改和改变来实施本发明。因此描述被视为示例性而非限制性的。
Claims (38)
1、一种用于执行以面向对象的代码所编写的应用程序的计算机执行方法,该方法包括:
实例化具有当前感兴趣的输出的生成器,其中所述面向对象的代码包括方法和生成器依赖性声明,其中用于给定方法的所述生成器依赖性声明标识一组零个或多个生成器,其中生成器是运行时可实例化的结构,该结构包括至少一个实例和与该实例相关联的方法;
响应于所述实例化,添加感兴趣的生成器作为生成器图形的一部分;
尝试基于已经在所述生成器图形中的生成器的方法的生成器依赖性声明通过链接和在需要时实例化其他生成器来自动生成所述生成器图形的余项;以及
执行所述生成器图形中的生成器以确定所述感兴趣的生成器的当前输出,其中所述执行包括基于所述生成器图形中生成器之间的依赖性使用所述运行时来并行化执行所述生成器图形中至少两个生成器。
2、根据权利要求1所述的方法,其中并行化执行所述生成器图形中至少两个生成器包括:
标识所述生成器图形中生成器中的一组就绪生成器;
确定所述一组就绪生成器中每一个生成器的执行模式;
使所述一组就绪生成器中每一个生成器在对应的执行模式下被执行。
3、根据权利要求2所述的方法,其中所述执行模式是本地执行模式、多进程模式和多线程模式中的一者。
4、根据权利要求2所述的方法,该方法还包括:
创建用于所述一组就绪生成器中每一个生成器的任务;以及
使所述任务在对应的生成器的执行模式下被执行。
5、根据权利要求4所述的方法,其中所述一组就绪生成器中每一个生成器的任务包括对应生成器的引用和所述对应生成器的输出的引用。
6、根据权利要求2所述的方法,其中确定所述一组就绪生成器中每一个生成器的执行模式包括:
检查对应生成器的方法的执行模式设定;
如果终端用户基于类、方法和实例中的一者选择另一个执行模式,则覆盖所述对应生成器的执行模式设定;
如果所述对应生成器的对应执行模式设定在所述生成器图形中已被改变,则在逐个生成器的基础上覆盖所述对应生成器的执行模式设定;以及
如果所述运行时被设定为用预定的执行模式在全局上覆盖对应的执行模式,则用预定的执行模式覆盖所述生成器图形中的所述对应执行模式设定。
7、根据权利要求1所述的方法,该方法还包括:
响应于植入请求,使用所述运行时在逐个生成器的基础上获取度量,该度量与执行所述生成器图形中的生成器相关,所述获取度量包括:在逐个生成器的基础上测量所述生成器图形中的生成器的执行时间。
8、根据权利要求7所述的方法,其中所述获取度量还包括:
基于作业测量所述生成器图形中的生成器的执行时间,其中作业包括被多进程处理的多个生成器。
9、根据权利要求8所述的方法,其中所述获取度量还包括:
响应于基准测试请求,相对于所述作业的远程执行来对本地执行进行基准测试,该基准测试包括:
本地执行多个生成器;
测量所述多个生成器的本地执行时间;
将所述作业发送到处理器网格,其中所述处理器网格基本并行执行所述多个生成器;
测量所述作业的总执行时间;
将所述本地执行时间与总的远程执行时间进行比较;以及
在逐个生成器的基础上测量输入流大小和输出流大小。
10、一种用于执行以面向对象的代码所编写的应用程序的计算机执行方法,该方法包括:
实例化具有当前感兴趣的输出的生成器,其中所述面向对象的代码包括方法和生成器依赖性声明,其中用于给定方法的所述生成器依赖性声明标识一组零个或多个生成器,其中生成器是运行时可实例化的结构,该结构包括至少一个实例和与该实例相关联的方法;
响应于所述实例化,添加感兴趣的生成器作为生成器图形的一部分;
尝试基于已经在所述生成器图形中的生成器的方法的生成器依赖性声明通过链接和在需要时实例化其他生成器来自动生成所述生成器图形的余项;以及
使用具有面向生成器图形编程支持的运行时基于所述生成器图形来植入所述应用程序。
11、根据权利要求10所述的方法,其中植入所述应用程序包括:
在逐个生成器的基础上测量所述应用程序的执行时间。
12、根据权利要求10所述的方法,其中植入所述应用程序还包括:
将作业发送到处理器网格,其中所述处理器网格基本并行执行所述作业中的多个生成器;
测量所述作业的总执行时间;以及
在逐个生成器的基础上测量输入流的大小和输出流的大小。
13、根据权利要求12所述的方法,其中植入所述应用程序还包括:
响应于基准测试请求,相对于所述作业的远程执行来对本地执行进行基准测试,所述基准测试包括:
本地执行所述作业中的所述多个生成器;以及
测量所述多个生成器的本地执行时间。
14、根据权利要求13所述的方法,其中所述基准测试还包括:
将所述本地执行时间与总的远程执行时间进行比较;以及
从所述本地执行时间和所述总的远程执行时间中得到比较度量。
15、一种设备,包括:
运行时,用于运行面向对象的源代码,该源代码具有用于方法和方法的执行模式设定的生成器依赖性声明,其中生成器是运行时可实例化的结构,该结构包括实例和与该实例相关联的方法,其中用于给定方法的每一个生成器依赖性声明标识一组零个或多个生成器,且其中所述运行时包括:
自动生成器图形生成模块,用于接收感兴趣的生成器的命名以添加所述感兴趣的生成器作为生成器图形的一部分,并基于已经在所述生成器图形中的生成器的方法的生成器依赖性声明通过链接和在需要时实例化其他生成器来自动生成所述生成器图形的余项,以及
自动生成器图形执行模块,用于以所述生成器图形指示的顺序来执行所述生成器图形中的生成器从而确定所述感兴趣的生成器的输出,其中每一个生成器的执行使所述生成器的方法在所述生成器的实例上被执行,且所述自动生成器图形执行模块包括:
并行化模块,该并行化模块用于使多个生成器的零个或多个生成器被并行执行。
16、根据权利要求15所述的设备,其中所述自动生成器图形执行模块还包括:
与所述并行化模块耦合的本地执行模块,该本地执行模块用于使具有本地执行的执行模式的生成器被本地执行。
17、根据权利要求16所述的设备,其中所述自动生成器图形执行模块还包括度量获取模块,该度量获取模块用于在请求了植入时测量具有所述本地执行的执行模式的生成器的本地执行时间。
18、根据权利要求15所述的设备,其中所述自动生成器图形执行模块还包括:
与所述并行化模块耦合的多线程模块,该多线程模块用于启动线程池机制并将对应于具有多线程执行模式的生成器的多线程任务放入到可用线程。
19、根据权利要求18所述的设备,其中所述自动生成器图形执行模块还包括度量获取模块,该度量获取模块用于在请求了植入时测量具有所述多线程执行模式的每一个生成器的执行时间。
20、根据权利要求15所述的设备,其中所述自动生成器图形执行模块还包括:
与所述并行化模块耦合的多进程模块,该多进程模块用于实例化作业、串行化与具有多进程执行模式的生成器对应的多进程任务、串行化所述多进程任务的输入和基础实例、将串行化的多进程任务和串行化的输入及串行化的基础实例添加到所述作业、以及将所述作业提供给网格分配器,该网格分配器用于将所述作业分配给网格,该网格具有用于执行所述作业中的多进程任务的多个处理器。
21、根据权利要求20所述的设备,其中所述自动生成器图形执行模块还包括度量获取模块,该度量获取模块用于在请求了植入时测量:与具有所述多进程执行模式的生成器对应的多进程任务中的每一个多进程任务的执行时间;所述作业中的多进程任务输入、输出和实例的串行化时间和大小;所述作业中的多进程任务输入、输出和实例的反串行化时间和大小;以及,所述作业中的所述多进程任务的执行时间。
22、根据权利要求21所述的设备,其中,响应于基准测试请求,所述度量获取模块用于测量所述多进程任务的本地执行时间、比较所述多进程任务的本地执行时间与所述作业的执行时间以及得到比较度量。
23、根据权利要求15所述的设备,其中所述运行时还包括:
与所述并行化模块耦合的基于生成器的可配置决定结构,该基于生成器的可配置决定结构用于基于来自运行时客户端的类关键字、实例关键字以及方法关键字中的一者或多者的组合来存储执行模式,其中所述自动生成器图形生成模块可操作地用于在存在执行模式选择、执行模式设定以及运行时覆盖设定的情况下,基于所述执行模式选择、执行模式设定以及运行时覆盖设定来确定所述执行模式。
24、根据权利要求15所述的设备,其中所述运行时还包括:
与所述自动生成器图形生成模块和所述自动生成器图形执行模块耦合的生成器图形结构,该生成器图形结构用于在存在多个生成器的输出、执行模式设定以及获取的度量的情况下存储所述多个生成器的输出、执行模式设定以及获取的度量。
25、根据权利要求15所述的设备,其中所述运行时还包括:
运行时设定结构,用于存储全局执行模式覆盖设定。
26、一种设备,包括:
运行时,用于运行面向对象的源代码,该源代码具有用于方法和方法的执行模式设定的生成器依赖性声明,其中生成器是运行时可实例化的结构,该结构包括至少一个实例和与该实例相关联的方法,其中用于给定方法的每一个生成器依赖性声明标识一组零个或多个生成器,且其中所述运行时包括:
自动生成器图形生成模块,用于接收感兴趣的生成器的命名以添加所述感兴趣的生成器作为生成器图形的一部分,并基于已经在所述生成器图形中的生成器的方法的生成器依赖性声明通过链接和在需要时实例化其他生成器来自动生成所述生成器图形的余项,以及
自动生成器图形执行模块,用于以所述生成器图形指示的顺序来执行所述生成器图形中的生成器从而确定所述感兴趣的生成器的输出,其中每一个生成器的执行使所述生成器的方法在所述生成器的实例上被执行,且所述自动生成器图形执行模块包括:
度量获取模块,该度量获取模块用于在请求了植入时在逐个生成器的基础上获取与执行所述多个生成器相关的度量。
27、根据权利要求26所述的设备,其中所述度量获取模块可操作地用于测量所述生成器图形中的生成器的执行时间。
28、一种提供面向对象的源代码的机器可读介质,该机器可读介质包括:
多个类定义,每一个类定义包括:一组一个或多个字段;一组一个或多个方法;用于所述一组方法中每一个方法的生成器依赖性声明,其中运行时使用用于所述方法中的给定的方法的生成器依赖性声明来标识一组零个或多个生成器,且其中生成器是运行时可实例化的结构,该结构包括在运行时的多个类中的至少一个类的实例以及与该实例相关联的方法,以及,
其中所述运行时可操作用于基于其他生成器的方法的生成器依赖性声明通过链接和在需要时实例化其他生成器来自动生成用于指定的感兴趣生成器的生成器图形,并且基于所述生成器图形中指示的生成器之间的依赖性基本并行自动执行所述生成器图形中的至少两个生成器。
29、根据权利要求28所述的机器可读介质,其中所述运行时是可操作用于响应于植入请求来自动获取与执行所述生成器图形中的生成器相关的度量。
30、根据权利要求29所述的机器可读介质,其中所述运行时可操作用于响应于基准测试请求相对于通过多进程对一个或多个生成器的远程执行来自动对所述生成器图形中一个或多个生成器的本地执行进行基准测试。
31、根据权利要求28所述的机器可读介质,其中所述面向对象的源代码还包括:
用于所述一组方法中的每一个方法的执行模式设定。
32、根据权利要求31所述的机器可读介质,其中所述运行时基于执行模式设定、存在来自终端用户和客户端代码中一者的可配置决定结构中的第二执行模式设定的情况下基于所述第二执行模式设定、存在来自终端用户和客户端代码中的一者的生成器图形结构中的第三执行模式设定的情况下基于所述第三执行模式以及存在运行时覆盖设定的情况下基于所述运行时覆盖设定来确定执行模式,其中各个方法在在所述执行模式下被执行。
33、根据权利要求31所述的机器可读介质,其中所述执行模式是本地执行模式、多进程模式以及多线程模式中的一者。
34、根据权利要求31所述的机器可读介质,其中多个类定义中的一个或多个还包括:
在注释中提供的一个或多个执行模式设定。
35、根据权利要求28所述的机器可读介质,其中所述面向对象的源代码还包括:
用于在运行时等级覆盖所述执行模式的覆盖运行时执行模式设定命令。
36、根据权利要求28所述的机器可读介质,其中所述面向对象的源代码还包括:
用于在逐个生成器的基础上覆盖所述执行模式的覆盖生成器执行模式设定命令。
37、根据权利要求28所述的机器可读介质,其中所述面向对象的源代码还包括:
用于在类、方法和实例的至少一者的基础上覆盖所述执行模式的可配置决定树执行模式设定命令。
38、根据权利要求28所述的机器可读介质,其中所述面向对象的源代码还包括:
用于在类、方法和实例的至少一者的基础上覆盖所述执行模式的可配置决定树执行模式设定命令。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/607,196 | 2006-12-01 | ||
US11/607,196 US8307337B2 (en) | 2006-12-01 | 2006-12-01 | Parallelization and instrumentation in a producer graph oriented programming framework |
PCT/EP2007/010407 WO2008064899A2 (en) | 2006-12-01 | 2007-11-30 | Parallelization and instrumentation in a producer graph oriented programming framework |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101589366A true CN101589366A (zh) | 2009-11-25 |
CN101589366B CN101589366B (zh) | 2013-11-13 |
Family
ID=39400444
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007800504497A Active CN101589366B (zh) | 2006-12-01 | 2007-11-30 | 面向生成器图的编程框架中的并行化和植入 |
Country Status (7)
Country | Link |
---|---|
US (2) | US8307337B2 (zh) |
EP (1) | EP2041655B1 (zh) |
JP (1) | JP5354601B2 (zh) |
CN (1) | CN101589366B (zh) |
ES (1) | ES2473765T3 (zh) |
RU (1) | RU2435201C2 (zh) |
WO (1) | WO2008064899A2 (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103677789A (zh) * | 2012-09-25 | 2014-03-26 | 深圳市金正方科技有限公司 | 基于grid组件的列表数据展现方法及系统 |
CN103765376A (zh) * | 2011-06-16 | 2014-04-30 | 柯斯提克绘图公司 | 具有无阻塞并行架构的图形处理器 |
CN104281478A (zh) * | 2014-10-28 | 2015-01-14 | 小米科技有限责任公司 | 更新应用程序的方法及装置 |
CN105335230A (zh) * | 2014-07-30 | 2016-02-17 | 阿里巴巴集团控股有限公司 | 一种服务处理方法及装置 |
US10481877B2 (en) | 2006-12-01 | 2019-11-19 | Murex S.A.S. | Producer graph oriented programming and execution |
CN113590134A (zh) * | 2021-08-16 | 2021-11-02 | 北京字节跳动网络技术有限公司 | 一种项目生成方法及装置 |
CN113778420A (zh) * | 2015-07-24 | 2021-12-10 | 甲骨文国际公司 | 桥接模块系统和非模块系统 |
Families Citing this family (62)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8332827B2 (en) | 2006-12-01 | 2012-12-11 | Murex S.A.S. | Produce graph oriented programming framework with scenario support |
US7865872B2 (en) * | 2006-12-01 | 2011-01-04 | Murex S.A.S. | Producer graph oriented programming framework with undo, redo, and abort execution support |
US8307337B2 (en) | 2006-12-01 | 2012-11-06 | Murex S.A.S. | Parallelization and instrumentation in a producer graph oriented programming framework |
US8671412B2 (en) * | 2008-10-24 | 2014-03-11 | International Business Machines Corporation | Calculating and communicating level of carbon offsetting required to compensate for performing a computing task |
EP2361408A4 (en) * | 2008-12-01 | 2012-05-23 | Kpit Cummins Infosystems Ltd | METHOD AND SYSTEM FOR PARALLELIZING SEQUENCEL COMPUTER PROGRAM CODES |
US8863093B1 (en) * | 2009-03-06 | 2014-10-14 | Coverity, Inc. | Load-time instrumentation of virtual machine program code |
US20110016477A1 (en) * | 2009-07-14 | 2011-01-20 | Microsoft Corporation | Pre-calculation and caching of dependencies |
US8843920B2 (en) * | 2009-09-15 | 2014-09-23 | Advanced Micro Devices, Inc. | Systems and methods for deferring software implementation decisions until load time |
US9984327B2 (en) * | 2010-06-17 | 2018-05-29 | Palo Alto Research Center Incorporated | System and method for parallel graph searching utilizing parallel edge partitioning |
US8607191B2 (en) * | 2010-06-30 | 2013-12-10 | International Business Machines Corporation | Automated discovery of programmatic resources |
CN101964749A (zh) * | 2010-09-21 | 2011-02-02 | 北京网康科技有限公司 | 一种基于多核构架的报文转发方法及系统 |
US20120102469A1 (en) * | 2010-10-22 | 2012-04-26 | International Business Machines Corporation | Deterministic application breakpoint halting by logically relating breakpoints in a graph |
US20120117537A1 (en) * | 2010-11-02 | 2012-05-10 | Velocio Networks, Inc. | Flow Chart Programming Platform for Testers and Simulators |
US9519561B2 (en) * | 2011-04-15 | 2016-12-13 | Webtrends Inc. | Method and system for configuration-controlled instrumentation of application programs |
US8849916B2 (en) * | 2011-06-26 | 2014-09-30 | International Business Machines Corporation | Infrastructure management operational workflows |
US8825861B2 (en) * | 2011-06-26 | 2014-09-02 | International Business Machines Corporation | System management operational workflow templates |
EP2751664A4 (en) * | 2011-09-02 | 2016-11-02 | Vu Lam | SYSTEMS AND METHOD FOR PROCESSING SOFTWARE APPLICATION METADATA WITH A SOFTWARE APPLICATION |
US9003383B2 (en) * | 2011-09-15 | 2015-04-07 | You Know Solutions, LLC | Analytic engine to parallelize serial code |
US9038033B1 (en) * | 2011-12-09 | 2015-05-19 | Sencha, Inc. | Techniques and mechanisms for web application minification |
KR101373550B1 (ko) * | 2012-01-11 | 2014-03-13 | (주)마상소프트 | 네트워크 기반의 플랫폼 시스템 |
WO2014058854A1 (en) | 2012-10-09 | 2014-04-17 | Securboration, Inc. | Systems and methods for automatically parallelizing sequential code |
US10725897B2 (en) | 2012-10-09 | 2020-07-28 | Securboration, Inc. | Systems and methods for automatically parallelizing sequential code |
US10333820B1 (en) | 2012-10-23 | 2019-06-25 | Quest Software Inc. | System for inferring dependencies among computing systems |
US10372442B2 (en) * | 2013-03-14 | 2019-08-06 | Thoughtwire Holdings Corp. | Method and system for generating a view incorporating semantically resolved data values |
US10313433B2 (en) | 2013-03-14 | 2019-06-04 | Thoughtwire Holdings Corp. | Method and system for registering software systems and data-sharing sessions |
US9742843B2 (en) | 2013-03-14 | 2017-08-22 | Thoughtwire Holdings Corp. | Method and system for enabling data sharing between software systems |
US9164740B2 (en) | 2013-05-16 | 2015-10-20 | Toshiba Global Commerce Solutions Holdings Corporation | System and method for replacing java beans |
CN105593815B (zh) * | 2013-07-23 | 2019-08-20 | 华为技术有限公司 | 在编译器中构建基于图的中间表示的方法 |
US11005738B1 (en) | 2014-04-09 | 2021-05-11 | Quest Software Inc. | System and method for end-to-end response-time analysis |
US10291493B1 (en) | 2014-12-05 | 2019-05-14 | Quest Software Inc. | System and method for determining relevant computer performance events |
US9678790B2 (en) * | 2015-01-07 | 2017-06-13 | Qualcomm Incorporated | Devices and methods implementing operations for selective enforcement of task dependencies |
US10325014B2 (en) | 2015-04-30 | 2019-06-18 | Workiva Inc. | System and method for convergent document collaboration |
US9158832B1 (en) | 2015-05-18 | 2015-10-13 | Workiva Inc. | Method and computing device for maintaining dependencies among reference elements |
US10255263B2 (en) | 2015-05-18 | 2019-04-09 | Workiva Inc. | Data storage and retrieval system and method for storing cell coordinates in a computer memory |
US10187260B1 (en) | 2015-05-29 | 2019-01-22 | Quest Software Inc. | Systems and methods for multilayer monitoring of network function virtualization architectures |
US9626171B2 (en) | 2015-07-24 | 2017-04-18 | Oracle International Corporation | Composing a module system and a non-module system |
US10078497B2 (en) | 2015-07-24 | 2018-09-18 | Oracle International Corporation | Bridging a module system and a non-module system |
US10158647B2 (en) * | 2015-08-25 | 2018-12-18 | Oracle International Corporation | Permissive access control for modular reflection |
US10200252B1 (en) | 2015-09-18 | 2019-02-05 | Quest Software Inc. | Systems and methods for integrated modeling of monitored virtual desktop infrastructure systems |
US9823913B2 (en) * | 2015-12-03 | 2017-11-21 | International Business Machines Corporation | Method of adding local variables in place of global in JavaScript |
CN105512304B (zh) * | 2015-12-11 | 2019-03-26 | 西安道同信息科技有限公司 | 在线生成互联网应用方法和系统集成方法及支撑平台 |
US10191753B2 (en) | 2016-03-30 | 2019-01-29 | Oracle International Corporation | Generating verification metadata and verifying a runtime type based on verification metadata |
US10394528B2 (en) | 2016-03-30 | 2019-08-27 | Oracle International Corporation | Returning a runtime type loaded from an archive in a module system |
US10230601B1 (en) * | 2016-07-05 | 2019-03-12 | Quest Software Inc. | Systems and methods for integrated modeling and performance measurements of monitored virtual desktop infrastructure systems |
US10387142B2 (en) | 2016-09-16 | 2019-08-20 | Oracle International Corporation | Using annotation processors defined by modules with annotation processors defined by non-module code |
US10360008B2 (en) | 2016-09-16 | 2019-07-23 | Oracle International Corporation | Metadata application constraints within a module system based on modular encapsulation |
US10642589B2 (en) | 2017-03-13 | 2020-05-05 | Memsql, Inc. | Extensibility in a database system |
US10846417B2 (en) * | 2017-03-17 | 2020-11-24 | Oracle International Corporation | Identifying permitted illegal access operations in a module system |
US10848410B2 (en) | 2017-03-29 | 2020-11-24 | Oracle International Corporation | Ranking service implementations for a service interface |
US11010361B1 (en) * | 2017-03-30 | 2021-05-18 | Amazon Technologies, Inc. | Executing code associated with objects in a hierarchial data structure |
US10120777B1 (en) * | 2017-09-29 | 2018-11-06 | Oracle International Corporation | Remediating serialization incompatibilities |
CN109388542B (zh) * | 2018-10-26 | 2022-02-22 | 北京百悟科技有限公司 | 一种监控方法及装置、计算机可读存储介质 |
US11070377B1 (en) * | 2019-02-14 | 2021-07-20 | Bank Of America Corporation | Blended virtual machine approach for flexible production delivery of intelligent business workflow rules |
US11755825B2 (en) | 2019-09-12 | 2023-09-12 | Workiva Inc. | Method, system, and computing device for facilitating private drafting |
US11188309B2 (en) * | 2019-09-27 | 2021-11-30 | Adp, Llc | User interface engine for miniapp development |
WO2022013887A1 (en) * | 2020-07-16 | 2022-01-20 | Morphing Machines Pvt. Ltd | Apparatus for implementing dynamic, data-dependent parallelism for task execution based on an execution model |
US11100281B1 (en) | 2020-08-17 | 2021-08-24 | Workiva Inc. | System and method for maintaining links and revisions |
US11443108B2 (en) | 2020-08-17 | 2022-09-13 | Workiva Inc. | System and method for document management using branching |
US11494333B2 (en) * | 2020-12-02 | 2022-11-08 | Adp, Inc. | File tree structure |
US11100277B1 (en) | 2021-02-15 | 2021-08-24 | Workiva Inc. | Systems, methods, and computer-readable media for flow-through formatting for links |
US11354362B1 (en) | 2021-05-06 | 2022-06-07 | Workiva Inc. | System and method for copying linked documents |
US11640495B1 (en) | 2021-10-15 | 2023-05-02 | Workiva Inc. | Systems and methods for translation comments flowback |
Family Cites Families (109)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US73892A (en) * | 1868-01-28 | Improved cbable | ||
US4558413A (en) * | 1983-11-21 | 1985-12-10 | Xerox Corporation | Software version management system |
US5481741A (en) | 1986-04-14 | 1996-01-02 | National Instruments Corporation | Method and apparatus for providing attribute nodes in a graphical data flow environment |
US5497500A (en) | 1986-04-14 | 1996-03-05 | National Instruments Corporation | Method and apparatus for more efficient function synchronization in a data flow program |
US5504917A (en) | 1986-04-14 | 1996-04-02 | National Instruments Corporation | Method and apparatus for providing picture generation and control features in a graphical data flow environment |
US5481740A (en) | 1986-04-14 | 1996-01-02 | National Instruments Corporation | Method and apparatus for providing autoprobe features in a graphical data flow diagram |
US5155836A (en) | 1987-01-27 | 1992-10-13 | Jordan Dale A | Block diagram system and method for controlling electronic instruments with simulated graphic display |
JPS6432337A (en) * | 1987-07-29 | 1989-02-02 | Hitachi Ltd | Method for instructing influence of program change |
US5371851A (en) | 1989-04-26 | 1994-12-06 | Credence Systems Corporation | Graphical data base editor |
US5313387A (en) * | 1989-06-30 | 1994-05-17 | Digital Equipment Corporation | Re-execution of edit-compile-run cycles for changed lines of source code, with storage of associated data in buffers |
DE69126066T2 (de) * | 1990-06-29 | 1997-09-25 | Oracle Corp | Verfahren und Gerät zur Optimierung des Logbuchaufhebungsgebrauchs |
DE69225544T2 (de) | 1991-08-13 | 1998-12-03 | Xerox Corp | Elektronische Bilderzeugung |
JPH05265975A (ja) | 1992-03-16 | 1993-10-15 | Hitachi Ltd | 並列計算処理装置 |
US5416895A (en) | 1992-04-08 | 1995-05-16 | Borland International, Inc. | System and methods for improved spreadsheet interface with user-familiar objects |
US5659747A (en) * | 1993-04-22 | 1997-08-19 | Microsoft Corporation | Multiple level undo/redo mechanism |
JPH06332785A (ja) | 1993-05-25 | 1994-12-02 | Fujitsu Ltd | オブジェクト指向データ処理システム |
JPH0713766A (ja) * | 1993-06-14 | 1995-01-17 | Internatl Business Mach Corp <Ibm> | オブジェクト指向コンピュータ・システムおよびオブジェクト・クラス管理方法 |
US5758160A (en) * | 1993-06-28 | 1998-05-26 | Object Technology Licensing Corporation | Method and apparatus for building a software program using dependencies derived from software component interfaces |
US5893123A (en) | 1995-06-22 | 1999-04-06 | Tuinenga; Paul W. | System and method of integrating a spreadsheet and external program having output data calculated automatically in response to input data from the spreadsheet |
US6003037A (en) | 1995-11-14 | 1999-12-14 | Progress Software Corporation | Smart objects for development of object oriented software |
US5838976A (en) * | 1995-11-28 | 1998-11-17 | Hewlett-Packard Co. | System and method for profiling code on symmetric multiprocessor architectures |
US6067415A (en) * | 1995-12-26 | 2000-05-23 | Kabushiki Kaisha Toshiba | System for assisting a programmer find errors in concurrent programs |
US7987427B1 (en) | 1996-05-10 | 2011-07-26 | Apple Inc. | Graphical editor for program files |
US5819293A (en) | 1996-06-06 | 1998-10-06 | Microsoft Corporation | Automatic Spreadsheet forms |
US5966072A (en) * | 1996-07-02 | 1999-10-12 | Ab Initio Software Corporation | Executing computations expressed as graphs |
US5822593A (en) | 1996-12-06 | 1998-10-13 | Xerox Corporation | High-level loop fusion |
JP3730740B2 (ja) * | 1997-02-24 | 2006-01-05 | 株式会社日立製作所 | 並列ジョブ多重スケジューリング方法 |
US6145121A (en) * | 1997-04-17 | 2000-11-07 | University Of Washington | Trace based method for the analysis, benchmarking and tuning of object oriented databases and applications |
US6026235A (en) | 1997-05-20 | 2000-02-15 | Inprise Corporation | System and methods for monitoring functions in natively compiled software programs |
US6209125B1 (en) | 1997-06-03 | 2001-03-27 | Sun Microsystems, Inc. | Method and apparatus for software component analysis |
US5990906A (en) * | 1997-06-25 | 1999-11-23 | National Instruments Corporation | Undo feature for a graphical programming system |
US6233733B1 (en) | 1997-09-30 | 2001-05-15 | Sun Microsystems, Inc. | Method for generating a Java bytecode data flow graph |
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 |
US6427234B1 (en) * | 1998-06-11 | 2002-07-30 | University Of Washington | System and method for performing selective dynamic compilation using run-time information |
US6223171B1 (en) | 1998-08-25 | 2001-04-24 | Microsoft Corporation | What-if index analysis utility for database systems |
US6111575A (en) * | 1998-09-24 | 2000-08-29 | International Business Machines Corporation | Graphical undo/redo manager and method |
US6493868B1 (en) | 1998-11-02 | 2002-12-10 | Texas Instruments Incorporated | Integrated development tool |
US6826752B1 (en) * | 1998-12-17 | 2004-11-30 | California Institute Of Technology | Programming system and thread synchronization mechanisms for the development of selectively sequential and multithreaded computer programs |
JP2000207223A (ja) | 1999-01-12 | 2000-07-28 | Matsushita Electric Ind Co Ltd | 並列処理向けのプログラム処理方法および装置、並びに並列処理向けのプログラム処理を実行するプログラムを記録した記録媒体および並列処理向けの命令列を記録した記録媒体 |
US6385770B1 (en) * | 1999-01-29 | 2002-05-07 | Telefonaktiebolaget Lm Ericsson (Publ) | Software upgrade |
US6957191B1 (en) | 1999-02-05 | 2005-10-18 | Babcock & Brown Lp | Automated financial scenario modeling and analysis tool having an intelligent graphical user interface |
US6571388B1 (en) | 1999-03-09 | 2003-05-27 | Hewlett-Packard Development Company, L.P. | Building a custom software environment including pre-loaded classes |
US6407753B1 (en) | 1999-05-04 | 2002-06-18 | International Business Machines Corporation | System and method for integrating entities via user-interactive rule-based matching and difference reconciliation |
US6665866B1 (en) | 1999-05-28 | 2003-12-16 | Microsoft Corporation | Extensible compiler utilizing a plurality of question handlers |
JP2001005678A (ja) * | 1999-06-18 | 2001-01-12 | Fujitsu Ltd | ネットワーク型情報処理装置及び方法 |
WO2001001206A2 (en) | 1999-06-30 | 2001-01-04 | Strategic Simulation Systems, Inc. | System dynamics model builder and simulator |
US6618851B1 (en) * | 1999-08-31 | 2003-09-09 | Autodesk, Inc. | Method and apparatus for state-reversion |
AU2001253712A1 (en) * | 2000-04-21 | 2001-11-07 | Togethersoft Corporation | Methods and systems for identifying dependencies between object-oriented elements |
CA2346231A1 (en) | 2000-05-08 | 2001-11-08 | Internet Number Corporation | Method and system for accessing information on a network using message aliasing functions having shadow callback functions |
US6959429B1 (en) | 2000-05-16 | 2005-10-25 | Watterson-Prime Software, Inc. | System for developing data collection software applications |
US6763515B1 (en) | 2000-06-05 | 2004-07-13 | National Instruments Corporation | System and method for automatically generating a graphical program to perform an image processing algorithm |
US20030005407A1 (en) | 2000-06-23 | 2003-01-02 | Hines Kenneth J. | System and method for coordination-centric design of software systems |
US6889227B1 (en) | 2000-07-21 | 2005-05-03 | Sun Microsystems, Inc. | Database access bridge system and process |
RU2206119C2 (ru) | 2000-09-22 | 2003-06-10 | Закрытое акционерное общество "МЦСТ" | Способ получения объектного кода |
US7047518B2 (en) | 2000-10-04 | 2006-05-16 | Bea Systems, Inc. | System for software application development and modeling |
WO2002046916A2 (en) * | 2000-10-20 | 2002-06-13 | Polexis, Inc. | Extensible information system (xis) |
US6826523B1 (en) * | 2000-11-01 | 2004-11-30 | Sony Computer Entertainment America Inc. | Application development interface for multi-user applications executable over communication networks |
US6829572B2 (en) * | 2000-12-07 | 2004-12-07 | Internatinal Business Machines Corporation | Method and system for efficiently overriding array net values in a logic simulator machine |
US6820256B2 (en) | 2000-12-13 | 2004-11-16 | Microsoft Corporation | System and method for whole-system program analysis |
US7200838B2 (en) | 2000-12-20 | 2007-04-03 | National Instruments Corporation | System and method for automatically generating a graphical program in response to a state diagram |
US6836884B1 (en) * | 2001-06-04 | 2004-12-28 | Microsoft Corporation | Method and system for editing software programs |
US20020188616A1 (en) | 2001-06-07 | 2002-12-12 | Chinnici Roberto R. | Database access bridge system and process |
US7051339B2 (en) * | 2001-06-29 | 2006-05-23 | Goldman, Sachs & Co. | System and method to measure latency of transaction information flowing through a computer system |
US6995765B2 (en) | 2001-07-13 | 2006-02-07 | Vicarious Visions, Inc. | System, method, and computer program product for optimization of a scene graph |
US6966013B2 (en) * | 2001-07-21 | 2005-11-15 | International Business Machines Corporation | Method and system for performing automated regression tests in a state-dependent data processing system |
US7236915B2 (en) * | 2001-08-09 | 2007-06-26 | Hewlett-Packard Development Company, L.P. | Technique and interface for computer system resource assignment |
US20040205524A1 (en) | 2001-08-15 | 2004-10-14 | F1F9 | Spreadsheet data processing system |
US7010779B2 (en) | 2001-08-16 | 2006-03-07 | Knowledge Dynamics, Inc. | Parser, code generator, and data calculation and transformation engine for spreadsheet calculations |
US7017084B2 (en) * | 2001-09-07 | 2006-03-21 | Network Appliance Inc. | Tracing method and apparatus for distributed environments |
US8473922B2 (en) | 2001-09-19 | 2013-06-25 | Hewlett-Packard Development Company, L.P. | Runtime monitoring in component-based systems |
US7194475B2 (en) * | 2001-10-30 | 2007-03-20 | International Business Machines Corporation | Method, system, and program for performing an impact analysis of program statements in at least one source code file |
US7069547B2 (en) * | 2001-10-30 | 2006-06-27 | International Business Machines Corporation | Method, system, and program for utilizing impact analysis metadata of program statements in a development environment |
CA2360650A1 (en) * | 2001-10-31 | 2003-04-30 | Ibm Canada Limited-Ibm Canada Limitee | Algorithm to create and compare debug scenarios of a computer process |
JP2003157185A (ja) * | 2001-11-19 | 2003-05-30 | Nec Corp | 計算機の動作の解析・表示装置とその解析・表示方法及びコンピュータプログラム |
US7203743B2 (en) | 2001-12-28 | 2007-04-10 | Nortel Networks Limited | Hierarchical tree-based protection scheme for mesh networks |
US7039923B2 (en) | 2002-04-19 | 2006-05-02 | Sun Microsystems, Inc. | Class dependency graph-based class loading and reloading |
US7159211B2 (en) | 2002-08-29 | 2007-01-02 | Indian Institute Of Information Technology | Method for executing a sequential program in parallel with automatic fault tolerance |
US7210128B2 (en) | 2002-10-14 | 2007-04-24 | Fujitsu Limited | Event-driven observability enhanced coverage analysis |
US7272820B2 (en) * | 2002-12-12 | 2007-09-18 | Extrapoles Pty Limited | Graphical development of fully executable transactional workflow applications with adaptive high-performance capacity |
TWI262383B (en) * | 2003-01-10 | 2006-09-21 | Univ Nat Cheng Kung | A generic software testing system and method |
US7571431B2 (en) | 2003-04-29 | 2009-08-04 | Microsoft Corporation | Processing macro information and displaying via GUI in different tools |
US7299450B2 (en) * | 2003-06-17 | 2007-11-20 | Microsoft Corporation | Undoing changes in a software configuration management system |
KR100513385B1 (ko) * | 2003-06-19 | 2005-09-07 | 삼성전자주식회사 | 선형 위상 검출기를 이용한 클럭 및 데이터 복원 장치 및 그 방법 |
US7559050B2 (en) | 2003-06-30 | 2009-07-07 | Microsoft Corporation | Generating software development tools via target architecture specification |
US7739252B2 (en) * | 2003-07-14 | 2010-06-15 | Oracle America, Inc. | Read/write lock transaction manager freezing |
US7818718B2 (en) * | 2003-09-30 | 2010-10-19 | Sap Ag | Undoing user actions in a client program |
US7454701B2 (en) | 2003-10-30 | 2008-11-18 | Sap Ag | Systems and methods for implementing formulas |
US7536678B2 (en) * | 2003-12-04 | 2009-05-19 | International Business Machines Corporation | System and method for determining the possibility of adverse effect arising from a code change in a computer program |
US7792824B2 (en) | 2004-01-08 | 2010-09-07 | International Business Machines Corporation | Apparatus and method for enabling parallel processing of a computer program using existing database parallelism |
KR100643268B1 (ko) | 2004-01-17 | 2006-11-10 | 삼성전자주식회사 | 자바 가상 머신의 성능을 향상시키는 방법 및 상기 방법에의해 동작되는 시스템 |
US7917898B2 (en) * | 2004-02-02 | 2011-03-29 | Intel Corporation | Methods and apparatus to provide a modular native method invocation system |
US7316001B2 (en) * | 2004-06-05 | 2008-01-01 | Graphlogic Inc. | Object process graph system |
US7493335B2 (en) | 2004-07-02 | 2009-02-17 | Graphlogic Inc. | Object process graph relational database interface |
US7360209B2 (en) | 2004-07-16 | 2008-04-15 | Graphlogic Inc. | Object process graph application controller-viewer |
US7506320B2 (en) | 2004-09-09 | 2009-03-17 | International Business Machines Corporation | Generating sequence diagrams using call trees |
JP2008512794A (ja) | 2004-09-10 | 2008-04-24 | グラフロジック インコーポレイテッド | オブジェクト処理グラフアプリケーション開発システム |
US7933862B2 (en) * | 2004-09-27 | 2011-04-26 | Microsoft Corporation | One click conditional formatting method and system for software programs |
CN1755722A (zh) * | 2004-10-01 | 2006-04-05 | 微软公司 | 可扩展工作流模型的声明性表示 |
US7458072B2 (en) | 2004-10-06 | 2008-11-25 | Microsoft Corporation | Execution context infrastructure |
US20060080660A1 (en) * | 2004-10-07 | 2006-04-13 | Dell Products L.P. | System and method for disabling the use of hyper-threading in the processor of a computer system |
US7831956B2 (en) * | 2005-09-13 | 2010-11-09 | Microsoft Corporation | Using attributes to identify and filter pluggable functionality |
US7904892B2 (en) | 2006-01-06 | 2011-03-08 | Northrop Grumman Corporation | Systems and methods for identifying and displaying dependencies |
US7882498B2 (en) * | 2006-03-31 | 2011-02-01 | Intel Corporation | Method, system, and program of a compiler to parallelize source code |
US7844959B2 (en) * | 2006-09-29 | 2010-11-30 | Microsoft Corporation | Runtime optimization of distributed execution graph |
US8902231B2 (en) | 2006-10-20 | 2014-12-02 | Alcatel Lucent | Method and apparatus for displaying graphical representations of graph layouts |
US8332827B2 (en) | 2006-12-01 | 2012-12-11 | Murex S.A.S. | Produce graph oriented programming framework with scenario support |
US7865872B2 (en) * | 2006-12-01 | 2011-01-04 | Murex S.A.S. | Producer graph oriented programming framework with undo, redo, and abort execution support |
US8191052B2 (en) * | 2006-12-01 | 2012-05-29 | Murex S.A.S. | Producer graph oriented programming and execution |
US8307337B2 (en) | 2006-12-01 | 2012-11-06 | Murex S.A.S. | Parallelization and instrumentation in a producer graph oriented programming framework |
-
2006
- 2006-12-01 US US11/607,196 patent/US8307337B2/en active Active
-
2007
- 2007-11-30 JP JP2009538644A patent/JP5354601B2/ja active Active
- 2007-11-30 CN CN2007800504497A patent/CN101589366B/zh active Active
- 2007-11-30 WO PCT/EP2007/010407 patent/WO2008064899A2/en active Application Filing
- 2007-11-30 ES ES07856310.3T patent/ES2473765T3/es active Active
- 2007-11-30 EP EP07856310.3A patent/EP2041655B1/en active Active
- 2007-11-30 RU RU2009125050/08A patent/RU2435201C2/ru active
-
2012
- 2012-11-06 US US13/669,837 patent/US9424050B2/en active Active
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10481877B2 (en) | 2006-12-01 | 2019-11-19 | Murex S.A.S. | Producer graph oriented programming and execution |
CN103765376A (zh) * | 2011-06-16 | 2014-04-30 | 柯斯提克绘图公司 | 具有无阻塞并行架构的图形处理器 |
CN103765376B (zh) * | 2011-06-16 | 2017-05-31 | 想象技术有限公司 | 具有无阻塞并行架构的图形处理器 |
US11625885B2 (en) | 2011-06-16 | 2023-04-11 | Imagination Technologies Limited | Graphics processor with non-blocking concurrent architecture |
CN103677789A (zh) * | 2012-09-25 | 2014-03-26 | 深圳市金正方科技有限公司 | 基于grid组件的列表数据展现方法及系统 |
CN105335230A (zh) * | 2014-07-30 | 2016-02-17 | 阿里巴巴集团控股有限公司 | 一种服务处理方法及装置 |
CN104281478A (zh) * | 2014-10-28 | 2015-01-14 | 小米科技有限责任公司 | 更新应用程序的方法及装置 |
CN113778420A (zh) * | 2015-07-24 | 2021-12-10 | 甲骨文国际公司 | 桥接模块系统和非模块系统 |
CN113590134A (zh) * | 2021-08-16 | 2021-11-02 | 北京字节跳动网络技术有限公司 | 一种项目生成方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
EP2041655A2 (en) | 2009-04-01 |
WO2008064899A3 (en) | 2008-12-18 |
ES2473765T3 (es) | 2014-07-07 |
WO2008064899A2 (en) | 2008-06-05 |
US20130061207A1 (en) | 2013-03-07 |
RU2435201C2 (ru) | 2011-11-27 |
US9424050B2 (en) | 2016-08-23 |
US8307337B2 (en) | 2012-11-06 |
US20080134207A1 (en) | 2008-06-05 |
JP2010511233A (ja) | 2010-04-08 |
CN101589366B (zh) | 2013-11-13 |
EP2041655B1 (en) | 2014-03-19 |
RU2009125050A (ru) | 2011-01-10 |
JP5354601B2 (ja) | 2013-11-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101589366B (zh) | 面向生成器图的编程框架中的并行化和植入 | |
CN101617292B (zh) | 面向生成器图的编程和执行 | |
CN101601012B (zh) | 具有场景支持的面向生成器图的编程框架 | |
Ali et al. | From conceptual design to performance optimization of ETL workflows: current state of research and open problems | |
US6016394A (en) | Method and system for database application software creation requiring minimal programming | |
US9128999B2 (en) | Managing software product-line customizations | |
Eckstein et al. | PICO: An object-oriented framework for parallel branch and bound | |
CN107924406A (zh) | 选择用于对实时数据流执行的查询 | |
Morley et al. | GAnet: genetic algorithm platform for pipe network optimisation | |
CN101946261A (zh) | 基于计算机的业务过程的自动化模型产生 | |
US20060020620A1 (en) | Extensible data mining framework | |
Pautasso et al. | JOpera: a toolkit for efficient visual composition of web services | |
Michel et al. | A microkernel architecture for constraint programming | |
Moller et al. | OSIRIS Next: Flexible semantic failure handling for composite web service execution | |
US20200356885A1 (en) | Service management in a dbms | |
Artiba et al. | An architecture of a multi-model system for planning and scheduling | |
BOUSETTA et al. | Generating operations specification from domain class diagram using transition state diagram | |
Chandra et al. | Information technology support for integrated supply chain modeling | |
Masuda et al. | Direction of digital it and enterprise architecture | |
WO2000042529A1 (en) | A system for composing applications based on explicit semantic models, event driven autonomous agents, and resource proxies | |
Clements et al. | Discovering a system modernization decision framework: a case study in migrating to distributed object technology | |
Andres et al. | EDS—collaborating for a high performance parallel relational database | |
Chen et al. | A data-centric distributed framework for MDO management | |
Li et al. | Study of the reusable workflow system | |
Beklen et al. | Data Mining Governance for Service Oriented Architecture |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |