CN1105507A - 模型化系统 - Google Patents
模型化系统 Download PDFInfo
- Publication number
- CN1105507A CN1105507A CN94190007.XA CN94190007A CN1105507A CN 1105507 A CN1105507 A CN 1105507A CN 94190007 A CN94190007 A CN 94190007A CN 1105507 A CN1105507 A CN 1105507A
- Authority
- CN
- China
- Prior art keywords
- component
- storing
- recited
- database
- including means
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 claims abstract description 97
- 238000004590 computer program Methods 0.000 claims abstract description 17
- 230000008859 change Effects 0.000 claims description 41
- 239000002131 composite material Substances 0.000 claims 4
- 230000006870 function Effects 0.000 abstract description 126
- 230000008569 process Effects 0.000 abstract description 58
- 238000011161 development Methods 0.000 abstract description 8
- 230000007246 mechanism Effects 0.000 abstract description 5
- 230000002452 interceptive effect Effects 0.000 abstract description 3
- 238000012545 processing Methods 0.000 description 56
- 238000010586 diagram Methods 0.000 description 12
- 235000008694 Humulus lupulus Nutrition 0.000 description 10
- 238000012360 testing method Methods 0.000 description 8
- 230000003068 static effect Effects 0.000 description 7
- 238000003860 storage Methods 0.000 description 7
- 230000008901 benefit Effects 0.000 description 6
- 230000009471 action Effects 0.000 description 5
- 238000013459 approach Methods 0.000 description 5
- 230000003993 interaction Effects 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 230000000694 effects Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 238000012805 post-processing Methods 0.000 description 4
- 238000003825 pressing Methods 0.000 description 4
- 238000013519 translation Methods 0.000 description 4
- 238000005538 encapsulation Methods 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 239000011800 void material Substances 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 230000002829 reductive effect Effects 0.000 description 2
- 230000008439 repair process Effects 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 241001522296 Erithacus rubecula Species 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000004140 cleaning Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000010219 correlation analysis Methods 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 239000008187 granular material Substances 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000012804 iterative process Methods 0.000 description 1
- 238000005304 joining Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000007935 neutral effect Effects 0.000 description 1
- 230000036961 partial effect Effects 0.000 description 1
- 238000011112 process operation Methods 0.000 description 1
- 230000035755 proliferation Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 230000002194 synthesizing effect Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
面向人的目标编程系统提供了一个交互和动态
的模型化系统以利于计算机程序的增量建立。该增
量建立简化了诸如操作系统及具有图形用户界面的
大的用程序之类的复杂计算机程序的开发。程序被
作为称为部件的单元集来产生。一个部件表示一个
象分类或功能之类的可编译语言元素。三个主要的
功能程序是数据库,编译程序和建立处理。数据库存
储部件和特性。编译程序在编译特性的源码时计算
与部件相关的相关性。建立处理用部件的特性和编
译程序生成的相关性正确有效地在建立处理过程中
对部件的编译排序。
Description
本发明涉及计算机辅助软件工程(CASE),尤其涉及面向人的目标编辑系统(HOOPS),该系统为计算机程序建立提供了交互和动态的环境。本发明使程序员能够用开发复杂程序(例如操作系统(OS)软件及具有图形用户界面(GUI)的大的应用程序)时极为有用的优化增量编译程序对在计算机程序中微小的颗粒源码进行编辑。本发明以使用通用的面向目标编程(OOP)语言C++作为较佳实施例,但其原理适用于面向目标的以及面向过程的其它计算机编程语言,本发明亦可用于建立使用常规的和OOP语言的程序。
面向目标编程(OOP)是建立友好的用户关系以及智能计算机软件的最佳环境。OOP的关键元素是数据封装(data eucapsulation),继承(inheritance)以及多形性(Polymor-phism)。其中,数据封装是指在面向目标的编程中,一个目标的属性和性能被保护而不被其他目标直接存取;继承则是指在面向目标的编程中,目标的一个分类可以被定义为一个一般分类的特例,但自动包括该一般分类的方法及变量定义;而多形性则指面向目标的编程中,通过继承关联的不同分类的目标唯一地响应同一成员功能调用。
这些元素可以用于产生图形用户界面(GUI),尤其是由具有图符,鼠标光标以及选项屏的窗口技术环境所构成的GUI。虽然这三种关键元素在OOP语言中很常见,但大部分OOP语言在使用它们时有很大的区别。
OOP语言的例子包括Smalltalk和C++。Smalltalk实际上不止一种语言,它可以准确地标识为一种编程环境。该语言是在70年代早期由位于施乐普拉阿图研究中心(PARC)的学习研究小组开发的。在该语言中,一个消息被送到一个目标以对目标本身进行评价。消息完成的任务类似于在常规编程语言中功能调用的任务。程序员无需关心数据类型而只须关心生成正确顺序的消息及使用正确的消息。C++则是由Bjarne Stroustrup在1983年在ATT贝尔实验室由C开发而成的。C++的主要概念是分类,它是用户定义型的,分类提供了面向目标的编程特性。C++模块与C模块相兼容而且可随意联接,从而现有的C程序库可由C++程序所用。
运行一个计算机程序的完整过程涉及把程序员写出的源码翻译为机器可执行的格式,通常称为目标码,然后再执行该目标码,翻译的过程是由解释程序或编译程序完成。在解释程序中,翻译是随程序的运行而进行的;而在编译程序中,则是在运行程序之前就进行翻译并将结果作为目标码存贮起来。在一般的编译和执行系统中,翻译和执行是分开进行的,即编译只进行一次。而在解释系统中,例如Smalltalk解释程序,两者是顺序进行。Smalltalk需要解释程序是因为该编程环境的性质在一个目标被实现之前不允许指定专用寄存器或地址空间。
编译程序包括三部分:词法分析程序,语法分析程序,以及代码生成程序。词法分析程序的输入是代表高级语言程序的顺序字符。词法分析程序将该顺序分为顺序标记以输入到语法分析程序,语法分析程序进而将标记分为指令并利用语法规则的数据库来确定每条指令的语法是否正确。若不正确,则产生错误消息。若正确,则指令被分解为顺序基本指令。这些顺序基本指令被送至代码生成程序以产生低级语言。代码生成程序本身通常又分为三部分;中间代码生成,代码优化,以及代码生成,基本而言,代码生成程序接收来自语法分析程序的输出并生成机器语言代码。
为了有助于软件开发,已开发了增量编译程序,在这类程序中,编译程序在批处理操作中生成用于接收的一条语句或一组语句的代码,而与稍后生成的用于其他语句的代码无关。增量编译的优点在于代码可以在部分程序写成时即进行编译和测试,而无需等到整个程序完成时才进行调试处理。但是常规的增量编译程序必须每次都对一个完整的模块进行再处理。
优化编译程序产生高度优化的目标码,从而在许多情况下使得在源码时进行调试比一个非优化编译程序更困难。这一问题源于这一事实,即虽然一个例行程序将被编译以给出适当的答案,但计算该答案的确切方式可能与源码中描述的大相径庭。优化编译程序可以做的一些事情包括删除已知不会影响最终结果的代码或变量,将非变量代码移出循环,合成公用码,在变量不再需要时重新使用分配给这些变量的寄存器等等。如此,源码到目标码或目标码到源码的映射在给定某些优化时可能会有困难。由于变量的值可能并非在例行程序中任意位置处总是可用的,所以可能难于校验变量的值。在优化代码中修改变量值尤为困难。除非专门说明为易失的,否则编译程序会“记住”分配给变量的值并可能在以后的代码中不再读该变量而使用“已知”的值。因此,该值的改变会产生错误的程序结果。
虽然在先有技术的计算机程序建立,测试及开发中有许多优点,但已知的软件开发工具仍给程序员带来极大负担,从而通常要求有直觉的洞悉力。其次,常规的面向批处理的编程系统需要很长的编辑——编译——测试周期,这严重破坏了编程的创造性行为。
因此,本发明的目的是提供一种用于设计计算机程序的面向人的交互动态过程,该过程有助于程序员的精力集中,从而提高生产力。
根据本发明,程序建立可由称为项目(Project)的增量程序模型和三个主要功能程序交互作用而实现。一个程序被作为语义单元来设计,语义单元被称之为部件,这些部件由称为属性的命名数据项目表构成。不是象常规系统那样把程序作为一个松散的文件集存储起来,本发明的面向人的目标编程系统(HOOPS)在项目中把有关程序的所有信息存起来。
在HOOPS中,部件是增量编译的颗粒;即一个部件代表一个可编译的语言元素,例如一个分类或一种功能。一个部件由一组属性组成。这组属性分为两部分:一部分是外部可见的部分(或公开部分),称之为界面,而另一部分是实现(隐私部分),这意味着一个部件仅可依赖于另一部件的界面。一个项目中的所有部件被组织成为一个树结构,树的底部为叫做项目部件的根部件。
三个主要功能程序是数据库,编译程序及建立处理(build mechanism)。数据库持久地存储和检索部件以及其属性。而编译程序则在编译一个属性的源码的同时,负责计算与一个部件有关的相关性。建立处理则利用部件的属性以及编译程序生成的相关性在建立处理过程中正确有效地对部件的编译进行排序。建立处理在任何时候都对一个程序有全局的观察。这与常规方式形成了鲜明对比,在常规方式中,程序由一组相互独立编译的文件所表示。在常规编程环境中采用的文件把处理的特定顺序施加于文件中包含的语义单元。
本发明的系统自动记录部件中的编辑变化,包括记录变化是在界面中还是在实现中。这与只在文件级上进行记录的常规系统形成了对比。相关性分析自动进行且基于部件之间的关系。本系统包括一个机制,它允许编译程序记录一个相关性存在的事实以及是哪种相关性。这使得建立处理可以更准确地确定哪个部件需要编译,从而使本系统与对所有存在相关性的部件进行再编译而无论该再编译是否需要相比更为有效。
常规的编译程序利用编程环境中的构造工具(Con-struction fool)来使软件生成。例如,在一般程序构造中,通常是把总的程序分为模块,模块一般存在各个文件中,每个模块可以以不同方式进行处理,一个Make命令用来管理和维护构成计算机程序的模块;也就是说,Make功能记录程序的模块之间的关系,并且只发出需要使模块在改变之后仍然一致的那些命令。然而,程序员必须要生成一个Makefile说明以定义两个模块之间的关系(相关性)。对Makefile说明的需要意味着程序员必须能决定何时发生相关并把同步相关性的负担加到程序员身上。实际上,这一般意味着存在有不必要的相关性以及遗失必要的相关性,这两者都可能是在建立计算机程序过程中的错误源。
与Make功能相比,本发明的建立处理的不同在于它无须程序员生成象Makefile说明之类的说明。建立处理不需要相关性的预备知识;实际上,它会“发现”部件的相关性并记录这些相关性。这意味着建立处理将在没有先有相关信息时从擦除中建立一个程序。在起始建立操作中,所有部件列在一个变化表中。将试图对变化表上的部件进行编译,但若该编译是由另一部件的编译所决定时,第一个部件的编译或者被中止,或者被暂停,而且第二个部件的编译会试着开始,如此直到找到一个可以编译的部件。然后,建立处理利用在这一过程中先前已产生的任何信息回过头去对先前已被中止或暂停了编译的部件进行编译。
该建立处理对编译排序以致所有界面(Interface)在任何实现(Implementation)之前被编译。这样便减少了可能的交叉相关性的数目并因此提高了效率。建立处理利用有限状态机的形式以将部件的中止的或暂停的编译减至最少的方式来控制部件处理和保证部件的正确排序。
在变化发生(编辑一个部件或加入,删除一个部件)之后的建立操作与起始建立操作相似,其不同之处只在于变化表只包括已经改变的那些部件,而且建立处理使用以前开发的客户机以及源参照表来只对需要重新编译的那些部件再进行编译。由本发明实现的功能级增量编译极大地减少了编程变化到测试的长周期,因为通常只有很少一部分程序将被重新建立。
本程序模型提供了一种存储和再使用界面的内部处理的格式(称为说明特性(Declaration property))的方法。本编译程序存储界面的处理过的内部格式从而可以在编译某些其他部件时更有效地使用它。这与常规系统相反,在常规系统中,所用的界面包括在每个使用的文件中而且每次编译程序都将所用的界面再处理成为内部格式。此外,部件和参数的程序模块提供了一种很自然的方法来存储与特定部件密切相关的信息。该信息可为程序员直接使用,亦可由其它工具间接使用,在常规系统中,这类数据或者在编译结束时被遗忘了,或者只是很松散地与程序源相关联。
错误处理使建立处理避免对与错误部件有关的部件进行编译。建立处理将正确地建立尽可能多的项目,这都与通常停止在第一个错误文件处或即使进行进一步处理,也会重复处理错误包括的文件的常规系统相比较,是完全不同的。错误处理使编译程序发出告警消息而不致使特定部件被错误地处理。这一处理使得即使当告警被发出时也能正确地建立程序。
本发明还提供了一种增量连接程序,它是对增量编译程序的补充,功能被连接到现有可执行的被替代的旧版本中。而无需象常规系统中那样对整组目标文件进行再处理。这一处理把程序开发过程中的连接时间从分种级减至秒种级。
对用户程序任何部分的任何存储信息进行存取可以在其被引用的任何位置处立即进行,从而在程序中提供了一种超级连接方式的导航。有些系统支持一种可以从一个目标的使用到其定义进行快速存取的功能,但HOOPS超出了这些,它可以支持从任何引用到目标(在源码,目标码,资料等之中)的任何信息(即定义,资料,用户,引用等)的立即存取。这样便大大地减少了在开发维护过程中对程序,库,资料进行搜索寻找的时间。
HOOPS通过把窗口分为多个屏面、设置“窥视窗(Viewers)”以及然后确定其间的联系以指示其间的交互作用还提供了允许用户动态地建立浏览工具的动态浏览窗功能。这一功能减少了窗口的激增并加快了导航。
本发明的最佳实施例是以C++、语言书写的并被用来建立C++C语言以及汇编语言的程序,这些语言是当前最流行使用的。利用本发明建立的程序一般使用这三种语言。因此,虽然本发明本身是以面向目标的编程语言写成的面向目标的程序,但其并不仅限于以面向目标的编程语言建立程序。本发明可同样用于以过程语言建立程序。进而,本发明不限于C++语言,它也可由其它编程语言实现。而且本发明不限于只用于这三种语言;也就是说,本发明的原理可用于更为一般应用的面向人的目标编程系统。附图的简述
上述和其它的状况和优点可从以下参看附图对本发明的最佳实施的详细叙述得到更好的理解。其中,
图1展示了一种可以支持高分辨率图形显示设备和光标指示设备(例如鼠标器)的通用计算机系统,本发明即可在该系统上实施;
图2是图1所示通用计算机系统的方框图,详细表示了该计算机系统的主要部件;
图3是以概念的形式表示构成程序的部件集合的方框图;
图4是表示本发明的主要功能程序的方框图;
图5A到图5D为通过建立状态(BuildState)寄存编辑变化的逻辑流程图;
图6是根据本发明在建立处理操作的第一阶段确定可能的部件的逻辑流程图;
图7是根据本发明在建立处理操作的第二阶段处理界面的逻辑流程图;
图8是根据本发明在建立处理操作的第三阶段处理实施的逻辑流程图;
图9是根据本发明由编译程序调用的获取说明(Get-Declaration)功能的逻辑流程图;
图10A和10B展示了有条件编译功能(ConditionallyCompile function)的逻辑流程图;
图11是使用本发明时表示一个典型的成员窥视窗的计算机屏幕的图形表示;
图12展示了根据本发明的计算机屏幕的图形表示,该表示展示了一个浏览窗(browser);
图13展示了图12中浏览窗线路接通时计算机屏幕的图形表示;
图14展示了树状窥视窗中部分扩展的项目的计算机屏幕图形表示;
图15至图18展示了编译一个部件的处理过程中显示的一些屏幕;
图19展示了根据一个最佳实施例的内部和交叉库调用;
图20示出了根据一个最佳实施例的一组安排分类(fixup classes);
图21示出了根据一个最佳实施例的一个连接区;
图22示出了根据一个最佳实施例的目标码存储;
图23示出了根据一个最佳实施例的装入库;
图24示出了根据一个最佳实施例的装入模块的存储变换;以及
图25示出了根据一个最佳实施例的不同参照以及这些参照的连接程序修改。最佳实施例的叙述
参照图1,示出了一个通用计算机10。该计算机10包括一系统单元12,一个高分辨率显示设备14,例如一个阴极射线管(CRT),或者一个液晶显示(LCD)。除了应当具有满足特别是图形用户界面的窗口系统所需的辨率处,显示器的类型并不重要。用户对计算机的输入由键盘16以及光标指示设备,例如鼠标器18完成。鼠标器18与键盘16相连,键盘16又与系统单元12相连。或者,鼠标器18可连到系统单元12的一个专用或串行口。图1所示的通用计算机是Apple Machintosh (苹果计算机的注册商标)及IBM PS/2。其他机型包括各种工作站,例如IBM RISC Sys-tem/6000以及Sum Microsysitems计算机。
图2展示了图1所示通用计算机的基本部件。系统单元12包括与总线24连接的中央处理单元(CPU)21、随机存取存储器(RAM)22、以及只读存储器(ROM)23。CPU 21可以是任何商业化的微处理器,例如Motorola 68030和68040微处理器(它们通常用于Apple Machintosh计算机中)或Intel 80386及80486微处理器(它们通常用在IBMPS/2计算机中)。其他微处理器,例如RISC(用于精简指令集计算机)微处理器(通常用于工作站)也可使用。ROM24存储用于CPU的基本微码,包括基本输入/输出系统(BIOS)。计算机系统10的操作系统(OS)也可存在ROM24中,或者把OS作为初始程序装入(IPL)的一个部分存入RAM22中,RAM22也用于存储部分应用程序以及执行该程序过程中生成的临时数据。总线24可以是Apple NuBus
IBM MicroChannel或工业标准、例如ISA(工业标准适配器)或EISA(扩展的工业标准适配器)总线中的一种。
与总线24相连的还有多个输入/输出(I/O)适配器,包括一个用户接口适配器25以及一个I/O适配器26。键盘16与用户接口适配器25相连,而I/O适配器26与软盘驱动器27和硬盘驱动器28相连。软盘驱动器27允许对数据和程序进行读写到可擦除介质,而硬盘驱动器28通常存储页入页出RAM22的数据和程序。显示设备14通过显示适配器29而与总线相连。通讯适配器30为网络提供接口。其他支持电路(未示出)为集成电路芯片,它们被连到总线24和/或CPU21。这些芯片包括例如控制总线24上的信息量的总线主控芯片。总线24在某些计算机中可以是双总线;一条数据总线和一条允许在图形用户界面中需要的高速显示操作的显示总线。
定义
程序
如在本发明叙述中所使用的那样,HOOPS程序包括一个叫做“项目”的不可建立部件以及一个“可建立部件”集。不可建立部件亦可存储,但在本叙述中,只要谈到不合格的部件,就是指一个“可建立部件”,不可建立部件在建立操作中将不被编译。
部件
一个部件有一个唯一的标识并被命名。不同的部件由某种格式的称为ID的唯一标识符加以区分。有一个称为空IN(NullID)的区别ID,它不属于部件。该ID在一个部件生成时被赋予而且在该部件存在期间不会改变。若一个部件被删除了,它的ID不会再被使用。实际中,ID通常是数字的。
一个部件也有一个“名字”,它包括一串没有白空格的文本。不同部件不必有不同名字。可以获得有所有部件的表格(可能是空的),其中,所有部件的名字与某些给定文本串相吻合。一个部件的名字可以在部件存在期间改变任意多次。
每个“可建立部件”与特定的计算机语言相关,实际上,计算机语言通常由一串文本标识。每种计算机语言有与其相关的编译程序,在对与该种语言相关的任意部件进行编译时使用,实际上,可能使一种给定的计算机语言与不止一个编译程序相关联,这时,部件必须记录语言以及标识该特定编译程序的某些方式。
一种特定的语言有一与之相关的特定的部件种类集以及一特定的特征实施集,通常可能对每一类都不同。如此,在一特定语言中的区别语义元素可以根据需要以不同方式来构成。
部件有“建立状态(Build States)”,“建立状态”是一个来自表“从不编译”(Never Compile),“编译的”(Compiled),“需要编译”(NeedTo Compile),“不确定(Uncertain),“被编译”(Belng Compiled),“编译错误”(Compile Error),以及“不确定错误”(UncertainError)的值。实际上,这些值通常是数值的,每个部件有一对称为“Interfaee Build State(界面建立状态)”和Implementation Build State(实施建立状态)”的“建立状态”。无论是可建立的或不可建立的,每个部件都有这两个建立状态。对不可建立的部件而言,这些建立状态是都“从不编译”的。
“建立状态”可被存取和改变。可以把一个部件的“建立状态”设置到同一值并且不会导致任何影响。改变一个“建立状态”可能明确地确定了副作用,例如改变同一或不同部件的另一特性的“建立状态”,或者例如从一个有改变的表或一个有错误的表中加入或删除引用。
部件用于表达语义语言元素。表达的方式取决于被设计的特定计算机语言。例如在C++中,由部件表达的语言元素的部分表格包括全局数据,全局功能,分类,数据成员,成员功能,typedef,Rnums,仿真程序,宏指令,“或”运算以及结构。通常,每个语义元素将有一相关联的区别种类。
特性
一个部件包括一个命名的“特性”(Property)集。特性表示与该部件有关的一些数据。给定部件的ID和特性名之后,可以存取和检索这些数据。实际上,特性名字通常由标识名字的数字(有时称为记号)在内部表示。也有不属于特性的区别特性名,叫做“空特性”(Null Property)。
与一给定特性相关的数据对不同的部件而言是不同的。改变一个部件给定特性的数据并不意味着改变任何其他部件的同一特性的数据。但是,有可能在一个部件的一个特性中的改变会导致同一或另一部件的另一特性的改变。
“引用(referenee)”包括一个ID和一个特性名。一个引用唯一地标识部分特定的特性数据。一个引用通常被松散地使用,就象它是它所引用的部件和/或特性。实际上,一个引用通常包含不在程序建立过程中直接使用的其他信息,从而标识该特性中的哪种数据版本及哪种数据小节将被引用。
所有部件必须有特性“名字”和“贮存器”,该“名字”特性存有部件的名字,“贮存器”特性则包含了特性名为“空特性”(Null Property)的一个引用。从任一部件开始并相继地用由贮存器ID引用的部件取代前一部件将总是最终导致“项目部件”(Project Component)。该项目的“贮存器ID”是“空ID”(NullID)。如此,所有部件在项目中被描述。
建立特性(亦称为部件建立表)以它们被建立顺序记录在最后建立中被正确编译的特性表。同一特性只应该在该表中最多出现一次。建立特性用于测试和调试。
项目部件
一个项目是一个有特性“变化表(Changelist)”和“错误表(ErrorList)”的部件。变化表特性是一个引用表。这些引用描述部件以及最后一次建立发生了改变的特性。实际上,“变化表”可以由某种可以有效建立一个程序的方式所排序的多个表表示。“错误表”特性也是一个引用表。这些引用描述列在在最后程序建立过程中有错误的表的部件。这些引用都有“错误”特性。与每个引用相关的是一个数码键,它用于关联特定的“错误”特性以确定一个特定消息的位置以及部件特定特性的一个特定子范围。
可建立部件
一个可建立部件必须有这些特性:“说明”(Declaration),“目标码(ObjectCode)”,“客户(Clients)”,“源引用(Source Reference),”,“错误”并可有这些特性:“界面(Interface)”,“实施(Implementation)”,以及成员(members)”。
“说明”特性表示用于编译程序的一个数据高速缓冲存储器。它可能在部件已被编译之前是空的。实际上,它可被认为是编译程序符号表的入口,尽管存储的表示可能与编译程序的内部表示不同。
“目标码”特性表示了用于部件的可执行码。它可能在部件被编译前是空的,或者由于没有目标码与该部件相关而是空的。实际上它通常提供一个手段指出实际码存在何处。
“客户”和“源引用”特性是一对集合,它们包括一个引用和一个“相关性(dependency)。”一个相关性是一个变化表。变化可以表示为从一个区别有限串表中选取的一个文本串。一个称为“公开(Public)”的区别变化用来区分只在实施特性中对部件的引用,这与界面特性中的应用相反。一个相关性可表示为一个位向量,其中若第n位的变化在表中出现,则该位向量的第n位为“1”,否则为“0”。
错误特性包括一个三个一组的表。每一组包括一个“键”,一个特性名,以及一个消息,一个键即为一个数码标识。一个给定键在特定“错误”特性中每回只出现一次,该特性名通常是“界面”或“实施”。该消息则是文本或/和图形的某些部分。
“界面”和“实施”特性是表示部件的源文本的特性。该源文本可作为记号而非文本存起来并在需要时以不同方式访问。由这些特性表示的文本可通过编程环境中的人工编辑而予改变。一种可能性是把界面数据作为结构区存起来,而从结构区中,源文本可按需要重新构造。
“成员”特性是引用集(可能空的),每一引用用于一个“项目”中的部件,而“项目”将该部件作为其贮存器。
属性
一个部件有多个属性。一个属性不是“真”就是“假”。实际上,一个属性通常是由具有由数字“1”和“0”表示值“真”和“假”的一个存储位所表示的,所有部件都有“是可建立的(IsBuildable)”属性,若该属性为“真”,则该部件是可建立的,否则便为不可建立的。一个部件可能总是不可建立的或暂时不可建立的(因为某些暂时条件的作用)。
可建立部件也有“在内部(Islnline)”属性。当该属性为“真”时,部件的“实施”是公开的。这意味着另外的部件可以依赖于实施的改变。若其为“假”,则实施改变永远不会导致其他部件改变。
可建立部件还有“合成(IsSynthetic)”属性。这一属性对在编译程序的建立处理过程中生成的部件为“真”。而对程序员人工生成的部件为“假”。提供合成部件是为了使编译程序生成与系统设定语言元素对应的部件,系统设定语言元素是需要的,但其不必由程序员直接生成。实际上有可能将“合成”属性从“真”改为“假”,例如当一个合成的部件被人工编辑时,但从“假”到“真”的反向改变是绝不允许的。合成部件通常没有“界面”或“实施”特性,但无论在何种情况下,合成部件使“界面”和“实施建立状态”被编译。
类别
每一部件都有一“类别(Kind)”。一个类别是指把部件分为例如共用同样特性或同样语言专用行为的各个组的一个文本串。大部分类别是专用于一种特定的计算机语言并用于指定语义区别语言元素。
然而,有一些由系统定义的类别,它们分别为“项目”,“库”,以及“贮存器”。这些类别只用于不可建立部件。“项目”类别是“项目”部件的类别。“库”类别被用于连接到目标码的一个外部块(例如一个共用库或应用程序)的部件集。“贮存器”类别被用于把其它分量分组以便组织的部件。实际上,类别通常在内部由数码表示。
本发明的综观
图3提供了包括一组部件31的程序的概念表达,每个部件由一组特性组成。这组特性分为两部分,即称为界面的外部可见(公开)部分311以及实施(隐私)部分312。如图3所示,部件只依赖于另一部件的界面。在一个项目中的所有部件被组织成树结构,其底部为根部件32(称为项目部件)。本技术须域的一般技术人员可知,部件不必本身包含实体,但可以包括指向实际代码的存储位置的指针。然而,这一树结构表达有助于展示一个程序的组织,因此,类似的树结构表示被用于其后所述的用户屏幕之一。
图4是一框图,示出了本发明的三个主要功能程序。它们是数据库41,编译程序42,以及建立处理43。数据库41包括一组部件,图中所示为一个项目部件411和一组可建立部件412,这些可建立部件412作为将被建立的一个程序的模型。编译程序42计算数据库41中部件的相关性。建立处理43利用部件特性和编译程序生成的相关性来建立该程序。
程序员可用编辑程序改变该程序。编辑程序必须能够生成和删除部件,尤其是剪裁,复制,粘贴和移动部件。虽然其它更为结构化的途径(例如从选项屏进行选择)亦可采用,但编辑程序必须能够通常通过对文本直接进行修改来改变界面和实施特性中的数据。实际上,编辑程序44通常将包括多个编辑程序,每个用于每种“界面”或“实施”特性,或甚至可能为这些特性中的数据子字段配置编辑程序。
寄存编辑改变的方法
参见图5A到图5D,其中示出了与增量建立有关的编辑程序44所执行的逻辑功能流程图。对于可建立的非合成部件,“建立状态”限于在建立处理之外的“编译的值”和需要编译”值。若“界面”特性不出现,则“界面建立状态”被“编译”。若“实施”特性不出现,则“实施建立状态”被“编译”。图5A,展示了各种编辑状态变化。在标号500处,当系统识别了一个“生成部件”,“再命名部件”,“粘贴部件”,或“编辑界面”命令之时,控制去往功能框510对界面变化进行处理。该变化的详细逻辑显于图5B中。
图5B中,处理始于判别框511,在该处,进行测试以便确定界面建立状态为“需要编译”。若是,则控制通过标号514进行继续编辑,这些动作发生在编辑而非再建立过程中,下一动作很可能是另一编辑动作。若否,则在功能框512处把界面建立状态设置成“需要编译”并因此更新界面变化表。然后,在功能框513处完成实施已改变和贮存器已改变的处理。实施已改变操作的细节示于图5C中而贮存器已改变的操作细节示于图5D中。
图5C示出了与实施已改变有关的详细处理。在判别框571处进行测试以确定实施建立状态是否已设定为“需要编译”。若是,控制通过标号572进行继续编辑。若否,则在功能框573处把实施建立状态设为等于“需要编译”且实施变化表被因此而更新,然后,控制通过标号574返回。
图5D示出了与贮存器改变操作有关的详细逻辑。在功能框542处将进行测试以确定该贮存器是否可建立。若可以,则在功能框543处由部件的贮存器按图5B讨论的细节调用已改变的界面。然后,控制通过标号544返回。
若“编辑实施”命令在图5A的标号560处被检测到,则处理按照功能框570所示和图5C讨论的细节执行实施已改变的动作。
若在图5A的530处检测到“删除部件”命令,则部件A的贮存器已改变处理起始于功能框540,其细节示于图5D中,然后,贮存器A被删除且控制由标号550返回。
若在图5A的580处检测到一个“移动”部件命令,则部件A的贮存器已改变处理起始于功能框590并详细示于图5D中,然后,部件的贮存器被设定于等于新的贮存器,且部件A的界面已改变处理详细示于图5B中,然后,处理由595返回。
确定一个建立的部件的方法。
在建立一个程序的过程中,“项目”部件维护称为编译表的专用引用表。有一个“界面编译表”和一个“实施编译表。”。“项目”还维护一个叫做“内部错误表”的专用引用表。实际上,每个表可由不止一个表物理地表示,以提高效率。
图6展示的处理中,对于“项目”的“改变表”中的每个引用(如功能框601所示),从表的前部选择一个引用。若在表上没有引用,处理由框602所示完成。若引用是一个界面,如在框603所判定的,则在框601处继续处理之前,在功能框604处将该引用的复制放在“界面编译表”中并把“加客户(AddCalcents)”功能调用到该引用。若其特性名不是“界面”,则其特性名为“实施”,如框605所示,并且在判别框606进行测试以确定其“在内部”(IsInLine)属性是否为真,若是,则在框601处继续处理之前,在功能框607处将引用的复制放入“界面编译表”并把“加客户”功能调用到该引用。否则,其特性名肯定是“实施”且其“在内部”属性肯定为“假”,而且在框601的处理继续之前,在功能框608处将该引用的复制放在实施编译表中。
生成编译表功能的伪代码如下:
Create Compile Lists( ){ for each A in ChangeList{ if(A.PropertyName==Interface){ InterfaceCompileList.Add(A); AddClients(A); } else if(A.PropertyName==Implementation){ if(IsInLine==True){ InterfaceCompileList.Add(A); AddClients(A); } else if(IsInLine==False){ ImplementationCompileList.Add(A); } } } }
对在参数中的每个引用“加客户”功能,适当地引用客户、检查引用,并在其“建立状态”被编译时,把该引用的“建立状态”设为“不确定”,把该引用的复制加到适当的“编译表”,并在该引用中调用“加客户”。这一处理称为生成“改变表”的“客户封闭(client closure)”。该“客户封闭”表示需要作为一个建立的结果而被编译的那些部件的子集。实际上,由作为建立过程的编译程序生成的相关性及变化用于避免在“客户封闭”中对尽可能多的部件进行编译。
以下是“加客户”功能的伪码。
AddClients(A){ for each B in A.ClientList{ if(B.BuildState==Compiled){ B.SetBuildState(Uncertain); if(B.PropertyName==Interface){ Interface CompileList.Add(B); AddClients(B); } else if(B.PropertyName==Implementation){ ImplementationCompileList.Add(B); AddClients(B); } } } }
处理“界面”的方法
这是“建立”处理的第二阶段。在“界面编译表”上的项的可能的“建立状态”是“编译”的“被编译,“需要编译”,“不确定”,“编译错误”或“不确定错误”。“界面编译表”被处理直到空了为止,如图7的流程图所示。处理始于701处,从“界面编译表”的前部选择一个引用。如果在表上没有的引用,便在框702处完成处理。若与该引用相关联的部件的界面“建立状态”是“编译的”,“编译错误”或“不确定错误”,如框703所示,则从表的前部去除该引用并且在框701中继续处理。若与该引用相关的部件的界面“建立状态”是“被编译”或“需要编译”,如框704所示,则部件的“建立状态”在框705中被设置为“被编译”。然后,在部件的“界面”调用“编译”功能(它调用编译程序42)。该功能将返回到“异常中止”值,“完成”值和“错误”值之一。若在框706处返回“异常中止”值,则处理在框701处继续。若返回框707的是“完成”值,则部件的“界面建立状态”被设为“编译的”且在处理在框701处继续之前,在框708处把引用从表的前部去除掉。若返回的值是框709处的“错误”,则该部件的“界面建立状态”设定为“编译错误”,则从表的前部去掉该引用,并在701处继续处理之前,在功能框710中部件调用“传播错误”功能。若与该引用相关联的“界面建立状态”为“不确定”,如框711所示,则该部件的“建立状态”在功能框712处设为“被编译”。然后在该部件的“界面”上调用“有条件编译”功能(可以调用也可以不调用编译程序42)。该功能也返回到“异常中止”值,“完成”值和“错误”值之一。若返回到“异常中止”值,则在步骤701处处理继续进行。若返回到框713处的“完成”值,则在功能框708中从表的前部去掉该引用并继续进行框701处的处理。若返回框714处的是“错误”值,则从表的前部去掉该引用并在框701的处理继续进行之前,在功能框715中部件调用“传播错误”功能。
“处理界面”功能的伪码如下:
ProcessInterfaces( ){ until((A=InterfaceCompileList.First)==NIL){ state=A.BuildState; if(A=Compiled-CompileError-Uncertainerror){ InterfaceCompileList.RemoveFirst( ); } else if(A=BeingCompiled-NeedToCompile){ A.SetBuildState(BeingCompiled); value=Compile(A); if(value==Abort){ continue; } else if(value==Done){ A.SetBuildState(Compiled); InterfaceCompileList.RemoveFirst( ); } else if(value==Error){ A.SetBuildState(CompileError); InterfaceCompileList.RemoveFirst( ); PropagateError(A); } } <dp n="d26"/> else if(A=Uncertain){ A.SetBuildState(BeingCompiled); value=ConditionallyCompile(A); if(value==Abort){ continue; } else if(value==Done){ A.SetBuildState(Compiled); InterfaceCompileList.RemoveFirst( ); } else if(value==Error){ A.SetBuildState(UncertainError); InterfaceCompileList.RemoveFirst( ); PropagateError(A); } } } }
“传播错误”功能把一个与部件对应的引用加到“项目”的“内部错误表”中并对在部件的“客户”表中的每个引用执行以下处理:若该引用的“建立状态”是“编译错误”或“不确定错误”,处理继续下一个引用。若该引用的“建立状态”是“需要编译”,处理把它的“建立状态”设为“编译错误”,把引用加到“内部错误表”,并在继续下一引用之前通过引用调用“传播错误”。若引用的“建立状态”为“不确定”,则处理把其“建立状态”设到“不确定错误”,把引用加到“内部错误表”,并在继续下一引用之前通过引用调用“传播错误”。
“传播错误”功能的伪码如下:
PropagateError(A){ for each B in A.ClinentList{ state=B.BuildState; if(state==CompileError-UncertainError)[ continue; } else if(state==NeedToCompile){ B.SetBuildState(CompileError){ INternalErrorList.Add(B); PropagateError(B); } else if(state==Uncertain){ B.SetBuildState(UncertainError); InternalErrorList.Add(B); PropagateError(B); } } } }
处理“实施”的方法
这是“建立”处理的第三阶段,如图8的流程图所示,在“实施编译”表中的每个引用都被处理。该处理始于801处,从实施编译表的前部选择一个引用。若在表上无引用,在框802处完成处理。若该引用的“建立状态”为“不确定”,如框803所示,则在框801继续处理之前在功能框804中把“建立状态”设置为“编译的”。若该引用的“建立状态”是“需要编译”,如框805所示,则在功能框806处编译该部件。从编辑程序42返回的值可能是“完成”和“错误”。若在框807处返回是“完成”,则在框801继续处理之前,在功能框804中把该引用的“建立状态”设为“编译的”。若在框808中返回的值为“错误”,则在框801继续处理之前将该引用的“建立状态”设定为“编辑错误”并在功能框809中部件调用“传播错误”功能。若该引用的“建立状态”是“编译错误”或“不确定错误”,将不作任何处理,注意“实施”的处理在这一阶段是顺序独立的,因为相关性只可以在其内部属性是“真”而且已被处理过的“界面”或“实施”中。
“处理实施”的伪码如下:
Process Implementations( ){ for each A in ImplementationCompileList{ state=A.BuildState; if(A=Uncertain){ <dp n="d29"/> A.SetbuildState(Compiled); } else if(A=NeedToCompiled){ value=Compile(A); if(value==Done){ A.SetBuildState(Compiled); } else if(value==Error){ A.Set Build State(CompileError); PropagateError(A); } } else if(A=CompileError-Uncertain Error){ } } }
支持“建立”处理的编译程序
编译程序24通过″编译″功能被调用,两者亦可作为替代命令名使用。编译程序42处理源文本并标识可能的外部部件的名字。编译程序下一步获取对所有部件的引用表。该编译程序可用语言专用知识(例如部件类别)从该表中删除引用。编译程序然后为文本中标识的每个外部部件调用″获得说明(Get Declaration)″功能。该″编译″功能在调用编译程序之前清除任何现存的错误。这也将从“错误”特性中清除任何错误消息并从″项目″的″错误表″特性中去除任何引用。
编译程序首先调用″获得说明″功能,如图9的流程图所示。″获得说明″功能返回到″异常中止″值,″完成″值,″循环相关性″值或″错误″值的其中之一,也可返回该说明的数据处理起始于框901,在该处,对每个引用的″建立状态″检查该引用。若没有引用要处理,便在框902处完成处理并返回。若该部件的″建立状态″在框903处为″编译的″,则功能返回到″完成″,如框904所示,而且在框901继续处理之前,存储的说明数据也被返回。若部件的″建立状态″在框905处示为″需要编辑″或″不确定″,则相应于该部件的引用在功能框906中被加到″界面编译表″的前部,并在框901继续其处理之前,该功能返回到功能框907的″异常中止″。说明数据在这一情况下不返回。若部件的″建立状态″为框908所示的″被编辑″,则在框901继续处理之前,功能将返回到功能框909处的″循环相关性″。说明数据在这一情况下亦不返回,若部件的″建立状态″是框910所示的″编辑错误″或″不确定错误″册在框901继续其处理之前,功能返回到功能框911的″错误″。在这种情况下亦无说明数据返回。
获得说明功能的伪码如下:
value GetDeclaration(A,Declaration){ Declaration=NIL; state=A.BuildState; <dp n="d31"/> if(state==Compiled){ Declaration=CurrentDeclaration( ); reture(Done); } else if(state==NeedToCompile-Uncertain){ InterfaceCompileList.AddToFront(A); reture(Abort); } else if(state==BeingCompiled){ reture(Circulardependency); } else if(state==CompileError-UncertainError){ return(Error); } } }
在调用“获得说明”功能之后,编译程序如下继续进行下。若返回值为“异常中止”,则编辑程序必须中止处理并返回到“异常中止”值。一个替代实施方案是要编译程序在编译该返回的部件之后中止编译,放弃或重新启动编译程序。这会要求编译程序再次进入。但若不是这样的话,就不会要有上述的重大变化。若返回的值是“编译的”,则编译程序可继续其处理。若采用说明,则将构成“源引用相关性”,而且编译程序会记录相关性及其性质。若返回值是“循环相关性”或“错误”,则编译程序必须中止处理,在部件上调用“设置错误(SetError)”功能,并返回“错误”值。编译程序可以随意地继续处理以便在结束之前可能发现更多的错误。
若对“获得说明”的调用返回到“编译的”,则编译程序将以常规方式继续处理源文本。若在处理过程中遇到任何错误,编译程序将调用部件的“设置错误”功能并返回“错误”值。若没有遇到错误,则编译程序返回“完成值”。若编译程序一直在对一个界面进行处理,则它将存贮该说明特性的新值。
处理“错误”的方法
在调用编译程序以编译一个“界面”或“实施”之前,清除所有现有的“错误”。这将保证所有的错误消息被更新。由于“界面”和“实施”之间的内部相关性以及错误是可传播的,所以将不可能在同一建立上在“界面”和“实施”上得到编译程序错误。
当编译程序遇到错误时,它调用“设置错误”功能,该功能将与错误有关的信息包括错误的位置以及描述错误的消息返回到错误部件。该信息存在“错误”特性和部件合适的源特性(“界面”或“实施”)之中。一个引用也存在允许对所有错误进行方便地存取的“项目”所维护的总错误表中。
错误将传播到任何相关部件因此这些部件无需在其后被编译,这是因为这些编译已知将会失败的。进而,遇到错误后将继续建立并尽可能多的正确建立那些本身并无明显错误的部件或与错误部件有关联的部件。
“设置错误”功能获取由编译程序42传给它的错误消息并在相应于适当特性(界面或实施)的部件的错误特性中生成一个入口,它还在与该错误对应的“项目”的“错误表特性”中生成一个入口,以这一方式生成的两个入口共享同一键标,因此它们保持“连接”。这一功能通常还用一个“粘着标志符”把错误的位置记录在程序源之中,该“粘着标志符”在稍后的用户编辑过程中一直附着到字符的相同范围。
其传送给若编译程序成功地完成了源文本的处理,则其将产生目标码并将其通过“连接程序””功能进行增量连接,另一方面目标码可存到建立处理结束并以常规方式连接。
编译程序现在将更新部件的“源引用(SourceRefer-enuces)”特性以及每个“源引用”的“客户”特性。对在,例如部件A的“源引用”特性中的对例如部件B的每一引用,在部件B的“客户”特性中必须有相应的对部件A的引用(它具有同样的相关性信息)。
编译程序将生成一个“变化”以描述“说明”如何从其先前值发生变化的方式。编译程序将在给其传送了计算出来的变化的部件上调用“传播改变(Propagate Change)”功能。编译程序然后设出“说明”的这一新的值。“传播改变”功能与针对部件的“客户”表中的每个引用的相关性的变化相吻合。若该吻合指出引用的部件已为变化所影响且其“建立状态”不是“编译错误”或“不确定错误”,则其“建立状态”设为“需要编译”。
编译程序有可能要使用“设置错误”功能来发出不同形式告警消息或建议。在这种情况下,若只有告警消息返回,则“编译”功能应返回到“完成”。告警消息将被加到“错误”特性且引用将被加到“项目”的“错误表”特性。否则编译将被认为成功。适当的“建立状态”将被设置为“编译的”,而且没有错误被传播。若只发出了告警或建议,则程序将被完全地及正确地建立。
有条件地编译一个部件的处理
图10A和10B示出了“有条件编译”功能的流程,其中进行了引用。在部件A的“源引用”中的每个部件B在框1001处进行处理。所有部件B均已被处理过,如框1002所指示的那样,则对部件B的处理结束而处理去往图10B以编译部件A。若部件B的“建立状态”是“被编译”或“需要编译”,如框1003所示,则该部件的“建立状态”被设定为“被编译”且该部件在功能框1004中被编译。该编译功能可以返回“完成”值,“异常中止”值和“错误”值其中之一。若返回框1005的是“完成”值,处理将继续在框1001处进行。
若返回的值是框1006的“异常中止”,则功能中止且在框1007中返回“异常中止”。若返回值是框1008中的“错误”,则初始部件的“建立状态”被设置为“不确定错误”,功能被停止,在功能框1009中返回“错误”。若部件B的“建立状态”是“不确定”,如框1010所示,则“建立状态”被设定为“被编译”且该部件在功能框1001中被有条件地编译。“有条件编译”功能可以再次返回“完成”,“异常中止”或“错误”值之一。若在框1005中返回“完成”值,处理在框1001处继续。若在框1012中返回“错误”,部件的“建立状态”被设为“不确定错误”,从“界面编译表”中去除部件A,并在功能结束之前在功能框1014中调用“传播错误”功能。若在框1015中返回“异常中止”,则在功能结束之前在功能框1007中返回“异常中止”。
现在再来看图10B,若所有引用已被处理过,则它们都使″建立状态”被编译。但是,″源引用″之一可能在到此为止的处理过程中已经把一个变化传送给部件,所以它的″建立状态″可以是″被编译″或″需要编译″。因此,部件A的″建立状态″在框1016中决定。若框1017处指出该″建立状态″是″需要编译″,则该″编译状态″被设定为″被编译″且部件A在功能框1018中被编译。编译程序可返回″错误″或″完成″。注意″异常中止″不会发生,因为所有的″源引用″都在这一阶段都被编译了。若在框1019中返回″错误″,则″建立状态″设为″编译错误″并在功能框1020中返回“错误”。若在框1021中返回″完成″,,则″建立状态″设为″编译的″并在功能框1023中返回“完成”。若部件A的″建立状态″是″被编译的″,如框1024所示,则″建立状态″被设为″编译的″并在功能框1023中返回“完成”。
″有条件编译″功能的伪码如下:
value ConditionallyCompile(A){ for each B in A.SourceReference{ state=B.BuildState; if(srate==NeedToCompile-BeingCompiled){ B.SetBuildState(BeingCompiled); value=Compile(B); if(value==Done){ continue; } else if(value==Abort){ return(Abort); } else if(value==Error){ A.SetBuildState(UncertainError); return(Error); } } else if(state==Uncertain); A.SetBuildState(BeingCompiled); value=ConcditionalyCompile(A); if(value==Done){ continue; } <dp n="d37"/> else if(value==Abort){ return(Abort); } else if(value==Error){ A.SetBuildSrate(UncertainError); InterfaeeCompileList.Remove(A); PropagateError(A); } } } state=A.BuildState; if(state==NeedToCompile){ A.SetBuildState(Being Compiled); value=Compile(A); if(value==Done){ A.SetBuildState(Compiled); return(Done); } else if(value==Error){ A.SetBuildState(CompileError); return(Error); } } A.SetBuildState(Compiled); <dp n="d38"/> return(Done); } }
后处理错误的方法
后处理错误的方法是“建立”处理的第四阶段。若在建立过程中发生了任何错误,则“后处理错误(PostPro-cessingErrors)”功能便在建立结束时调用。对在“内部错误表”中的每一引用而言,若引用的“建立状态”是“编译错误”,则“建立状态”改变成“需要编译”。若引用的“建立状态”是“不确定错误”,则“建立状态”变为“编译的”。
当所有在“内部错误表”上的引用已处理完毕后,该表的所有入口被清除。为方便程序员,如果“项目”的“错误表”包含任何的入口,则在“项目”的“错误表”上开一个窗口或浏览窗。
“后处理错误”功能的伪码如下:
PostProcessErrors( ){ for each A in InternalErrorList{ state=A.BuildState; if(state==CompileError){ A.SetBuildState(NeedToCompile); } else if(state==UncertainError){ A.SetBuildState(Compiled); <dp n="d39"/> } } InternalErrorList.ClearAll( ); if(ErrorList.Count!=0){ OpenErrorWindow( ); } }
使用面向人的目标编程系统
根据是建立新的程序还是编辑已有的程序,通过输入项目名或已有的项目名就能够在计算机上启动本发明的面向人的目标编程系统(HOOPS)。当启动HOOPS时,窗口被打开并显示一个与图11所示屏幕类似的初始屏面。该HOOPS打开的初始窗口显示了“项目”部件的“成员”特性以及其直接成员。虽然它初始只显示了直接成员,但同样的窗口用于显示始于项目部件处的每个部件。
在图11的示例中,一个叫做“工资单”(Payroll)的“项目”已被输入。
在HOOPS中的每个窗口都是一个“浏鉴窗”。“浏览窗”是临时观看和编辑工具,用来观看“项目”中的信息。在任何时候按一下窗口中的关闭图符即可将其删除。任何在浏览窗中对“项目”所做的改变都自动加以保存。浏览窗有一个在其被打开时便指定的输入部件。该输入部件的特性显示在一个方格中,而且每个方格显示一个浏览窗特性或为空白,如图12所示。通过在一个方格的右上角对分开的图符进行选择便可把新方格加到浏览窗中。当生成一个新方格时,系统设置的″连线(wiring)”从分裂成新方格的方格中生成。“连线”是在一个方格之间的逻辑关系。一个方格可以有零个或一个连线输入及零个或多个连线作为输出,但连线不可以形成回路。当在一个方格中选择了一个部件时,该选择被转换成对项目中一个部件的引用并成为一个对来自该方格的任何连线的目的地的新输入。通过从选项屏选择的Browser(浏览窗)选项屏中选择Turn on Wiring(接通连线)可接通连线,从而产生图13的显示。采用这一显示,通过在新输入位置按下鼠标器并将其拉至目标方格可以改变两个方格之间的连线。
在许多浏览窗中(例如“成员”,“客户”以及“引用”),部件可由它们的名字以及图符(它们由部件类别区分)所区别。在其他浏览窗中,一个部件的名字只出现在文本中,例如在“源”或“资料”中。中部件层次可由扩展和压缩在“成员”特性显示程序中的贮存器部件进行浏览,产生一个“树”显示,图14便展示了该例子。一个部件的子树的一级可通过按一下部件的循环双态开关加以扩展或压缩。当通过按一下图符或在文本显示中选择其名字在一个显示程序中选择一个部件时,在总选项屏条中的“特性”选项屏被调态以列出那种部件的特性。任何部件的任何特性可以通过选择在显示程序(viewer)的该部件并然后从该“Property(特性)”选项屏中选择一个特性的方式进行观看。这会打开一个包括一个显示程序的新“浏览窗”,该浏览窗显示选定部件的选中特性。
通过指定在何处生成新部件以及该部件的类别,可在一个“成员”或“界面”显示程序中生成部件。该新部件的位置通过选择一个现有的部件或在部件之间放入一插入点而指定。生成的部件的类别电从New显示程序选项屏中选择选项屏项所决定。所有编辑都自动存储。只有改变的部件以及由改变影响的客户才被编译。再编译的部件可通过从Build选项屏中选中的Show Components Build选项屏项进行观看。为观看自最后建立之后改变的部件,要从Build选项屏中选择Show Components Changed.通过从Build选项屏中选择Build,可对一个程序进行编译和连接。Build & Run选项屏也运行该程序。
图15至18展示了在编辑一个部件的处理过程中显示的一些屏面。图15示出了一个“main”功能的“实施”的源码显示。在图16中,功能“main”已由把munberDisks从“7”改为“9””的方式被编辑过了。若程序员现在从图17中示出的Build选项屏中选择Show Components Changed,则图18所示的浏览窗便会出现。在“Implementation Changes”显示程序中(在右侧),功能“main”被显示,指出改变已发生。面向目标连接
本叙述列出了HOOPS连接程序的重要特性,然后给出了最佳实施例的运行时间环境的背景,以及HOOPS数据库以便提供连接出现的上下文。最后,参照最佳实施例给出了有关部件连接部件与HOOPS编译程序的相互作用HOOPS数据库以及系统装入程序的描述。连接程序特性
连接发生在编译处理过程中。没有多余的连接通路。
在建立过程中,只有最新的功能和数据才被再次连接。
在增量发展过程中,某些共享的库空间被用于换取速度。
编译程序与部件和特性相互作用以产生全部目标码和其它连接信息。
当一个程序可交付使用时,一个“出版”步骤将去除增量发展过程中用过的多余的空间和信息,并将程序与HOOPS分离开来。
一个“快速出版(QuickPublish)”步骤将用来快速地从HOOPS中分离应用程序以便与其它程序共享或移至另一机器。
连接程序可扩充,因为该编译可以指定该连接程序通常不处理的新安排。
一个中止的程序可被修改然后再恢复执行而无须被再次装入(有些变化将要求再次装入)。
背景
连接程序在HOOPS内操作并生成由装入程序使用的文件。为了理解连接程序技巧,首先要理解运行时间系统和HOOPS的独特之处。
一个可执行的文件与在其它运行时间系统中极不相同的运行时间相互作用。通常地,一个装入程序必须理解可执行文件的格式。该可执行文件具有描述程序各个方面(例如所需存储器容量,五存地址,任何在装入时需要的再定位信息,以及任何在可执行文件中组装的调试信息)的字段。在一个最佳实施例的运行时间中,装入程序通过一个抽象“T装入模块(TLoadModule)”分类界面与该可执行文件相互作用。该“T装入模块”为所有装入操作提供协议。例如,象指定存储器要求,建立元数据信息以及连接其它共用库的操作都由“T装入模块”的方法提供。借助这一方式,一个装入模块可以有许多方式响应装入请求。
运行时间定义提供了共用库,并允许在装入时刻解决交叉库调用。由于库可以在任何存储单元中装入,所以所有码必须是位置独立的,或必须在装入时刻被修补。除了位置独立码之处,必须在装入时刻解决对其他库的调用,这是由于静态连接程序不知道存储器中的外部库的位置或相对位移。
虽然每个“T装入模块”分类可以许多不同方式实施交叉库调用,但标准方式则是通过在装入时间内修补过的连接区进行转移。该连接区作为在两个库之间的间接转移表。一个外部调用将转移到子程序(JSR)到达该连接区,然后该连接区将转移(JMP)到调用的功能。内部调用可以直接JSR到该调用的功能。一个内部和交叉库调用的实例示于图19中并说明如下。
对f1( )1900的调用是一个内部调用,所以JSR直接去往f1( )1910。对f2( )1920的调用是一个交叉库调用。因此调用去往在装入时刻被修补的外部连接区1930。
HOOPS环境还提供了连接程序的唯一的上下文联系。一个程序被表示为一个部件集。每个部件有一组相关的特性。在每个部件的编译过程中,编译程序将生成和存储用于那一部件的特性。HOOPS建立处理对部件的建立排序,以致于所有界面说明在实施(定义)之前便被编译。
一个HOOPS项目可以包括几个库部件。所有源部件都是这些库部件之一的成员。每个库部件表示一个共用库建立。
综观
为了支持增量连接以及使最终应用程序尽可能小和快,产生了两种不同的装入模块。在开发过程中,HOOPS生成和修改了一个“T增量装入模块(Tincremental-LoadModule)”。有一个第二装入文件,即“T标准装入模块(TSfaudardLoad Module),在出版应用程序之前被生成。
最佳实施例公开了在建立过程中建立和更新代码的途径。把一个“T增量装入模块”转换成“T标准装入模块”涉及一个多余的“出版”步骤。该步骤与一个常规的连接步骤很类似,即每个功能或数据项将被再定位和修补。但是,直到装入时刻才解决外部引用。
编译程序相互作用。
当编译程序生成一个部件的代码时,该编译程序利用修补目标码的一组安排将该代码传送给目标码特性。每个编译的部件使其目标码特性被填充。编译程序使用一个“目标组”模型。即一个部件可以由多种目标码组成。例如,一个功能可以具有一个与其相关的专用静态数据区以及用于该静态数据区的解除程序顺序。一个静态数据项可以有与其相关的构成程序和解除程序序列以便在运行时刻将其初始化。
例如,假设下到部件被编译:
TF00::Print( )
Static int times Called=0;
Cout<<″Hello Caorld:”<<timesCalled<<″\n″;
timesCalled++;
}
该编译程序将生成两部分目标码并使它们与部件TF00::Print相关。有用于功能的目标码,以及用于静态变量timesCalled的4字节的专用数据。
这些目标码可以如下:
TFoo::Print的目标码特性—代码:
0x0000:LINK A6,#0
0X0004: MOVE.L A5,——(A7)
0x0006: PEA L1
0x000A: MOVE.L <timesCalled>,——(A7)
0x000E: PEA L2
0x0012: MOVE.L cout,——(A7)
0x0016: BSR <operator<<(cgar*)>
0x001C: ADDQ.L #8,A7
0x001E: MOVE.L D0,——(A7)
0x0020: BSR <operator<<(int)>
0x0026: ADDQ.L #8,A7
0x0028: MOVE.L D0,——(A7)
0x002A: BSR <operator<<(char*)>
0x0030: ADDQ.L #8,A7
0X0032: ADDQ.L #1,<timesCalled>
0x0034: UNLK A6
0X0036: RTS
L1 DB ″\n″
L2 DB ″Hello world:″
TFoo::Print的目标码特性—数据:
00000000:00000000
与目标码一起,编译程序将规定当该码被重新定位而必须采用的不同安排。这些安排可以如下:
reference to timesCalled@offset 0x0c
reference to cout@offset 0x14
reference to ostream::operator<<(coust char*)@offset 0x18
reference to ostream::operator<<(int)@offset 0x22
reference to ostream::operator<<(coust char*)@offset 0x2c
reference to timesCalled@offset 0x34
注意安排可以指定对与该同一部件(专用静态变量timnesCalled)相关的目标的其它部分的引用,或者对其它部件(例如cout)的引用。
当编辑程序已经完全指定了全部的目标和与一个部件相关的安排时,目标码特性重新对其所有部分再定位并同时刻将其连接起来。在所有部件被编译后没有第二个连接通路。随着每个部件被编译,它也被完全连接。安排表
连接实质上是利用安排表进行迭代并以适当方式修补代码的过程。通过一个分类层级指定不同类型的安排(fixup),每种安排都知道如何计算修补值。例如,一个PC相关的安排知道其必须计算其定位地址和引用的部件之间的差。一个绝对安排知道必须将计算延迟到装入时刻。当连接程序指定了一组安排分类时,新的编译程序可以指定新的安排类型。图20示出了根据最佳实施例的一组安排分类。
地址计算
当每个部件被编译时连接每一部件的主要问题是其引用的一些部件可能还没有被编译。
每个源部件正好是一个库部件的成员。与每个库部件相关的是一个装入模块特性。该装入模块特性作为属于该共用库的所有部件的票据(clearing house)。由于一个安排准备计算一个修补值,所以它询问一个部件地址的装入模块特性。该装入模块特性检查该模块是否已被编译。若是,则返回该部件的地址。若否,则装入模块特性根据该部件的类型执行两个动作。
若该部件的类型是数据部件,则返回到恒定地址。若其为一功能部件,则为该功能生成一个连接区,并返回到该连接区的地址。目标布局
如前所述,当每个部件被编译时,它会在共享库中被分配一个位置。在这样做的时候,某些额外的工作必须完成以便所有引用是一致的。
若该部件是一数据部件,所有它的客户都被告知其位置。某些客户可能开始已与假地址连接,所以这一处理清除了所有客户并为它们提供正确地址。若该部件为一功能部件,则该功能的连接区为新地址所更新。注意这两种途径提供了对功能的间接存取和对数据的直接存取。
此外,分配额外的空间以便目标码未来的更新具有能使用同一区域的较大概率。多出12%提供给功能而多出25%提供给大的数据目标。连接区
如上所述,当向装入模块特性询问功能地址时,它将给出连接区的地址。这意味着每个功能引用都是间接的。图21表示最佳实施例的连接区。
注意不仅内部库调用间接地通过内部连接区,而且对功能的交叉库调用也间接地通过内部连接区(例如对库B中f2的调用,2100,2110,2115及2120)必须这样做。例如以便f2可以在无需更新其内部和外部客户的情况下改变位置,并保持一致性从而使功能指针之类的项正确地工作。此外,所有虚拟表功能指针也将指向内部连接区。
任何引用的但未定义的功能将指向一个公用“未实施( )(Unimplemented)”功能。使所有未编译的功能指向“未实施( )”,不必迫使程序生成存根模块功能就简化了对部分应用程序的装入和运行。
具有内部连接区的另一好处是提供了一个对所有功能的瓶颈。在开发过程中,内部连接区可用于需要功能追踪的活动(例如调试或性能监测)。增量连接
前述讨论已为增量连接的详细讨论奠定了基础。当一个部件被再编译时,新部件的尺寸将与旧部件的尺寸进行比较以确定新部件是否适合当前的位置。若符合,则存储在该位置处,通过安排表进行迭代。然后完成连接。
若新部件的目标码必须被重新定位,则以前的空间被打上无用标记,新目标码被定位到一个新区域。然后安排表被送代。若该部件是一功能,则更新连接入口。连接然后完成。但是,若部件是一数据项,则部件必须在客户表上送代并更新对该部件的引用。然后该数据的连接完成。
注意初始连接和增量连接按照同样步骤进行。在增量更新中唯一多出的步骤是处理当数据项必须改变位置时的情况。目标码存储
目标码和装入模块特性是正常的部件特性。它们象所有其他特性一样,存在HOOPS的数据库中。但是,目标码特性描述目标码但不包含实际位。实际位存储在由装入模块特性所有的数据段中。该装入模块特性有四个不同的数据段,这些数据段是代码未初始化码数据初始化数据以及连接。
图22表示了根据最佳实施例的目标码存储。每个图形目标2200有一个关联的装入模块特性2250,这一装入模块特性2250包括与图形目标2210、2220、2230和2240相关联的各个目标码。由于所有码在编译时都被连接,并且提供对于改变和增量建立的支持,装入模块特性保留了在每个数据段中分配的所有目标的映射。它还试图保留为增长额外的留为空间。该额外空间会浪费一些虚拟存储空间,但并不占用后备存储器或实际存储器。若在反复改变和建立一个应用程序的过程中,该多余空间被消耗了,则分配外加的空间,受到影响的数据段必须被重新定位而且所有对于该字段的出入引用必须被更新。
图23示出了根据最佳实施例的装入库。空白数据段2300,2100,2320和2330代表自由空间。为未初始化数据2340,初始化数据2350、代码2360和连接区2370提供了四个数据段。在HOOPS中,数据段没有空间关系。连接使用装入关系而不使用可在HOOPS本身中的关系。装入
为了运行一个程序,装入程序必须有一个流式“T装入模块”分类。在程序建立过程中,生成一个流式“T装入模块”。当安被装入时,它就装入了在HOOPS生成的数据段。字段被装入的应用程序和HOOPS共用。这提供了两个好处:首先,它大大减少了必须复制的工作量,其次,它使程序在装入时能进行增量更新。
由于装入程序需要一个流式“T装入模块”分类,而且“T增量装入模块(TlucrementalLoadModnle)”要减少流入的信息量,所以必须从开始到结束写出数据流。这意味着对于在一个程序中的大部分改变,“T增量装入模块”将不必是再流式的。该“T增量装入模块”通过使用共享堆阵而从HOOPS中得到所有映射信息。否则,任何数据定位中的改变或功能尺寸会需要建立和流入一个新的“T增量装入模块”。图24是根据最佳实施例的装入模块的存储映象。增量更新
增量连接简化了对一个装入库的修改,无需从执行中将其去除。这要求在HOOPS中所做的改变在运行应用程序的地址空间中反映出来。这是通过把库作为共用数据段而实现的。在HOOPS侧进行的任何修改将在运行程序侧被反映出来。记住在HOOPS一侧,数据段被解释为HOOPS数据库的一部分,而在应用程序一侧,它只是包含目标码的数据段。
活动程序修改的模型如下。调试程序首先停止执行;然后编译修改后的功能,并把修改后的功能装入不同位置,即使它们也适合其现有位置;再对内部连接区进行更新;然后继续该程序。若一个修改的功能是在堆栈上有效的,则旧版程序将执行该功能直到该功能的下一次起动为止。一个替代方案是在有效功能被修改时取消该程序。出版程序
当应用程序被出版时,连接程序将把所有目标码复制到数据库之外的文件中。随着数据段被复制到外部文件,连接程序对所有功能进行再定位及修补。此外,所有内部调用将成为直接调用,且内部连接区将被去除。除了连接和再定位目标码之外,连接程序必须包括虚拟表生成所需的元数据。注意这一步骤基本是一再连接步骤不涉及编译程序。
还需要第二种方式的出版,该方式叫做快速出版。一个快速出版把需要的数据段从数据库复制到外部文件。第二种出版的目的是支持交叉开发或共享工作的快速换向。实施细节分类定义
enum EObjectKind {kCode,kData, kStaticCtor,kStaticDtor}; class TObjectProperty:public TProperty{ public: TObjectProperty( ); virtual TObjectProperty( ); //Compiler Interface virtual void WriteBits(EObjectKind whichOne,LinkSize length, void*theBits,unsigned short alignment); <dp n="d54"/> virtual void AdoptFixup(EObjectKind whichOne,TFixup*the Fixup); //Getting/Setting void* CopyBits(EObjectKind whichOne)const; LinkOffset GetOffset(EObjectKind whichOne)const; LinkSize GetLength(EObjectKind whichOne)const; ELinkSegment GetLinkSegment(EObjectKind whichOne)const; Boolean Contains(EObjectKind whichOne)const; virtual EObjectKind GetPublicKind( )const= 0; //Linding virtual void GetLocation(EObjectKind whichOne,TLocation& fillInLocation)const; TIfeeatoFixupIterator( ) const; };
该目标码特性将安排工作导向各个安排目标
从T Fixup衍生出来的是分类TPC Relative Fixup、TAbsolute Fixup以及TData Relative Fixup。每一安排分类都理解如何对其类型进行恰当的修补。这与常规的编译程序/连接程序的相互作用全然不同,在常规编译程序/连接程序的相互作用中,连接程序必须对不同的经进行解释以决定采取何种行动。这一方式的另一优点在于新体系结构的新编译程序不必担心安排类型不为连接程序所支持。
引用种类
连接程序必须处理4类引用。它们是码对码、码对数据、数据对码以及数据对数据。每类引用被处理(对68K而言)的方式叙述如下:
码对码
例子:Foo( )
编译程序根据上下文以两种不同方式处理这一情况。它可Go pc-relative toFoo( ),或装入Foo( )的地址,并间接地查看寄存器。任何内部调用都可选用其中一种方式。连接程序将总是报告连接区的地址。交叉库调用必须使有装入地址的方式。这些方式都利用在装入时刻被修补的绝对地址。
码对数据
例子:gValue=1;
编译程序产生一个对于gValue的PC-relative存取,但是,若gValue在不同的共用库中时,编译程序将自动生成一个间接引用,连接程序将捕获该间接引用并提供一个装入时刻由外部地址修补过的本地地址。
数据对码以及数据对数据
例子(数据对码):Void(*pfn)( )=Foo;
例子(数据对数据):int pi=i;
由于这两种引用都需要绝对地址,所以它们将在装入时被处理。在装入时刻修补数据引用就象修补外部引用一样。
图25展示了在每类引用中发生的情况。所有这些情况示出了内部使用的情形。若一个外部库要引用相同的部件,该库将在装入时刻接收几个Get Export Address( )调用。响应Get Export Address( )调用,一个库将返回到功能的内部连接区地址,以及数据的真实地址。这使库在被装入时功能在周围移动。
连接区
连接区是完全同构的(每个入口都是:JMP地址)。外部区有不同类别的入口。一个正常功能调用在连接区有一转移指令,而一个虚拟功能调用将有在虚拟表中被索引的形实替换程序。成员功能的指针具有不同形式的形实替换程序。
虽然在特定的编程环境中以实施例的方式叙述了本发明,但本领域的一般技术人员可认识到本发明可在其基本原理的精神下进行修改和变形。本发明的范围受权利要求保护。
Claims (46)
1.一种用于在计算机存储器中产生计算机程序的方法,该方法的特征在于包括以下步骤:
(a)生成多个部件,每一部件表示存储器中的计算机程序的元素;
(b)在储器中生成部件的多个特性;
(c)确定在计算机程序中的部件的相关性;以及
(d)在数据库中组织部件,特性和相关性。
2.权利要求1所述方法,其特征在于包括在至少一个窗口中显示与该计算机程序相关的信息的步骤。
3.权利要求1所述方法,其特征在于包括在与某一部件相关的数据库中存储多个属性的步骤。
4.权利要求1所述方法,其特征在于包括在软盘上存储该数据库的步骤。
5.权利要求1所述方法,其特征在于包括在与该数据库中的部件相关的特性中存储与某一部件相关的信息的步骤。
6.权利要求1所述方法,其特征在于包括在数据库中存取该信息的进行编译步骤。
7.权利要求1所述方法,其特征在于包括在数据库中存取该信息以进行编辑操作的步骤。
8.权利要求1所述方法,其特征在于包括在数据库中存取该信息以进行连接操作的步骤。
9.权利要求1所述方法,其特征在于包括在数据库中存取该信息以进行装入操作的步骤。
10.权利要求1所述方法,其特征在于包括在与某一部件相关的特性中存储名字和贮存器的步骤。
11.权利要求1所述方法,其特征在于包括存储与某一部件相关的说明特性的步骤。
12.权利要求1所述方法,其特征在于包括在与某一部件相关的特性中存储目标码的步骤。
13.权利要求1所述方法,其特征在于包括在与某一部件相关的特性中存储客户的步骤。
14.权利要求1所述方法,其特征在于包括在与某一部件相关的特性中存储引用的步骤。
15.权利要求1所述方法,其特征在于包括在该数据库中存储与每个部件相关的类别的步骤。
16.一种在计算机系统的存储器中产生计算机程序的系统,其特征在于包括:
(a)用于生成多个部件的装置,每一部件表示存储器中的计算机程序的一个元素;
(b)用于在存储器中生成部件的多个特性的装置;
(c)用于确定在计算机程序中的部件的相关性的装置;以及
(d)用于在一个数据库中对部件、特性和相关性进行组织的装置。
17.权利要求16所述系统,其特征在于包括在至少一个窗口中显示与计算机程序相关的信息的装置。
18.权利要求16所述系统,其特征在于包括在与某一部件相关联的数据库中存储多个属性的装置。
19.权利要求16所述系统,其特征在于包括在软盘上存储该数据库的装置。
20.权利要求16所述系统,其特征在于包括在与该数据库中的部件相关的特性中存储与某一部件相相关的信息的装置。
21.权利要求16所述的系统,其特征在于包括在数据库中存取该信息以进行编译的装置。
22.权利要求16所述系统,其特征在于包括在数据库中存取该信息以进行编辑操作的装置。
23.权利要求16所述系统,其特征在于包括在数据库中存取该信息以进行连接操作的装置。
24.权利要求16所述系统,其特征在于包括在数据库中存取该信息以进行装入操作的装置。
25.权利要求16所述系统,其特征在于包括在与某一部件相关的特性中存储名字和贮存器的装置。
26.权利要求16所述系统,其特征在于包括在一建立操作之后,在与某一部件相相关的特性中存储指示状态的建立特性的装置。
27.权利要求16所述系统,其特征在于包括存储与某一部件相关的说明特性的装置。
28.权利要求16所述系统,其特征在于包括在与某一部件相关的特性中存储目标码的装置。
29.权利要求16所述系统,其特征在于包括在与某一部件相关的特性中存储客户和引用的装置。
30.权利要求16所述系统,其特征在于包括在该数据库中存储与每个部件相关的类别的装置。
31.权利要求1所述方法,其特征在于包括存储与某一部件相关的界面特性的步骤。
32.权利要求1所述方法,其特征在于包括存储与某一部件相关的实施特性的步骤。
33.权利要求1所述方法,其特征在于包括存储与某一部件相关的错误特性的步骤。
34.权利要求1所述方法,其特征在于包括存储多个复合部件的步骤。
35.权利要求34所述方法,其特征在于包括存储与某一复合部件相关的成员特性的步骤。
36.权利要求1所述方法,其特征在于包括存储项目部件的步骤。
37.权利要求1所述方法,其特征在于包括存储与项目部件相关的变化表特性的步骤。
38.权利要求1所述方法,其特征在于包括存储与项目部件相关的错误表特性的步骤。
39.权利要求16的系统,其特征在于包括存储与某一部件相关的界面特性的装置。
40.权利要求16的系统,其特征在于包括存储与某一部件相关的实施特性的装置。
41.权利要求16的系统,其特征在于包括存储与某一部件相关的错误特性的装置。
42.权利要求16的系统,其特征在于包括存储多个复合部件的装置。
43.权利要求42的系统,其特征在于包括存储与某一复合部件相关的成员特性的装置。
44.权利要求16的系统,其特征在于包括存储项目部件的装置。
45.权利要求16的系统,其特征在于包括存储与项目部件相关的变化表特性的装置。
46.权利要求16的系统,其特征在于包括存储与项目部件相关的错误表特性的装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/085,271 US5325533A (en) | 1993-06-28 | 1993-06-28 | Engineering system for modeling computer programs |
US08/085,271 | 1993-06-28 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN1105507A true CN1105507A (zh) | 1995-07-19 |
Family
ID=22190525
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN94190007.XA Pending CN1105507A (zh) | 1993-06-28 | 1994-01-06 | 模型化系统 |
Country Status (8)
Country | Link |
---|---|
US (1) | US5325533A (zh) |
EP (1) | EP0664027B1 (zh) |
JP (1) | JPH09506722A (zh) |
CN (1) | CN1105507A (zh) |
AU (1) | AU6021994A (zh) |
CA (1) | CA2144877A1 (zh) |
DE (1) | DE69404439T2 (zh) |
WO (1) | WO1995000903A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106030524A (zh) * | 2014-05-22 | 2016-10-12 | 黄首进 | 用于可视化地实现软件代码的方法和设备 |
Families Citing this family (179)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5390325A (en) * | 1992-12-23 | 1995-02-14 | Taligent, Inc. | Automated testing system |
US6259446B1 (en) | 1992-12-23 | 2001-07-10 | Object Technology Licensing Corporation | Menu state system |
US5315703A (en) * | 1992-12-23 | 1994-05-24 | Taligent, Inc. | Object-oriented notification framework system |
US5537529A (en) * | 1993-04-22 | 1996-07-16 | Apple Computer, Inc. | Apparatus and method for creating versions of computer models and creating communications incorporating created versions therefrom |
WO1994027233A1 (en) * | 1993-05-10 | 1994-11-24 | Taligent, Inc. | Audio synchronization system |
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 |
US5748961A (en) * | 1993-07-12 | 1998-05-05 | Digital Equipment Corporation | Efficient method and apparatus for compiling and linking modules of computer code in a large software system |
US5379432A (en) * | 1993-07-19 | 1995-01-03 | Taligent, Inc. | Object-oriented interface for a procedural operating system |
US6684261B1 (en) * | 1993-07-19 | 2004-01-27 | Object Technology Licensing Corporation | Object-oriented operating system |
CN1125490A (zh) | 1993-09-13 | 1996-06-26 | 塔里根特公司 | 面向目标的视频系统 |
US5627959A (en) * | 1993-09-20 | 1997-05-06 | Oracle Corporation | Method for manipulating graphic objects |
US5548779A (en) | 1993-12-21 | 1996-08-20 | Taligent | System for providing system services for a device to a client using stack definition and stack description of a stack having top, intermediate, and bottom service objects |
US5465362A (en) * | 1993-12-30 | 1995-11-07 | Taligent, Inc. | Object-oriented view-system for displaying information in a windowing environment |
US5546519A (en) * | 1994-02-28 | 1996-08-13 | International Business Machines Corporation | System and method for visually programming iteration |
DE4416704A1 (de) * | 1994-05-11 | 1995-11-16 | Siemens Ag | Integrationstestverfahren für ein objektorientiertes Programm |
US5526515A (en) * | 1994-06-30 | 1996-06-11 | Taligent, Inc. | Hardware-driven clock with object-oriented interface |
JPH0855019A (ja) * | 1994-08-10 | 1996-02-27 | Hitachi Ltd | 視覚的プログラミング方法 |
US5912666A (en) * | 1994-08-23 | 1999-06-15 | Object Technology Licensing Corp. | Object-oriented global cursor tool |
US5692196A (en) * | 1994-08-26 | 1997-11-25 | Silicon Graphics, Inc. | System and method for conditionally compiling a software compilation unit |
US5504892A (en) * | 1994-09-08 | 1996-04-02 | Taligent, Inc. | Extensible object-oriented file system |
US5519818A (en) * | 1994-09-19 | 1996-05-21 | Taligent, Inc. | Object-oriented graphic picking system |
JP3434038B2 (ja) * | 1994-09-22 | 2003-08-04 | 株式会社日立製作所 | ネットワ−ク構築支援システム |
EP0788646B1 (en) * | 1994-10-25 | 1999-04-28 | OTL Corporation | Object-oriented system for servicing windows |
US5652884A (en) * | 1994-11-14 | 1997-07-29 | Object Technology Licensing Corp. | Method and apparatus for dynamic update of an existing object in an object editor |
US5630131A (en) * | 1994-11-14 | 1997-05-13 | Object Technology Licensing Corp. | Method and apparatus for importing and exporting archive files for a graphical user interface |
US5613122A (en) * | 1994-11-14 | 1997-03-18 | Object Technology Licensing Corp. | Object-oriented operating system |
JP4058118B2 (ja) * | 1994-11-15 | 2008-03-05 | 株式会社日立製作所 | プログラム生成システム及び方法 |
US5613097A (en) * | 1994-11-18 | 1997-03-18 | Scott R. Ketterer | Method of cataloging removable media on a computer |
US5752245A (en) * | 1994-12-09 | 1998-05-12 | Object Technology Licensing Corporation | Object-oriented system for configuration history management with a project workspace and project history database for draft identification |
US5659735A (en) * | 1994-12-09 | 1997-08-19 | Object Technology Licensing Corp. | Object-oriented system for program version and history database management system for various program components |
US5553282A (en) * | 1994-12-09 | 1996-09-03 | Taligent, Inc. | Software project history database and method of operation |
KR100367134B1 (ko) * | 1994-12-13 | 2003-03-12 | 유홍준 | 조립식소프트웨어설계부품과그조립및분해방법 |
US6341276B1 (en) | 1995-03-01 | 2002-01-22 | Ibm Corporation | System for selecting a computer solution from a pre-defined set |
US5862379A (en) * | 1995-03-07 | 1999-01-19 | International Business Machines Corporation | Visual programming tool for developing software applications |
US5758122A (en) * | 1995-03-16 | 1998-05-26 | The United States Of America As Represented By The Secretary Of The Navy | Immersive visual programming system |
US5706473A (en) * | 1995-03-31 | 1998-01-06 | Synopsys, Inc. | Computer model of a finite state machine having inputs, outputs, delayed inputs and delayed outputs |
US5815152A (en) * | 1995-04-18 | 1998-09-29 | Logical Software Solutions Corporation | Method and apparatus for defining and evaluating a graphic rule |
US5689711A (en) * | 1995-04-21 | 1997-11-18 | Bardasz; Theodore | Method and apparatus for representing data dependencies in software modeling systems |
US5790856A (en) * | 1995-05-08 | 1998-08-04 | Apple Computer, Inc. | Methods, apparatus, and data structures for data driven computer patches and static analysis of same |
US5713045A (en) * | 1995-06-29 | 1998-01-27 | Object Technology Licensing Corporation | System for processing user events with input device entity associated with event producer which further links communication from event consumer to the event producer |
US5995728A (en) * | 1995-06-30 | 1999-11-30 | Forman; Ernest H. | Computer implemented method of generating and displaying objectives from pros and cons for evaluating decision alternatives |
US6047312A (en) * | 1995-07-07 | 2000-04-04 | Novell, Inc. | System for replicating and associating file types with application programs among plurality of partitions in a server |
US5692129B1 (en) * | 1995-07-07 | 1999-08-17 | Novell Inc | Managing application programs in a computer network by using a database of application objects |
US5854932A (en) * | 1995-08-17 | 1998-12-29 | Microsoft Corporation | Compiler and method for avoiding unnecessary recompilation |
US5812850A (en) * | 1995-11-13 | 1998-09-22 | Object Technology Licensing Corp. | Object-oriented symbolic debugger using a compiler driven database and state modeling to control program execution |
US5815653A (en) * | 1995-11-13 | 1998-09-29 | You; Lawrence L. | Debugging system with portable debug environment-independent client and non-portable platform-specific server |
US6158045A (en) * | 1995-11-13 | 2000-12-05 | Object Technology Licensing Corporation | Portable debugging services utilizing a client debugger object and a server debugger object with flexible addressing support |
US5787245A (en) * | 1995-11-13 | 1998-07-28 | Object Technology Licensing Corporation | Portable debugging service utilizing a client debugger object and a server debugger object |
US5778230A (en) * | 1995-11-13 | 1998-07-07 | Object Technology Licensing Corp. | Goal directed object-oriented debugging system |
US5956479A (en) * | 1995-11-13 | 1999-09-21 | Object Technology Licensing Corporation | Demand based generation of symbolic information |
US6003037A (en) * | 1995-11-14 | 1999-12-14 | Progress Software Corporation | Smart objects for development of object oriented software |
US6298476B1 (en) * | 1995-12-04 | 2001-10-02 | International Business Machines Corporation | Object oriented software build framework mechanism |
US5790132A (en) * | 1995-12-07 | 1998-08-04 | Object Technology Licensing Corp. | Image rendering system with extensible mechanism for providing visual user feedback when an image graphic is selected |
US6421740B1 (en) * | 1995-12-27 | 2002-07-16 | Apple Computer, Inc. | Dynamic error lookup handler hierarchy |
US5822580A (en) * | 1996-01-19 | 1998-10-13 | Object Technology Licensing Corp. | Object oriented programming based global registry system, method, and article of manufacture |
US5812847A (en) * | 1996-02-02 | 1998-09-22 | International Business Machines Corporation | Rule-based method for designing user interfaces for applications |
US5905892A (en) * | 1996-04-01 | 1999-05-18 | Sun Microsystems, Inc. | Error correcting compiler |
US6434739B1 (en) * | 1996-04-22 | 2002-08-13 | International Business Machines Corporation | Object oriented framework mechanism for multi-target source code processing |
US5877768A (en) | 1996-06-19 | 1999-03-02 | Object Technology Licensing Corp. | Method and system using a sorting table to order 2D shapes and 2D projections of 3D shapes for rendering a composite drawing |
US6138271A (en) * | 1996-06-26 | 2000-10-24 | Rockwell Technologies, Llc | Operating system for embedded computers |
US5999972A (en) * | 1996-07-01 | 1999-12-07 | Sun Microsystems, Inc. | System, method and article of manufacture for a distributed computer system framework |
US6266709B1 (en) | 1996-07-01 | 2001-07-24 | Sun Microsystems, Inc. | Object-oriented system, method and article of manufacture for a client-server failure reporting process |
US6304893B1 (en) | 1996-07-01 | 2001-10-16 | Sun Microsystems, Inc. | Object-oriented system, method and article of manufacture for a client-server event driven message framework in an interprise computing framework system |
US5987245A (en) * | 1996-07-01 | 1999-11-16 | Sun Microsystems, Inc. | Object-oriented system, method and article of manufacture (#12) for a client-server state machine framework |
US6434598B1 (en) | 1996-07-01 | 2002-08-13 | Sun Microsystems, Inc. | Object-oriented system, method and article of manufacture for a client-server graphical user interface (#9) framework in an interprise computing framework system |
US6272555B1 (en) | 1996-07-01 | 2001-08-07 | Sun Microsystems, Inc. | Object-oriented system, method and article of manufacture for a client-server-centric interprise computing framework system |
US6038590A (en) * | 1996-07-01 | 2000-03-14 | Sun Microsystems, Inc. | Object-oriented system, method and article of manufacture for a client-server state machine in an interprise computing framework system |
US5848246A (en) * | 1996-07-01 | 1998-12-08 | Sun Microsystems, Inc. | Object-oriented system, method and article of manufacture for a client-server session manager in an interprise computing framework system |
US6424991B1 (en) | 1996-07-01 | 2002-07-23 | Sun Microsystems, Inc. | Object-oriented system, method and article of manufacture for a client-server communication framework |
JP4633203B2 (ja) * | 1996-08-07 | 2011-02-16 | マイクロソフト コーポレーション | シミュレートされたプログラムの実行エラーの検出方法および装置 |
US5790778A (en) * | 1996-08-07 | 1998-08-04 | Intrinsa Corporation | Simulated program execution error detection method and apparatus |
US5930512A (en) * | 1996-10-18 | 1999-07-27 | International Business Machines Corporation | Method and apparatus for building and running workflow process models using a hypertext markup language |
US6901579B1 (en) * | 1996-11-07 | 2005-05-31 | Fujitsu Limited | Generation of source code from classes and maintaining the comment that indicates the role of the class in the generated source code |
US5983016A (en) * | 1996-11-12 | 1999-11-09 | International Business Machines Corporation | Execution engine in an object modeling tool |
US5917498A (en) * | 1996-11-12 | 1999-06-29 | International Business Machines Corporation | Multi-object views in an object modeling tool |
US6243763B1 (en) | 1996-11-12 | 2001-06-05 | International Business Machines Corporation | Method for sending a message to a group and the group broadcasts the message to its members or references within an object-oriented system |
US5991536A (en) * | 1996-11-12 | 1999-11-23 | International Business Machines Corporation | Object-oriented tool for registering objects for observation and causing notifications to be made in the event changes are made to an object which is being observed |
US5893913A (en) * | 1996-11-12 | 1999-04-13 | International Business Machines Corporation | Method for synchronizing classes, objects, attributes and object properties across an object-oriented system |
US5907706A (en) * | 1996-11-12 | 1999-05-25 | International Business Machines Corporation | Interactive modeling agent for an object-oriented system |
US6011559A (en) * | 1996-11-12 | 2000-01-04 | International Business Machines Corporation | Layout method for arc-dominated labelled graphs |
US6496870B1 (en) | 1997-01-31 | 2002-12-17 | Sun Microsystems, Inc. | System, method and article of manufacture for collaboration with an application |
US6438615B1 (en) * | 1997-01-31 | 2002-08-20 | Sun Microsystems, Inc. | System, method and article of manufacture for using multiple bidirectional ports in association with a java application or applet |
US5884078A (en) | 1997-01-31 | 1999-03-16 | Sun Microsystems, Inc. | System, method and article of manufacture for creating an object oriented component having multiple bidirectional ports for use in association with a java application or applet |
CA2201275A1 (en) * | 1997-03-27 | 1998-09-27 | Chris L. Brealey | Locking tool data objects in a framework environment |
US6269475B1 (en) * | 1997-06-02 | 2001-07-31 | Webgain, Inc. | Interface for object oriented programming language |
US6243858B1 (en) * | 1997-07-24 | 2001-06-05 | Casio Computer Co., Ltd. | Program construction assisting system |
US6898782B1 (en) | 1997-10-14 | 2005-05-24 | International Business Machines Corporation | Reference-based associations using reference attributes in an object modeling system |
US6026401A (en) * | 1997-10-14 | 2000-02-15 | International Business Machines Corporation | Locking tool data objects in a framework environment |
US6002874A (en) * | 1997-12-22 | 1999-12-14 | International Business Machines Corporation | Method and system for translating goto-oriented procedural languages into goto-free object oriented languages |
US6249905B1 (en) * | 1998-01-16 | 2001-06-19 | Kabushiki Kaisha Toshiba | Computerized accounting system implemented in an object-oriented programming environment |
WO1999050756A1 (en) * | 1998-03-27 | 1999-10-07 | Infoimage Incorporated | Methods and apparatus for network applications using object tools |
US7278106B1 (en) | 1998-07-14 | 2007-10-02 | Computer Associates Think, Inc. | Method and apparatus for interacting with a source code control system |
KR100311231B1 (ko) | 1998-08-11 | 2001-11-30 | 오길록 | 객체지향분석정보를이용한프레임워크모델링장치및그방법 |
US6167563A (en) * | 1998-09-17 | 2000-12-26 | Unisys Corporation | Method and system for building components in a framework useful in developing integrated business-centric applications |
US6295535B1 (en) | 1998-11-13 | 2001-09-25 | Board Of Trustees Operating Michigan State University | Method and system for creating designs using internet-based agents |
US6253367B1 (en) | 1998-11-18 | 2001-06-26 | Micrografx, Inc. | Method and system for transforming dynamic content for use on the internet |
US6341338B1 (en) | 1999-02-04 | 2002-01-22 | Sun Microsystems, Inc. | Protocol for coordinating the distribution of shared memory |
US6434714B1 (en) | 1999-02-04 | 2002-08-13 | Sun Microsystems, Inc. | Methods, systems, and articles of manufacture for analyzing performance of application programs |
US6378066B1 (en) | 1999-02-04 | 2002-04-23 | Sun Microsystems, Inc. | Method, apparatus, and article of manufacture for developing and executing data flow programs, and optimizing user input specifications |
US6442754B1 (en) * | 1999-03-29 | 2002-08-27 | International Business Machines Corporation | System, method, and program for checking dependencies of installed software components during installation or uninstallation of software |
US6349404B1 (en) * | 1999-06-08 | 2002-02-19 | Unisys Corp. | Object-oriented repository, a system and method for reusing existing host-based application assets for the development of business-centric applications |
US6850891B1 (en) | 1999-07-23 | 2005-02-01 | Ernest H. Forman | Method and system of converting data and judgements to values or priorities |
US6883167B1 (en) * | 1999-08-04 | 2005-04-19 | Texas Instruments Incorporated | Method and system for visual linker |
US6356933B2 (en) * | 1999-09-07 | 2002-03-12 | Citrix Systems, Inc. | Methods and apparatus for efficiently transmitting interactive application data between a client and a server using markup language |
US6487713B1 (en) | 1999-09-24 | 2002-11-26 | Phoenix Technologies Ltd. | Software development system that presents a logical view of project components, facilitates their selection, and signals missing links prior to compilation |
GB2371134B (en) * | 1999-09-24 | 2003-12-17 | Phoenix Tech Ltd | Software development system for facilitating selection of components |
US6925609B1 (en) * | 2000-01-31 | 2005-08-02 | International Business Machines Corporation | Hybrid task and file oriented user interface |
US7035989B1 (en) | 2000-02-16 | 2006-04-25 | Sun Microsystems, Inc. | Adaptive memory allocation |
CN1957328A (zh) * | 2000-03-20 | 2007-05-02 | 凤凰技术有限公司 | 展示方案组件的逻辑视图、便于其选择以及在编译之前的信号遗漏链接的软件开发系统 |
US7334216B2 (en) * | 2000-04-04 | 2008-02-19 | Sosy, Inc. | Method and apparatus for automatic generation of information system user interfaces |
US6546359B1 (en) | 2000-04-24 | 2003-04-08 | Sun Microsystems, Inc. | Method and apparatus for multiplexing hardware performance indicators |
US6802057B1 (en) | 2000-05-03 | 2004-10-05 | Sun Microsystems, Inc. | Automatic generation of fortran 90 interfaces to fortran 77 code |
US6647546B1 (en) | 2000-05-03 | 2003-11-11 | Sun Microsystems, Inc. | Avoiding gather and scatter when calling Fortran 77 code from Fortran 90 code |
US7028250B2 (en) * | 2000-05-25 | 2006-04-11 | Kanisa, Inc. | System and method for automatically classifying text |
US6986130B1 (en) | 2000-07-28 | 2006-01-10 | Sun Microsystems, Inc. | Methods and apparatus for compiling computer programs using partial function inlining |
US6910107B1 (en) | 2000-08-23 | 2005-06-21 | Sun Microsystems, Inc. | Method and apparatus for invalidation of data in computer systems |
US6832365B1 (en) * | 2000-10-11 | 2004-12-14 | Microsoft Corporation | System and method for interacting with computer programming languages at semantic level |
US6957208B1 (en) | 2000-10-31 | 2005-10-18 | Sun Microsystems, Inc. | Method, apparatus, and article of manufacture for performance analysis using semantic knowledge |
US7346842B1 (en) | 2000-11-02 | 2008-03-18 | Citrix Systems, Inc. | Methods and apparatus for incorporating a partial page on a client |
US7194743B2 (en) * | 2000-12-12 | 2007-03-20 | Citrix Systems, Inc. | Methods and apparatus for communicating changes between a user interface and an executing application using property paths |
US7017123B2 (en) * | 2000-12-27 | 2006-03-21 | National Instruments Corporation | Graphical user interface including palette windows with an improved search function |
US7392515B2 (en) * | 2001-02-09 | 2008-06-24 | International Business Machines Corporation | Program components having multiple selectable implementations |
US6925632B2 (en) * | 2001-03-08 | 2005-08-02 | Martin Shiu | System for configuration programming |
US20040117333A1 (en) * | 2001-04-06 | 2004-06-17 | Christos Voudouris | Method and apparatus for building algorithms |
US6907610B2 (en) * | 2001-06-15 | 2005-06-14 | Microsoft Corporation | System and method for building a target operating system from a source operating system |
KR100461535B1 (ko) * | 2001-11-02 | 2004-12-14 | 한국전자통신연구원 | 내장형 시스템을 위한 점진적 원격 로딩 장치 및 그 방법 |
US20030120707A1 (en) * | 2001-12-21 | 2003-06-26 | Sander Bogdan | Systems and methods for exporting functionality of a modularized system |
EP1338959A1 (en) * | 2002-02-15 | 2003-08-27 | Karin Henriette Hackin Fernandez | Universal customisation tool for providing customised computer programs |
TWI242160B (en) * | 2002-04-01 | 2005-10-21 | Shun-Tang Hsu | Method and tools to downsize existing operating systems for embedded applications |
US7062755B2 (en) * | 2002-10-16 | 2006-06-13 | Hewlett-Packard Development Company, L.P. | Recovering from compilation errors in a dynamic compilation environment |
JP3817539B2 (ja) * | 2002-12-06 | 2006-09-06 | 宝一 加藤 | ソースコード作成支援装置及びソースコード作成支援プログラム |
US20040111702A1 (en) * | 2002-12-10 | 2004-06-10 | Chan Kin Ming | Method and apparatus for visual programming |
FR2851670B1 (fr) * | 2003-02-21 | 2005-07-01 | Inst Francais Du Petrole | Methode pour elaborer plus rapidement un modele stochastique representatif d'un reservoir heterogene souterrain, contraint par des donnees statiques et dynamiques incertaines |
AU2003272256A1 (en) * | 2003-03-05 | 2004-09-28 | Expert Consultants, Inc. | System and method for building a component-based architecture |
US7539976B1 (en) | 2003-03-25 | 2009-05-26 | Electric Cloud, Inc. | System and method for intelligently distributing source files within a distributed program build architecture |
US7676788B1 (en) * | 2003-03-25 | 2010-03-09 | Electric Cloud, Inc. | Architecture and method for executing program builds |
US20050114832A1 (en) * | 2003-11-24 | 2005-05-26 | Microsoft Corporation | Automatically generating program code from a functional model of software |
US7376945B1 (en) * | 2003-12-02 | 2008-05-20 | Cisco Technology, Inc. | Software change modeling for network devices |
US7464370B2 (en) * | 2003-12-04 | 2008-12-09 | International Business Machines Corporation | Creating a method from a block of code |
US20050210442A1 (en) * | 2004-03-16 | 2005-09-22 | Ramco Systems Limited | Method and system for planning and control/estimation of software size driven by standard representation of software structure |
US20060064681A1 (en) * | 2004-09-23 | 2006-03-23 | Robinson Douglas B | Method and system for verifying makefile accuracy |
EP1640828A1 (de) * | 2004-09-28 | 2006-03-29 | Siemens Aktiengesellschaft | Erweiterung eines Engineeringsystems während der Laufzeit |
US7594225B2 (en) | 2004-12-20 | 2009-09-22 | Microsoft Corporation | Integrated setup for generating customization XML |
US7685591B2 (en) * | 2004-12-20 | 2010-03-23 | Microsoft Corporation | Customizing a software application through a patch file |
GB2424497A (en) * | 2005-03-24 | 2006-09-27 | Samsung Electronics Co Ltd | Dependency analysis in a software compiler |
US20070006166A1 (en) * | 2005-06-20 | 2007-01-04 | Seagate Technology Llc | Code coverage for an embedded processor system |
US7949995B2 (en) * | 2005-09-14 | 2011-05-24 | Sadlek James M | Visual programming method |
US8312420B1 (en) * | 2005-11-18 | 2012-11-13 | The Mathworks, Inc. | System and method for performing structural templatization |
US20070234278A1 (en) * | 2006-03-02 | 2007-10-04 | Microsoft Corporation | Managing source code in a model-based development environment |
US20080005719A1 (en) * | 2006-06-30 | 2008-01-03 | Morris Robert P | Methods, systems, and computer program products for providing a program execution environment |
US20080005728A1 (en) * | 2006-06-30 | 2008-01-03 | Robert Paul Morris | Methods, systems, and computer program products for enabling cross language access to an addressable entity in an execution environment |
US20080005528A1 (en) * | 2006-06-30 | 2008-01-03 | Morris Robert P | Methods, Systems, and Computer Program Products for Using a Structured Data Storage System to Provide Access to Addressable Entities in Virtual Address Space |
US20080127220A1 (en) * | 2006-06-30 | 2008-05-29 | Robert Paul Morris | Methods, systems, and computer program products for creating an input-value-specific loadable instance of an application |
US20080005752A1 (en) * | 2006-06-30 | 2008-01-03 | Robert Paul Morris | Methods, systems, and computer program products for generating application processes by linking applications |
US20080005727A1 (en) * | 2006-06-30 | 2008-01-03 | Robert Paul Morris | Methods, systems, and computer program products for enabling cross language access to an addressable entity |
US20080005529A1 (en) * | 2006-06-30 | 2008-01-03 | Morris Robert P | Methods, Systems, and Computer Program Products for Providing Access to Addressable Entities Using a Non-Sequential Virtual Address Space |
US8042089B2 (en) * | 2006-10-03 | 2011-10-18 | Electric Cloud, Inc. | Process automation system and method employing multi-stage report generation |
US7725524B2 (en) | 2006-10-03 | 2010-05-25 | Electric Cloud, Inc. | Process automation system and method having a hierarchical architecture with multiple tiers |
US7886265B2 (en) | 2006-10-03 | 2011-02-08 | Electric Cloud, Inc. | Process automation system and method employing property attachment techniques |
US7734890B2 (en) * | 2006-10-06 | 2010-06-08 | Okralabs Llc | Method and system for using a distributable virtual address space |
US20080120604A1 (en) * | 2006-11-20 | 2008-05-22 | Morris Robert P | Methods, Systems, And Computer Program Products For Providing Program Runtime Data Validation |
KR100871563B1 (ko) * | 2007-02-14 | 2008-12-02 | 삼성전자주식회사 | 컴포넌트 기반의 소프트웨어 개발을 위한 장치 및 방법 |
US20080320282A1 (en) * | 2007-06-22 | 2008-12-25 | Morris Robert P | Method And Systems For Providing Transaction Support For Executable Program Components |
US8122440B1 (en) * | 2007-09-26 | 2012-02-21 | Netapp, Inc. | Method and apparatus for enumerating external program code dependencies |
US8856752B2 (en) * | 2007-10-26 | 2014-10-07 | Microsoft Corporation | Monitoring asset state to enable partial build |
US8402438B1 (en) | 2007-12-03 | 2013-03-19 | Cadence Design Systems, Inc. | Method and system for generating verification information and tests for software |
US8156474B2 (en) * | 2007-12-28 | 2012-04-10 | Cadence Design Systems, Inc. | Automation of software verification |
US8464222B2 (en) * | 2008-01-21 | 2013-06-11 | International Business Machines Corporation | Method, apparatus or software for identifying dependencies between components for a given build of a componentised product |
US20090249021A1 (en) * | 2008-03-26 | 2009-10-01 | Morris Robert P | Method And Systems For Invoking An Advice Operation Associated With A Joinpoint |
US8504344B2 (en) * | 2008-09-30 | 2013-08-06 | Cadence Design Systems, Inc. | Interface between a verification environment and a hardware acceleration engine |
US8327323B2 (en) * | 2008-12-08 | 2012-12-04 | International Business Machines Corporation | Automatic copying by ancestor in object-oriented languages |
US9069644B2 (en) | 2009-04-10 | 2015-06-30 | Electric Cloud, Inc. | Architecture and method for versioning registry entries in a distributed program build |
US20110179398A1 (en) * | 2010-01-15 | 2011-07-21 | Incontact, Inc. | Systems and methods for per-action compiling in contact handling systems |
US8621448B2 (en) * | 2010-09-23 | 2013-12-31 | Apple Inc. | Systems and methods for compiler-based vectorization of non-leaf code |
US9529574B2 (en) | 2010-09-23 | 2016-12-27 | Apple Inc. | Auto multi-threading in macroscalar compilers |
US10061577B2 (en) | 2014-10-14 | 2018-08-28 | Electric Cloud, Inc. | System and method for optimizing job scheduling within program builds |
US9262132B1 (en) * | 2015-04-13 | 2016-02-16 | Semmle Limited | Incremental local source code analysis |
US11443067B2 (en) | 2018-01-31 | 2022-09-13 | Salesforce.Com, Inc. | Restricting access and edit permissions of metadata |
US10620935B2 (en) * | 2018-01-31 | 2020-04-14 | Salesforce.Com, Inc. | Version management automation and consistent application builds for different target systems |
Family Cites Families (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4330822A (en) * | 1971-09-02 | 1982-05-18 | Burroughs Corporation | Recursive system and method for binding compiled routines |
US4589068A (en) * | 1983-10-03 | 1986-05-13 | Digital Equipment Corporation | Segmented debugger |
US4943932A (en) * | 1986-11-25 | 1990-07-24 | Cimflex Teknowledge Corporation | Architecture for composing computational modules uniformly across diverse developmental frameworks |
US4809170A (en) * | 1987-04-22 | 1989-02-28 | Apollo Computer, Inc. | Computer device for aiding in the development of software system |
US4910663A (en) * | 1987-07-10 | 1990-03-20 | Tandem Computers Incorporated | System for measuring program execution by replacing an executable instruction with interrupt causing instruction |
US4953084A (en) * | 1987-11-16 | 1990-08-28 | Hewlett-Packard Company | Method and apparatus using variable ranges to support symbolic debugging of optimized code |
US5129086A (en) * | 1988-11-29 | 1992-07-07 | International Business Machines Corporation | System and method for intercommunicating between applications and a database manager |
US5193190A (en) * | 1989-06-26 | 1993-03-09 | International Business Machines Corporation | Partitioning optimizations in an optimizing compiler |
US5201050A (en) * | 1989-06-30 | 1993-04-06 | Digital Equipment Corporation | Line-skip compiler for source-code development system |
US5170465A (en) * | 1989-06-30 | 1992-12-08 | Digital Equipment Corporation | Incremental-scanning compiler for source-code development system |
US5193191A (en) * | 1989-06-30 | 1993-03-09 | Digital Equipment Corporation | Incremental linking in source-code development system |
US5182806A (en) * | 1989-06-30 | 1993-01-26 | Digital Equipment Corporation | Incremental compiler for source-code development system |
US5159687A (en) * | 1989-11-14 | 1992-10-27 | Caseworks, Inc. | Method and apparatus for generating program code files |
US5204960A (en) * | 1990-01-08 | 1993-04-20 | Microsoft Corporation | Incremental compiler |
US5124989A (en) * | 1990-01-08 | 1992-06-23 | Microsoft Corporation | Method of debugging a computer program |
US5140671A (en) * | 1990-01-26 | 1992-08-18 | International Business Machines Corporation | Expert system debugger |
US5257363A (en) * | 1990-04-09 | 1993-10-26 | Meta Software Corporation | Computer-aided generation of programs modelling complex systems using colored petri nets |
US5187789A (en) * | 1990-06-11 | 1993-02-16 | Supercomputer Systems Limited Partnership | Graphical display of compiler-generated intermediate database representation |
US5175856A (en) * | 1990-06-11 | 1992-12-29 | Supercomputer Systems Limited Partnership | Computer with integrated hierarchical representation (ihr) of program wherein ihr file is available for debugging and optimizing during target execution |
EP0496494A3 (en) * | 1991-01-22 | 1993-05-12 | International Business Machines Corporation | Software maintenance system |
-
1993
- 1993-06-28 US US08/085,271 patent/US5325533A/en not_active Expired - Lifetime
-
1994
- 1994-01-06 DE DE69404439T patent/DE69404439T2/de not_active Expired - Fee Related
- 1994-01-06 JP JP7502765A patent/JPH09506722A/ja active Pending
- 1994-01-06 EP EP94906535A patent/EP0664027B1/en not_active Expired - Lifetime
- 1994-01-06 AU AU60219/94A patent/AU6021994A/en not_active Abandoned
- 1994-01-06 WO PCT/US1994/000195 patent/WO1995000903A1/en active IP Right Grant
- 1994-01-06 CN CN94190007.XA patent/CN1105507A/zh active Pending
- 1994-01-06 CA CA002144877A patent/CA2144877A1/en not_active Abandoned
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106030524A (zh) * | 2014-05-22 | 2016-10-12 | 黄首进 | 用于可视化地实现软件代码的方法和设备 |
CN106030524B (zh) * | 2014-05-22 | 2019-11-22 | 黄首进 | 用于可视化地实现软件代码的方法和设备 |
Also Published As
Publication number | Publication date |
---|---|
EP0664027A1 (en) | 1995-07-26 |
US5325533A (en) | 1994-06-28 |
AU6021994A (en) | 1995-01-17 |
EP0664027B1 (en) | 1997-07-23 |
JPH09506722A (ja) | 1997-06-30 |
DE69404439T2 (de) | 1998-02-26 |
CA2144877A1 (en) | 1995-01-05 |
WO1995000903A1 (en) | 1995-01-05 |
DE69404439D1 (de) | 1997-09-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1105507A (zh) | 模型化系统 | |
CN1102934A (zh) | 增量连接系统 | |
US5956479A (en) | Demand based generation of symbolic information | |
JP4195479B2 (ja) | インクリメンタル生成システム | |
US5850554A (en) | Compiler tool set for efficiently generating and easily managing multiple program versions of different types | |
CN1181428C (zh) | 软件翻译的内省编辑器系统、程序和方法 | |
CN110825369A (zh) | 一种基于java语言的代码自动生成的方法 | |
CN1591405A (zh) | 版本兼容的数据处理系统 | |
CN1570870A (zh) | 终极管道和最优重排技术 | |
JPH05241844A (ja) | クラス編成装置及び方法 | |
CN101052948A (zh) | 对象过程图应用程序开发系统 | |
US20080313208A1 (en) | Apparatus, system, and method for automated context-sensitive message organization | |
JPH05241845A (ja) | 言語中立のソース・プログラムからオブジェクト・ロード可能モジュールを生成するシステム及び方法 | |
CN1949187A (zh) | 一种程序调测系统及方法 | |
JPH05274151A (ja) | クラスをシャドウ化するシステム及び方法 | |
US8776010B2 (en) | Data type provider for a data store | |
CN1633638A (zh) | 在外貌特征模式中带有总功能特性的连接实体 | |
JP2002527814A (ja) | コンポーネント・ベース型ソース・コード・ジェネレータ | |
US7032219B2 (en) | System and method for implementing a project facility | |
KR20090042242A (ko) | 플라즈마 프로세싱 시스템 컴포넌트 분석 소프트웨어 및 이를 생성하기 위한 방법 및 시스템 | |
CN1957328A (zh) | 展示方案组件的逻辑视图、便于其选择以及在编译之前的信号遗漏链接的软件开发系统 | |
JP4939007B2 (ja) | システム設計支援プログラム | |
CN1105508A (zh) | 动态浏览窗系统 | |
US20180322129A1 (en) | Identifying resources in user interfaces for feedback | |
Abraham | Model driven development: a comprehensive case study |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C01 | Deemed withdrawal of patent application (patent law 1993) | ||
WD01 | Invention patent application deemed withdrawn after publication |