CN1102934A - 增量连接系统 - Google Patents

增量连接系统 Download PDF

Info

Publication number
CN1102934A
CN1102934A CN94190010A CN94190010A CN1102934A CN 1102934 A CN1102934 A CN 1102934A CN 94190010 A CN94190010 A CN 94190010A CN 94190010 A CN94190010 A CN 94190010A CN 1102934 A CN1102934 A CN 1102934A
Authority
CN
China
Prior art keywords
parts
characteristic
program
renewal
object 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.)
Pending
Application number
CN94190010A
Other languages
English (en)
Inventor
罗杰·P·劳伦斯
约翰·R·丹斯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Taligent Inc
Original Assignee
Taligent Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Taligent Inc filed Critical Taligent Inc
Publication of CN1102934A publication Critical patent/CN1102934A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/48Incremental compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management

Abstract

一个面向人的目标编程系统提供了一个交互和动态的处理以助于计算机程序的增量建立,该增量建立简化了诸如操作系统以及有图形用户界面的大的应用程序之类的复杂计算机程序的开发。一个程序被成型为一个称为部件的单元集。一个部件表示一个象分类或功能性之类的可编译语言成分。三个主要的功能性是数据库,编译程序和建立处理。一个增量连接程序在建立处理中操作以生成由装入程序所用的文件。

Description

增量连接系统
本发明涉及计算机辅助软件工程(CASE),尤其涉及面向人的目标编程系统(HOOPS),该系统为计算机程序建立提供了交互和动态环境。面向人的目标编程系统(HOOPS)使程序员得以由优化增量编译程序而对计算机程序中的微小的颗粒源码进行编辑。本发明的主题是一增量连接程序,它在HOOPS中操作以生成由一个输入程序所用的文件。本发明是以使用通用的面向目标编程的(OOP)语言、C++作为最佳实施例的,但其原理也适用于面向目标的以及过程计算机编程语言,本发明亦可用于建立使用常规的和OOP语言的程序。
OOP是建立用户使用方便的以及智能计算机软件的最佳环境。OOP的要素是数据密封性(data encapsulation),继承性(inheritance)以及多形性(Polymorphism)。这些元素可以用于产生图形用户接口(GUI),尤其是产生具有图符、鼠标光标以及选项单视窗环境的为特征的。所构成的GUI。虽然这三种要素属OOP语言所共有,但在实施方式上大部分OOP语言彼此间有很大的区别。
OOP语言的例子包括Smalltalk、目标Pascal和C++。Smalltalk实际上不止是一种语言,更准确地讲,它应该被认为一种编程环境。该语言是在70年代早期施乐普拉阿图研究中心(PARC)的研究部开发的。在该语言中,一个信息被送到一个目标以对其进本身行评价。信息完成的任务类似于在常规编程语言中的功能调用。程序员无需关心数据类型而只须关心生成正确顺序的信息及使用正确的信息。Object Pas-cal是用于苹果公司的Machintesh  计算机上的语言,苹果公司在Pascal语言的设计者一尼古拉斯·沃斯(Niklaus.With)—的合作下开发出了Object Paseal语言。C++语言则是由斯托斯特拉普(Bjarne Stroustrup)在1983年在AT&T贝尔实验室开发而成的,它出C语言的扩展。C++的主要概念是分类,它是用户定义型的。分类提供了面向目标的编程特性。C++模型与C模型相兼容而且可随意联接,从而现有的C程序库可由C++程序所用。最广泛使用的基于目标和面向目标的编程语言源于60年代由挪威的戴沃(O-J.Dah1)梅·阿汉(B.Myhrhaug)以及耐·培得(K.Nygard)所开发的Simula语言。有关OOP的信息可参见布克(Grady Booch)所著的“Object Oriented Design with Applications”(Benjimin/Cum-mings Publishing Co.,Inc.,Readwood city,California,1991)。
运行一个计算机程序的完整过程涉及把程序员写出的源码译为机器可执行的格式,通常称为目标码,然后再执行该目标码。翻译的过程是由编译程序或解释程序完成。在解释程序中,翻译是随程序的运行而进行的;而在编译程序中,则是在运行该程序之前就进行翻译并将结果作为目标码存贮起来。也就是说,在一般的编译和执行系统中,翻译和执行是分开进行的,即编译只进行一次。而在解释系统中,例如Smalltalk解释程序,两者是顺序进行。因为直到一个目标被实现之前,编程环境的性质不允许指定专用寄存器或地址空间,所以,Smalltalk需要解释程序。
一个编译程序包括三部分;词法分析程序,语法分析程序,以及代码生成程序。词法分析程序的输入是代表高级语言程序的一序列字符。词法分析程序将该序列分为一个标记序列以输入到语法分析程序。语法分析程序进而将该序列标记分为指令并利用语法规则的数据库来确定是否每条指令的语法正确与否。若不正确,则产生错误信息。若正确,则指令被分解为一基本指令系列。这些基本指令被送至代码生成程序以产生低级语言。代码生成程序本身通常又分为三部分;中间代码生成,代码优化,以及代码生成。基本而言,代码生成程序接收来自语法分析程序的输出并生成机器语言码。
为有助于软件开发而开发出了增量编译程序,其中,编译程序在批处理操作中生成用于接收的一条语句或一组语句的代码,而与稍后生成的用于其他语句的代码无关。增量编译的优点在于只有被一转变所影响的代码才被编译。这一行为导致了极快的编译和调试代码的周期。
优化编译程序产生高度优化的目标码。从而在许多情况下使得在源级进行调试比一个非优化编译程序更困难。这一问题源于这一事实,即虽然一个例行程序将被编译以给出适当的答案,但计算该答案的确切方式可能与源码中描述的大相径庭。优化编译程序可以实现的一些事情,包括删除被确认属不会影响最终结果的代码或变量,将非变量代码移出循环,合成公用码,在变量不再需要时重新使用分配给这些变量的寄存器等等。如此,源码到目标码或目标码到源码的映射在给定某些优化时可能会有困难。由于变量的值可能并非在例行程序中任意位置处总是可用的,所以可能难于校验变量的值。在优化代码中修改变量值既使不是完全不可能,也是尤为困难。除非专门说明为易失的,否则编译程序会“记住”分配给变量的值并可能在以后的代码中不再读该变量而使用“已知”的值。因此,在该值中的改变产生了错误的程序结果。
虽然在先有技术的计算机程序设置、测试以及开发中有许多优点,但已知的软件开发工具仍给程序员带来极大负担,从而通常要求有直觉的洞悉力。其次,常规的面向批处理的编程系统需要很长的编辑——编译——测试周期,这对编程的创造性行为带来的极大的不利影响。
一旦在常规编程系统中完成了编译,称为装入程序的程序将执行装入和连接编辑这样两个功能。该装入处理包括获取可重新定位的机器码,修改可重新定位的地址,并把存储器中修改后的数据和指令放入适当的位置。而连接编辑程序则从几个有可能重新定位的机器码的文件中生成一个程序。这些文件可以是几个不同编译的结果。
因此,本发明的一个目的是提供一种增量连接程序,该增量连接程序在用于建立计算机程序的面向人的交互动态处理中操作。
在交互动态的建立过程中,程序建立可由增量程序模式(称为项目Project)和三个主要功能性交互而成。一个程序被成型为语义单元,该语义单元被称之为成分并由称为特性的命名数据项目表构成。不是象常规系统那样把程序作为一个松散的文件集合存储起来。本发明的面向人的目标编程系统把项目中有关程序的所有信息存起来。本发明的计算机程序的建立有助于使程序员的生产力大为提高。
根据本发明,提供了一种增量连接程序,它在HOOPS运行并且其功能连到现有的执行程序,从而避免对一组完整的目标文件进行再处理。在本发明的实施中,计算机程序被成型为一个部件集,为计算机程序提供模型的部件被存储以便在建立处理中被存取。存储的部件被依序存取,而且用一个编译程序计算与每个部件关联的相关性以开发一个相关性表。然后,根据相关性表编译部件以产生一个更新过的目标模型。最后,更新的目标模型通过对现有可执行文件的更新而被连接。
本发明的最佳实施例以C++完成的并用C++C以及汇编语言进行的程序建立,这些语言是当前最流行使用的。本发明的程序的建立一般可用这三种语言完成。虽然本发明本身是以面向目标的编程语言写成的面向目标的程序,但其并不仅限于以面向目标的程序语言建立程序。本发明可同样用于以过程语言建立程序。进而,本发明不限于C++语言,它也可由其他编程语言实现。而且本发明不限于只用于这三种语言;也就是说,本发明的原理可用于更为一般应用的面向人的目标编程系统。
上述的以及其它目的,所涉及的方面及其优点可从下面参考附图对本发明的最佳实施例的详细叙述有更好的理解。其中,
图1展示了一种可以支持高分辨率图形显示设备和光标指示设备(例如鼠标器)的常规计算机系统,本发明即可在该系统上实施;
图2是图1所示计算机系统的主要部件框图;
图3是构成一个程序的部件集的概念形式框图;
图4是本发明的原理功能框图;
图5A到图5D为通过建立状态(BuildState)寄存编辑变化的逻辑流程图;
图6是根据本发明在建立处理操作的第一阶段确定可能的部件的逻辑流程图;
图7是根据本发明在建立处理操作的第二阶段对界面进行处理的逻辑流程图;
图8是根据本发明在建立处理操作的第三阶段对实施进行处理的逻辑流程图;
图9是根据本发明由编译程序调用的获取说明(GetDedaration)功能的逻辑流程图;
图10A和10B展示了有条件地编译功能(CorditionallyCompile function)的逻辑流程图;
图11是使用本发明时表示一个通常数目的窥视窗口的计算机屏幕的图示表示;
图12展示了根据本发明的计算机屏幕的图示表示,该表示展示了一个浏览窗(Browser)接通时的情况;
图13展示了图12中浏览窗线路接通时计算机屏幕的图示表示;
图14展示了树状窥视窗中部分扩展的项目的计算机屏幕图示表示;
图15至图18展示了在编译一个部件的处理过程中显示的一些屏幕;
图19展示了根据一个最佳实施例的内部和交叉库调用;
图20展示了根据一个最佳实施例的一组安排分类(fix-up dasses);
图21展示根据一个最佳实施例的一个连接区;
图22展示根据一个最佳实施例的目标码存储;
图23展示根据一个最佳实施例的装入库;
图24展示根据一个最佳实施的装入模块的存储器映射;
图25展示根据一个最佳实施例的不同类型的基准以及这些基准的连接程序的修改;以及
图26,27,28和29是流程图,示明了根据一个最佳实施例的与连接关联的逻辑。
参照图1,示出了一个常规计算机10。该计算机10包括一系统单元12,一个高分辨率显示设备14,例如一个阴极射线管(CRT)或者一个液晶显示器(LCD)。除去要求用于显示视窗系统通常是图形用户界面需要高分辨率这一点十分重要以外,这种显示类型并不重要。用户对计算机的输入由键盘16以及光标指示设备,例如鼠标器18完成。鼠标器18与键盘16相连并进而与系统依次相连。而且鼠标器18可连到系统单元12的一个专用或串行口。图1所示的计算机是Ap-ple Machintosh(苹果计算机的注册商标)以IBM PS/2。其他机型可包括各种工作站,例如IBM RISC System/6000以及Sun Microsystems计算机。
图2更为详细地展示了图1所示计算机的基本部件。系统单元12包括一个连到总线24上的中央处理单元(CPU)21,随机存取存储器(RAM)22,以及只读存储器(ROM)23。CPU21可以是任何商业化的微处理器,例如Motorpla 68030和68040(它们通常用于Apple Maethintosh  计算机中)或In-tel 80386及80486(它们通常用在IBM PS/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而与总线24相连。通讯适配器30为网络提供接口。其他支持电路(未示出)为集成电路芯片,它们被连到总线24和/或CPU21。这些芯片包括例如控制总线24上的信息量的总线主控芯片。总线24在某些计算机中可以是双总线;一个数据总线和一个允许在图形用户界面中需要的高速显示操作的显示总线。
定义
程序
如在本发明中所叙述的,一个HOOPS程序包括一个叫做“项目”的不可建立的部件以及一个“可建立的部件”的集合。不可建立的组成,部分亦可被存储,但在本叙述中,只要到不合格的部件,就是指一个“可建立的部件”,不可建立的部件在建立操作中将不被编译。
部件
一个部件有一个唯一的标识并被命名。不同的部件由称为ID的不同形式的唯一标识符加以区分。有一个称为空ID(NullID),它不属于任何部件。该ID在一个部件生成时被赋予而且在该部件存在期间不会改变。若一个部件被删除了,它的ID不会再被使用。实际中,ID通常是数字的。
一个部件也有一个“名字”,它包括一串没有白空格的文本。不同部件不必须要求有不同名字。可以获得包括所有部件的表(可能是空的),其中所有部件的名字与某些给定文本串相吻合。一个部件的名字可以在该部件存在期间被改变任意次。
每个可建立的部件件都与特定的计算机语言相关。实践中,计算机语言通常由一串文本标识。每一计算机语言有一个与其相关的编译程序以供当以该语言编译任何部件所用,实际上,可能使一种给定的计算机语言与不止一个编译程序相关联。在本例中,部件必须记录语言以及标识该特定编译程序的某些方式。
一种特定的语言有一与之相关的特定的部件种类集合以及一特定的特性实施集,通常可能每一种类都不同。如此,在一特定语言中的区别语义元素可以根据需要以不同方式进行组合。
部件有“建立状态(Build States)”。“建立状态”是来自“不要编译”(Never Compile)、“已编译的”(Compiled)、“需要编译”(NeedTo Compile),“不确定”(Uncertain),“被编译”(Be-ing Compiled),“编译错误”(CompileError),以及“不确定错误”(UncertainError)的表中的一个取值。实际中,这些值通常是数码,每个部件有称为“界面建立状态(Interface BuildState)”和“实施建立状态(Implementation Build State)”的一对。“建立状态”无论是可建立的或不可建立的,每个部件都有这两个建立状态。对不可建立的部件而言,这些建立状态都是“不可编译”的。
“建立状态”可被存取和改变。可以把一个部件的”建立状态”再次设置到同一值并且不会导致任何影响。改变一个“建立状态”可能完好地定义边界效应,便如改变有同样或不同部件的一特性的“建立状态”,或者例如从一个有改变的表或一个有错误的表中加入或删除等此参考项。
部件用于表达语义语言元素。表达的方式取决于将被模块化的特定计算机语言。例如在C++中,由部件表达的语言元素表格包括全局数据,全局功能,分类,数据成员,成员功能,typedef,Rnums,仿真程序,宏指令,“或”运算以及结构。通常,每个语义元素将有一相关联的区别种类。
特性
一个部件包括一个命名的“特性”(Property)集合。一个特性表示与该部件有关的一些数据。在给定部件的ID和特性名之后,可以存取和检索这些数据。特性名字通常由标识名字的数字(有时称为记号)在内部表示。也有不属于特性的区别特性名,叫做“空特性”(NullProperty)。
与一给定特性相关的数据对不同的的部件而言是不是的。改变一个部件给定特性的数据并不意味着改变用于任何其他部件的同一特性的数据。但是,有可能在一个部件的一个特性中的改变会导致同一或另一部件的另一特性的改变。
“引用(reference)”包括一个ID和一个特性名。一个引用唯一地标识特定的部分的特性数据。一个引用通常被松散地使用,就象它是部件和/或与之相关的特性。实际上,一个引用通常包含不在程序建立过程中直接使用的其他信息,从而标识该特性中的哪种数据版本及哪种数据子节将被引用。
所有部件必须有特性“名(Name)”和“贮存器(Container)”,该特性“名”存有部件的名字。“贮存器”特性则包含了其中的特性名为“空特性”的一个单一引用。从任一部件开始并相继由贮存器ID引用的部件取代前一部件将总是最终导致“项目部件”(Projeet Component)。该项目的“贮存器ID”是“空ID(NullID)”。如此,所有部件在项目中被描述。
建立特性(亦称为部件建立表)以建立顺序记录最后建立中被正确编译的特性表。相同的特性应该在该表中最多出现一次。建立特性用于测试和调试。
项目部件
一个项目是一个附带有特性“变化表(Changalist)”和“错误表(ErrorList)”的部件。特性变化表是一个引用用。这些引用描述部件以及最后一次建立以来发生了改变的特性。实际上,“变化表”可以由某种可以有效建立一个程序的过程中有效地存储的多个表来表示。特性“错误表”也是一个引用表。这些引用描述在最后程序建立过程中列为有错误的部件。这些引用都有“错误”特性。与每个引用相关的是一个数码键,它用于关联特定的“错误”特性以确定一个专用消息的位置以及部件特定特性的一个特定子范围。
可建立部件
一个可建立部件必须有这些特性。“说明(Declaration)“目标码(ObjectCode)”、“客户(Clients)”、“源引用(Source Ref-erence)”、“错误”,并可有这些特性:“界面(Interface)”、“实施(Implementation)”以及“成员(members)”。
“说明”特性表示用于编译程序的一个数据高速缓冲存储器。它可能在部件已被编译之前是空的。实际上,它可被认为是编译程序符号表的入口,尽管存储的状况可能与编译程序的内部情况不同。
“目标码”特性表示了用于该部件的可执行码,它可能在部件被编译前是空的,或者由于没有目标码与该部件相关而是空的。实际上,它通常提供一个手段指向实际码所存之处。
“客户”和“源引用”特性是一对集合。它们包括一个引用和一个“相关性(dependency)”。一个相关性是一个变化表。变化可以表示为从一个区别的有限表串中选取的一个文本串。一个称为“公开(Pubpic)”的区别的变化用来区分只在实施特性性中对部件的引用,这与界面特性中的应用相反。一个相关性可表示为一个位向量,其中若第n位的变化在表中表示,则该位向量的第n位为“1”,否则为“0”。
错误特性包括一个三个一组的表。每一组包括一个“键”,一个特性名,以及一个信息,一个键即为一个数码标识。一个给定键在特定的“错误”特性中在一个时刻只出现一次,该特性名通常是“界面”或“实施”。该信息则是文本或/和图形的某些部分。
“界面”和“实施”特性表示部件的源文本。该源文本可作为记号而不是作为文本存起来并在需要时以不同形式访问。由这些特性表示的文本可通过编程环境中的人工编辑而予改变。一种可能性是把界面数据作为结构区存起来,而从结构区中,源文本可按需要重新构造。
“成员”特性是引用集合(可能空的),每一引用用于“项目”中的每个部件,而“项目”将该部件作为其贮存器。
属性
一个部件有多个“属性”。一个属性为“真”或“假”。实际上,一个属性通常是由存储器的单比特值所表示的,由数字“1”和“0”表示的一个该属性的真或假。所有部件都有“是可建立的(IsBuildable)”属性。若该属性为“真”,则该部件是可建立的;否则便为不可建立的。一个部件可能总是不可建立的或暂时不可建立的(因为某些暂时条件的作用)。
可建立的部件也有“在内部(Isinline)”属性。当该属性为“真”时,该部件的“实施”是公开的,这意味着另外的部件可以依赖于实施的改变。若其为“假”,则实施改变将不会导致其他部件改变。
可建立的部件还有“合成(IsSynthetic)”属性。这一属性对于在编译程序在建立处理过程中生成的部件来说为“真”。而对程序员人工生成的部件为“假”。提供合成部件是使编译程序生成与系统设定语言元素对应的部件,系统需要设置语言元素,但其不必由程序员直接生成,实际上有可能将“合成”属性从“真”改为“假”,例如当一个合成的部件被人工编辑时,但从“假”到“真”的反向改变是绝不允许的。合成部件通常没有“界面”或“实施”特性,但无论在何种情况下,合成部件都使“界面”和“实施建立状态”被编译。
类别
每一部件都有一“类别”(Kind)”。一个类别是指把部件划分为例如共有同样特性或同样语言特定行为的各个组的一个文本串。大部分类别是专用于一种特定的计算机语言并用于指定语义区别语言元素。
然而,有一些是由系统定义的类别,它们分别为“项目”,“库”,以及“贮存器”。这些类别只用于不可建立的部件。“项目”类别是“项目”部件的类别。“库”类别则是用于连接到目标码的一个外部块(例如一个共同库或应用程序)的部件的集合。类别“贮存器”则应用于把其他部件分组归类以便组织的部件。实际上,类别通常在内部由数码表示。
图3提供了包括一个系列的部件31的程序的概念性的图示。每个部件由一组特性组成,这组特性分为两部分,即称为界面的外部可见(公开)部分311以及实施(专用)部分312。如图3所示,部件只依赖于另一个部件的界面。在一个项目中的所有部件被组织成树状结构,其底部为根的部件32(称为项目部件)。如同本技术领域的一般技术人员可知的那样,部件本身不必包含实体,但可以包括指向实际码的存储位置的指针。然而,这一树结构表达方式在展示一个程序的构成上是有用的,因此,类似的树结构表示被用于其后所述的用户屏幕之一。
图4是一框图,示出了本发明的三个主要功能性。它们是数据库41,编译程序42,以及建立处理43。数据库41包括一组构成部分,图中所示为一个项目部件411和一个可建立的部件集412。该可建立的部件集合412成型为将被建立的一个程序。编译程序42计算数据库41的部件的相关性。建立处理43利用部件特性和编译程序生成的相关性来建立该程序。
程序员可用编辑程序44改变该程序。编辑程序必须能够生成及删除这些部件,尤其是能够进行剪切、复制、粘贴和移动这些部件。编辑程序必须可以改变“界面”和“实施”特性中的数据,其方式通常是由对文本直接地进行修改。然而,其他更为结构化的途经(例如从选项屏进行选择)亦可采用。实际上,编辑程序44通常可以包括多个编辑程序,每个用于每种“界面”或“实施”特性,或甚至可能为特性中的数据的子区配置编辑程序。
寄存编辑改变的方法
参见图5A到图5D,其中示出了与增量建立有关的编辑程序44所执行的逻辑功能流程图。对于可建立的非合成部件,“建立状态”限于在建立处理之外的“编译的值”和“需要编译”值。若“界面”特性未出现,则“界面建立状态”是“编译的”。若“实施”特性未出现,则“实施建立状态”是“编译的”。图5A中展示了各种编辑状态变化。在500处,当系统标识了一个“生成部件”、“再命名部件”、“粘贴部件”、或’编辑界面”命令之时,控制则进到功能框510对界面变化进行处理。该变化的详细逻辑示于图5B中。
图5B中,处理始于判别框511,在该处,进行测试以确定界面建立状态是否为“需要编译”。若是,则控制通过514进行继续编辑。这些动作发生在编辑过程中而不是在建立过程中,下一动作很可能是另一编辑动作。若否,则在功能框512处把界面建立状态设置成“需要编译”并因此更新界面变化表。然后,在功能框5B处完成实施被改变和贮存器被改变的处理。实施被改变操作的细节示于图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处把“加客户(AddClients)”功能调用到该引用。若其特性名不是“界面”,则其特性名为“实施”,如框605所示,此时,由判别框606进行测试以确定是否为“在内部”(IsInLine)属性为真。若是,则将引用的复制放入“界面编译表”并在框601的处理继续之前在功能框607“界面编译表”并在框601的处理继续之前在功能框607处从该引用中调用“加客户”功能。否则,其特性名肯定是“实施”且其“在内部”属性肯定为“假”,而且在框601的处理继续之前,该引用的复制功能框608放在“实施编译表”中。
“生成编译表”功能的伪代码如下:
  CreateCompileLists( ){

   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);

      }

     }

    }

   }
“加客户”功能负责参数中每个引用,适当地引客户并检查引用,并在其“建立状态”被编译时,把该引参的“建立状态”设为“不确定”,把该引用的复制加到适当的“编译表”,并在该引用中调用“加客户”。这一处理称为生成“改变表”的“客户封闭(dient Closure)”。该“客户封闭”表示需要作为一个建立的结果而被再次编译的那些部件的子集。实际上,由建立过程的编译程序生成的相关性及变化用于避免在“客户封闭”中编译过多的部件。
以下是“加客户”的伪码功能:
  AddClients(A){

   for each B in A.ClientList{  

   if(B.BuildState==Compiled){

      B.SetBuildState(Uncertain);

   if(B.PropertyName==Interface){

      InterfaceCompileList.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){

     InterfaceCompileLrst.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);

    }

  }

  else if(A=Uncertain){

   A.SetBuildState(BeingCompiled);

   value=ConditionallyCompile(A);

  if(value==Abort){

   continue;
				
				<dp n="d22"/>
   }
   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.ClientList{

    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);
				
				<dp n="d24"/>
     }

    }

   }
处理“实施”的方法
这是“建立”处理的第三阶段,如图8的流程图所示,在“实施编译”表中的每个引用都被处理。该处理始于801处,在该处,从实施编译表的前部选中一个引用。若无更多的引用,在框802处完成处理。若该引用的“建立状态”为“不确定”,如框803所示,则在框801继续处理之前在功能框804中把“建立状态”设置为“已编译的”。若该引用的“建立状态”是“需要编译”,如框805所示,则在功能框806处编译该部件。从编译程序42返回的值可能是“完成”和“错误”。若在框807处返回值是“完成,则在框801继续处理之前,在功能框804中把该引用的“建立状态”设为“已编译的”。若把框808中返回的值为“错误”,则将该引用的“建立状态”设定为“编辑错误”并在框801继续处理之前,在功能框809的部件中调用“传播错误”功能。若该引用的’建立状态”是“编译错误”或“不确定错误”,将不作任何事。应注意,“实施”的处理在这一阶段顺序独立的,因为相关性只可以在其内部属性是“真”而且已被处理过的“界面”或“实施”中。
“处理实施”的伪码如下:
ProcessImplementations( ){
  for each A in ImplementationCompileList{
   state=A.BuildState;
   if(A=Uncertain){

   A.SetBuildState(Compiled);
   }
   else if(A=NeedToCompile){

   value=Compile(A);

   if(value==Done){

     A.SetBuildState(Compiled);

   }

   else if(value==Error){

     A.SetBuildState(CompileError);

     PropagateError(A);

   }
   }
  else if(A=CompileError_UncertainError){
  } 
 }
}
支持建立处理的编译程序
编译程序42通过“编译”功能而被调用,两者亦可作为替代命令使用。编译程序42处理源文本并标识可能的外部部件的名字。编辑程序42下一步获取所有部件的引用表。该编辑程序可用语言专用知识(例如部件类别)从该表中删除这些引用。编译程序然后为文本标识的每个外部部件调用“获得说明(GetDealaration)”功能。在调用编译程序之前,该“编译”功能清除一切现存的错误。这也将清除任何来自“错误”特性的错误消息并从“项目”的的“错误表”特性中去除任何引用。
编译程序首先调用“获得说明”功能,如图9的流程图所示。“获得说明”功能返回到“异常中止”值、“完成”值、“循环相关性”值或“错误”值的其中之一,并可返回“说明”的数据。处理起始于框901,在该处,每个引用的“建立状态”被检查。若没有更多的引用要处理,便在框920处完成处理并返回。若该部件的“建立状态”在框903处为“编译的”,则功能返回到“完成”,如框904所示,而且在框901继续处理之前,存储的“说明”数据也被返回。若部件的“建立状态”在框905处示为“需要编辑”或“不确定”,则相应于该部件的引用在功能框906中被加到“界面编译表”的前部,并在框901继续其处理之前,该功能返回到功能框907的“异常中止”。“说明”数据在这一情况下不返回,若部件的“建立状态”为框908所示的“被编辑”,则在框901继续处理之前,功能将去往功能框909处的“循环相关性”。“说明”数据在这一情况下亦不返回。若部件的“建立状态”是框910所示的“编辑错误”或“不确定错误”,则在框901继续其处理之前,功能返回到功能框911的“错误”。在这种情况下亦无“说明”数据返回。
“获得说明”功能的伪码如下:
  value GetDeclaration(A,Declaration){

   Declaration=NIL;

   state=A.BuildState;

   if(state==Compiled){

    Declaration=CurrentDeclaration( );

    return(Done);

   }    

   else if(state==NeedToCompile_Uncertain){

     InterfaceCompileList.AddToFront(A);

     return(Abort);

   }

   else if(state==BeingCompiled){

     return(Circulardependency);

   }

   else if(state==CompileError_UncertainError){

     return(Error);

   }

  }
在调用“获得说明”功能之后,编译程序继续进行如下的过程。若返回值为“异常中止”,则编辑程序必须中止处理并返回到“异常中止”值。一个替代实施方案是要编译程序在编译该返回的部件之后,中止编译,放弃或重新启动编辑程序。这会要求编译程序再次进入。但若不是这样的话,就不会有上述的重大变化。若返回的值是“编译的”,则编译程序可继续其处理。若采用“说明”,则将构成“源引用相关性”,而且编译程序会保持追踪相关性及其性质。若返回值是“循环相关性”或“错误”,则编译程序必须中止处理。在部件上调用“设置错误(Set Error)”功能,并返回“错误”值。编译程序可以选择继续处理以便在结束之前发现更多可能的错误。
若对“获得说明”的调用返回到“编译的”,则编译程序将以常规方式继续处理源文本。若在处理过程中遇到任何错误,编辑程序将调用部件的“设置错误”功能并返回“错误”值,若没有遇到错误,则编译程序返回“完成”值。若编译程序已经在对一个界面进行处理,则它将存贮该“说明”特性的新值。
处理“错误”的方法
在编译程序被调用以编译一个“界面”或“实施”之前,清除所有现有的“错误”。这将保证所有的错误消息被更新。由于“界面”和“实施”之前的内部相关性以及这样的事实,即错误是可传播的,所以将不可能在同一建立上在“界面”和“实施”上同时得到编译程序错误。
当编译程序遇到错误时,它调用传送与错误有关的信息的功能“设置错误”,该信息包括错误的位置,以及描述错误的消息和返回到的错误组成部。该信息存储在“错误”特性和部件的正确源特性(“界面”或“实施”)之中。一个引用也存在允许对所有错误进行方便地存取的“项目”所维护的总错误表中。
错误将传播到任意相关部件以便这些部件无需在其后被编译。因为这些编译已知将会失败。进而,遇到错误后将继续建立并尽可能多正确建立那些本身并无明显错误的部件或与错误部件有关联的部件。
“设置错误”功能获取由编辑程序42传给它的错误消息并在相应于适当特性(“界面”或“实施)的部件的“错误”特性中生成一个入口,它还在与该错误对应的“项目”的“错误表特性”中生成一个入口。以这一方式生成的两个入口共享同一键,以致它们保持“连接”。这一功能通常还用一个“粘性标志”把错误的位置记录在程序源之中。该“粘性标志”在稍后的用户编辑过程中一直附属到字符的相同范围。
若编译程序成功地完成了源文本的处理,则其将产生目标码并将其通过“连接程序”功能进行增量连接。而且,目标码可存到建立处理结束并以常规方式连接。
编译程序现在将更新部件的“源引用(SourceRefRerence)1特性以及每个“源引用”的“客户”特性。对每一个引用,例如部件A的“源引用”特性中的部件B,将必须有一与部件B的“客户”特性中的部件A相对应的引用(它具有同样的相关性信息)。
编辑程序将生成一个“变化”以描述“说明”如何从其当前值改变的,编辑程序将在部件上调用传播改变(PropagateChange)功能并把计算出来的改变传播给该部件。该编译程序然后将设定“说明”的新值。“传播改变”的功能与针对部件的“客户”表中的每个引用的相关性的变化吻合。若该吻合指示引用的部件已为改变所影响,且其“建立状态”不是“编译错误”或“不确定错误”,则其“建立状态”设为“需要编译”。
有可能要编译程序使用“设置错误”功能以发布告警信息或不同格式的建议。在这种情况下,若只有告警信息返回,则“编译”功能应返回到“完成”。告警信息将被加到“错误”特性且引用将被加到“项目错误表”特性。否则编译将被认为是成功的。适当的“建立状态”将被设置为“编辑的”,而且将无错误被传播。若只发布了告警或建议,则程序将被完全地及正确地建立。
“有条件地编译”一个部件的处理
图10A和10B示出了“有条件编译”功能的流程图,其中进行了引用,在部件的“源引用用”中的每个部件B在框1001处进行处理。则对部件B的处理结束而处理去往图10B以编译组成部件A。部件B的“建立状态”是“被编译”或“需要编译”,如框1003所示,则该部件的“建立状态”被设定为“被编译”且该部件在功能框1004中被编译。该编译功能可以返回到“完成”值,“异常中止”值和“错误”值其中之一。若返回框1005的“完成”值,处理将继续在框1001处进行。
若返回值是框1006的“异常中止”,则功能中止且“异常中止”返回到框1007。若返回值是框1008中的“错误”,则原始部件的“建立状态”被设置为“不确定错误”,功能被停止且“错误”返回到功能框1009中。若部件B的“建立状态”是“不确定”,如框1010所示,则“建立状态”被设定为“被编译”且该部件在功能框1011中被有条件地编译。再一次,“有条件地编译”功能可以返到“完成”,“异常中止”或’错误”值之一。若“完成”值返回框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(state==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);

     }

    }
				
				<dp n="d33"/>
  else if(state==Uncertain);

   A.SetBuildState(BeingCompiled);

   value=ConditionallyCompile(A);

   if(value==Done){

     continue;

   }

   else if(value==Abort){

    return(Abort);

   }

   else if(value==Error){

     A.SetBuildState(UncertainError);

     InterfaceCompileList.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);
   }
				
				<dp n="d34"/>
   elseif(value==Error){

    A.SetBuildState(CompileError);  

    return(Error);

   }

  }

  A.SetBuildState(Compiled);

  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);

    }

   }

    InternalErrorList.ClearAll( );

    if(ErrorList.Count!=0){
       OpenErrorWindow( );

    }

   }
使用面向人的目标编程系统(HOOPS)
根据本发明的面向人的目标编程系统(HOOPS)可通过进入一个项目名或现有的项目名来从计算机开始,这要取决于是否要建立新的程序或建立现存的程序。当HOOPS开始时,视窗被打开并显示一个与图11所示屏幕类似的初始屏面。该HOOPS打开的初始视窗显示了“项目”部件的“成员”特性以及其直接成员。虽然它初始只显示了直接成员,但同样的视窗用于显示始于项目部件处的每个部件。在图11的示例中,一个叫做“工资单(Pagroll)”的“项目”已被输入。
窥视窗
窥视窗是用于显示一个部件特定特性的图形展示。但是,在显示该特性的处理过程中,可能会要求窥视窗显示辅助信息,它们包括从其他特性而来的数据。一个窥视窗有一输入和输出。该输入指至少一个部件和特性,也可以指定该特性的信息的子范围。该输出至少指一个部件。它亦可指定一个特性以及该特性数据的一个子范围。该输出可响应于用户操作及系统中的状态变化而随时改变。
窥视窗表是一个窥视窗说明的命名表,其中,每个说明定义一个窥视窗名字及实施分类。有一个叫做空窥视窗表的区别窥视窗表,它不包含窥视窗说明。窥视窗表名字与每个特性关联。特性可以被表中指定的任意窥视窗显示。若一个特性与空窥视窗表关联,则不会有该特性的窥视窗,而且该特性被认为是不可显示的。一个最佳窥视窗将与每个特性关联该最佳窥视窗必须在与特性相关联的窥视窗表中指定的窥视窗之中。一个最佳特性与要被窥视的部件关联。
窗格(Paue)
一个窥视窗显示在一窗格中。窗格有一输入和输出。该输入指定至少一个部件。它亦可指定部件的一个特性和特性的数据的一个子范围。其输出指定至少一个部件并可指定一个特性和该特性数据的一个子范围。该输出可响应用户动作及系统内的状态改变而随时改变。
一个窗格确定了它的窥视窗输入,该输入一般是从该窗格的输入中导出而来的。它可动态地根据系统状态或静态地改变窗格的实施而从窗格到窗格进行变化。在最简导出中,窥视窗的输入与窗格的输入相等。类似地窗格的输出来自于对窥视窗格输出的导出。该求导出的性质从窗格到窗格不同,它或者动态地取决于系统状态,或者静态地由窗格实施的变化而定。在最简导出中,一个窗格的输出等于其窥视窗的输出。
视窗
窗格显示于视窗之中。视窗被细分为一个或多个窗格。在一个视窗中的窗格数量及大小可由用户动态地控制。一个最佳实施例在每个窗格中提供窗格划分程序控制以简化多窗格的生成和管理。该控制用于把一个单个的窗格分为一个或多个窗格。
图12示出了根据本发明的一个浏览窗。在HOOPS中的每个视窗都是浏览窗。浏览窗是暂时可见的和编辑工具,用于查看“项目”中的信息。只要在视窗中的关闭图符1210上按一下,即可在任意时刻删除浏览窗。任何在测览窗中对“项目”所做的改变都被自动保存起来。一个浏览窗有一个项目根部件1200,它在打开时被指定。一个存贮器部件的实例展示于1202处,一个选择的部件示于1203处,一个窗格特性上托选择屏控制1220以及一个扩展或压缩控制示于1204。该控制可使用户把一个窗格导向一个特定的特性。输入部件的特性2130在窗格1260中显示。而且每个窗格1260显示一个特性窥视窗1205或是空白的,如1260所示。新窗格由在一个窗格右上角中选择一个划分图符1250的方式而加到一个浏览窗中。窗格划分控制1250允许用户将一个窗格分为两个并控制其几何尺寸。也有一个窗格和测览窗放大/缩小框1242和1243,它们使得用户可以动态地放大/缩小一个窗格以使完全充满视窗,并使得用户将窗格恢复至其原有尺寸。水平和垂直卷动控制1252被提供以便卷动位于一个窗格中的窥视窗。窗格标题框1241显示部件的名字及由该窗格显示的特性。窥视窗选项屏1251提供用于使用户选择用于显示选定特性的窥视窗。
综合考虑三个因素,以使确定由一个窗格显示的专用窥视窗。它们是:部件,该部分的特性,以及该特性的窥视窗。部件由窗格的输入导出而来。特性亦来自对窗格的导出,或来自一个用户的替换。若该窗格输入指定了输入部件的一个专用特性,则该特性按该特性关联的窥视窗表所定义的来确定一组合格的窥视窗。若该窗格输入未指定一个特性,则将被显示的特性是部件的系统设定特性。
用户可以通过选择用于观察或把一个窗格固定到一专用特性的另一输入部件特性的方式而替换选定的特性。当固定后,该窗格显示固定的特性而与输入部件无关。当一个窗格的部件或特性变化时,一个新窥视窗在该窗格中显示。该窥视窗是特性的系统设定窥视窗;然而,用户可以顺序改变该窥视窗成为在与显示特性关联的窥视窗表中列出任何项。
当生成一个新窗格时,系统设置的“连线(Wiring)”从分裂成新方格的方格中生成。“连线”是在一个窗格之间的逻辑关系。一个窗格可以有零个或一个连线输入及零个或多个连线作为输出,但连线不可以形成回路。当在一个窗格中选择了一个部件时,该选择被转换成对项目中部件的一个引用并成为一个对来自该窗格的任何连线的目的的新输入。通过从选项屏条选择的浏览窗选项屏中的“Turn on Wiring”(接通连线)可接通连线,从而产生图13的叠加图形连线的显示。采用这一显示,可能通过在新输入位置按下鼠标器并将其拉至目标窗格的方式改变两个窗格之间的连线。
在许多窥视窗中(例如“成员”,“客户”以及“引用”),部件可由它们的名字以及图符(它们由部件类别区分)所区别,在其他窥视窗中,一个部件的名字只出现在本文中,例如在“源”或“资料”中部件层次可由扩展和缩灭在“成员”特性窥视窗中的贮存器部件从而产生一个“树”视图的方式进行测览,图14便展示了该例子。一个部件的子树的一级可通过按一下部件的循环双态开关的方式加以扩散或缩灭。当通过按一下图符或在文本显示中选择其名字的方式在一个窥视窗中选择一个部件时,在总选项屏条中的“特性”选择屏被调整以列出部件的类型。任何部件的任何特性可以通过在一个窥视窗中选择该部件并然后从“特性(Property)”选项屏中选中一个特性的方式进行视查。这会打开一个包括一个窥视窗的新浏览窗,该窥视窗显示选定部件的选中特性。
通过指定任何处生成新部件以及该部件类别,可在一个“成员”或“界面”窥视窗中生成部件。该新部件的位置由选择一个现有的部件或在部件之间放入一插入点的方式而予指定。生成的部件的类别通过从“New”窥视窗选项屏中选择选项屏项所决定。所有编辑都自动存储。只有已改变的部件以及受改变所影响的客户才被编译。重新编译的部件可通过从“Build”选项屏中选中的“Show Components Build”选项屏项进行观看。为了观看从最后建立以来的改变的部件,要从“Build”选项屏中选择“Sleow Compenents Changed”。通过从“Build”选项屏中选择“Build”,可对一个程序进行编译和连接。“Build & Run”选项屏也运行该程序。
图15至18展示了在编辑一个部件的处理过程中显示的一些屏面。图15示了一个“main”功能的“实施”的源码显示。在图16中,功能“main”已由把“numberDisks”从“7”改变“9”的方式进行了编辑。若程序员现在从图17中示出的“Build”选项屏中选择“Show Components Changed”则图18所示的浏览窗便会出现。在“Implementation Changes”窥视窗中(在右侧),功能“main”被显示,指示改变已发生。
面向目标连接
本叙述列出了HOOPS连接程序的重要特性,它提供了一个最佳实施例的运行时间环境的背景以及提供连接出现的上下文的HOOPS数据库。最后,有关HOOPS编译程序HOOPS数据库,以及系统装入程序的连接和交互的讨论将参照一个最佳实施例进行。
连接程序特性
·连接发生在编译处理过程中,没有其它的连接通路。
·在建立过程中,只有最新被编译的功能和数据才被再次连接。
·在增量发展过程中,某些共享的库空间被用于换取速度。
·编译程序与部件和特性交互以产生全部目标码和其他连接信息。
·当一个程序可交付使用时,一个“出版”步骤将去除增量发展过程中用过的多余的空间和信息,并程序与HOOPS分离开。
·一个“快速出版(QuickPublish)”步骤将从用于与其他程序共享的HOOPS中把该程序快速地分离出来,或移至另一机器。
·连接程序可是扩充的,因为该编译程序可以指定该连接程序通常不处理的新安排。
·一个中止的程序可被修改然后再恢复执行而无须被再次装入(有些变化将要求装入)。
连接程序在HOOPS内操作并生成由装入程序使用的文件。为了理解连接程序技巧,重要的是要理解运行时间系统和HOOPS的独特之处。
一个可执行的文件与运行时间的交互在其他运行时间系统中大不相同。通常,一个装入程序必须理解可执行文件格式。该可执行文件已知描述该程序各个方面(例如所需存储器量,主地址,任何在装入时刻需要的再定位信息,以及任何在可执行文件中组装的调试信息)的字段。在一个最佳实施例的运行时间中,装入程序通过一个抽象“T装入模块(TLaodModule)”分类界面与该可执行文件交互。该“T装入模块”为所有装入操作提供协议,例如,象指定存储器要求,建立元数据信息以及连接其他共用库的操作都由“T装入模块”的方法提供。借助这一方式,一个装入模块可以有许多方式响应装入请求。
运行时间定义提供了共用库,并允许在装入时刻解决交叉库调用。由于库可以在任何存储位置装入,所有码必须是位置独立的,或必须在装入时刻被修补。除了位置独立码之外,必须在装入时刻解决对其他库的调用。这是由于静态连接程序不知道存储器中的外部库的定位或相对位移是什么。
虽然每个“T装入模块”分类可以许多不同方式实施交叉库调用,标准方式则是要通过在装入时刻修补过的连接区转移,该连接区作为在两个库之间的间接转移表。一个外部调用将转移子程序返回(JSR)到该连接区,然后该连接区将转移(JMP)到调用的功能。内部调用可以直接转移并程序返回到该调用的功能。一个内部和交叉库调用的实例示于图19中并说明如下。
对f1( )1900的调用是一个内部调用,所以JSR直接去往f1( )1910。对f2( )1920的调用是一个交叉库调用,因此调用去往装入时刻修补的外部连接区1930。
HOOPS环境还提供了连接程序的唯一的上下文联系。一个程序被展示为一个部件集合。每个部件有一组相关的特性。在每个部件的编译过程中,编译程序将生成和存储用于该部件的特性。HOOPS建立处理对部件的建立排序,以致于所有界面说明在实施(定义)之前便被编译。
一个HOOPS项目可以包括几个库部件。所有源部件都是这些库部件之一的成员。每个库部件表示一个共用库建立。
综观
为了支持增量连接并使最终应用程序成为最小最快,生成了两种不同的装入模块。在开发过程中,HOOPS生成和修改了一个“T增量装入模块(T incremental Load Module)”。有一个第二文件,“T标准装入模块(TStfandardLoadModule)在出版应用程序之前生成。
一个最佳实施例公开了在开发过程中建立和更新代码的途径。把一个“T增量装入模块”转换成“T标准装入模块”涉及一个多余的“出版”步骤。该步骤与一个常规的连接步骤很类似,其中,每个功能或数据项将被再定位和修补。但是,直到装入时刻才解决外部引用。
编译程序交互
随着编译程序生成一个部件的代码,该码由用于修补目标码的一组安排传到目标码特性。每个编译的部件使其目标码特性装满。编译程序使用一个“目标组”模块。即一个部件可以由多种类型的目标码组成。例如,一个功能可能也有一个与其相关的专用静态数据区以及用于该静态数据区的解除程序顺序。一个静态数据项可能有一个构成程序以及与之相关的解除程序顺序以便在运行时刻将其初始化。
例如,假设下列部件被编译:
TFoo∷Print( )
Static int times Called=0:
cout<<“Hello world:”<<timesCalled<<“\n”;
timesCalled++;
}
该编译程序将生成两部分目标码并将它们与部件TFoo∷Print相关。将有用于功能的目标码,以及4字节的专用数据用于静态变量timesCalled。
有些看起来就象下文:
      Object code property of TFoo∷Print-code:
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<<(char*)>
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,A70x0032:          ADDQ.L         #1,<timesCalled>0x0034:          UNLK                   A60x0036:          RTSL1                DB                     "\n"L2                DB                     "Hello world:"
Object code property of TFoo∷Print-data:
       00000000:  00000000
与目标码一起,编译程序将说明由于该码被重新定位而必须采用的不同安排。这些可能看起来象:
refererce to times Called    Offset 0x0c
reference to Cout    Offset 0x14
reference to ostream∷Operator<<(Coust char*)Offset 0x18
referenee to Ostream∷Operator<<(int)    Offset 0x22
refereace to Ostream∷Operator<<(Const Char*)Off-set 0x2c
reference to times Called Offset 0x34
注意安排可以指定对与同一部件(专用静态变量timesCalled)的目标的其他部分的引用,或者对其他部件(例如Cout0的引用。
当编辑程序已经完全指定了完整的数据集和与一个部件相关安排时,目标码特性重新对所有部分定位并在同样时刻将其连接起来。在所有部件被编译后没有第二个连接通路。随着每个部分新编译,它也被完全连接。
安排表
连接实质上是一个通过安排表反复进行并以适当方式修补代码的过程。通过一个分类层级指定不同类型的安排(fixup),每种安排都知道如何计算修补值。例如,一个PC相关安排知道其必须计算其定位地址和引用的部件之间的差值。一个绝对安排知道必须延迟计算直到装入时刻。虽然连接程序指定了一组安排分类,但新的编译程序可以指定新型安排。图20示出了根据最佳实施例的一组安排分类。
地址计算
当每个部件被编译时进行连接的主要问题是其引用的一些部件可能未经编译。
每个源部件正好是一个库部件的一个成员。与每个库部件相关的是一个装入模块特性。该装入模块特性清除属于该共用库的所有部件的空间。由于一个安排准备计算一个修补值,它询问一个部件的地址的装入模块特性。该装入模块特性检查是否该模块已为编译。若是,则返回该部件的地址。若否,则装入模块特性根据该部件的类型执行两个动作。
若该部件的类型是数据部件,则返回到恒定地址。若其为一功能部件则为该功能生成一个连接区,并返回到该连接区的地址。
目标布局
如前所述,当每个部件被编译时,它分配一个在共享库中的位置。随着其完成,某些多余的工作必须完成以便所有引用是一致的。
若该部件是一数据部件,所有它的客户都被告知它所处的位置。某些客户可能开始已与假设地连接,所以这一处理必须清除所有客户并为其提供正确地址。若该部件为一功能部件,则该功能的连接区为新地址所更析。应当注意,这两种途经提供了对功能的间接存取和对数据的直接存取。
此外,分配有多余空间,以便目标码未来的更新尤其可能使用同样区域。多出12%提供给功能而多出25%供给大数据目标。
连接区
如上所述,当为了一个功能的地址而请求装入模块特性的时候,该特性将给出该连接区的地址。这意味着每个功能引用都是间接的,图21展示了根据一个最佳实施例的连接区。
应当注意,不仅内部库间接通过内部连接区调用,而且交叉库也通过库的内部连接区对功能进行间接调用9即对库B中f2的调用(2100,2110,2115及2120)这必须完成以便f2可以在无需更新其内部和外部客户的情况下改变位置,并保持一致性从而使功能指针之类的项正确地工作。此外,所有虚拟表功能指针也将指向内部连接区。
任何被引用的但未定义的功能将指向一个通用“未实施( )(Unimplemented( ))”功能。由于所有未编译的功能指向“未实施( )”。因而程序员不必生成存根模块功能从而简化了装入和运行部分应用程序。
具有内部连接区的另一好处是提供了一个对所有功能的渠道。在开发过程中,内部连接区可用于需要功能追踪的活动(例如调试或性能监测)。
增量连接
前述讨论已对增量连接的详细讨论奠定了基础,当一个部件被再编译时,新部件的尺寸将与旧部件的尺寸进行比较以确定是否新部件符合现有定位。若符合,则存在诸位置,并通过它的安排表将语新部件造代,随即完成联接。
若新部件的目标码必须被重新定位,则以前的空间被注以废弃标记,而新目标码被定位到一个新区域。然后安排表被迭代。若该部件是一功能,则更新连接入口。连接然后完成。但是,若部件是一数据项,则该部件必须在客户表上迭代并更新该部件的引用。然后该数据的连接才告完成。
应注意起始连接和增量连接按照同样步骤进行。在增量更新中唯一多出的步骤是处理何时一个数据项必须改变定位。
目标码存储
目标码和装入模块特性是通常的部件特性。它们象所有其他特性一样,存在HOOPS的数据库中。但是,目标码特性描述目标码但不包含实际位。实际位存在由装入模块特性所有的段中。该装入模块特性有四个不同的段,它们包括码、未初始化码、初始化码以及连接区。
图22展示了根据最佳实施例的目标码存储。每个图形目标220有一个关联的装入模块特性2250,它包括与图形目标2210,2220,2230和2240相关联的单独的目标码。由于所有码在编译时都被连接,并且提供了对于改变和增量建立的支持,因而装入模块特性维护了位于每个段中心所有目标的映射。它还偿试保持用于增长的多余空间。该多作空间会浪费一些虚拟存储空间,但并不占用后备存储器或实际存储器。若在反复改变和建立一个应用程序的处理过程中,该多余空间被消耗的情况,则将分配其他空间,受到影响的段必须被重新定位而且所有对于该段的出入引用必须被更新。
图23示出了根据最佳实施例的装入库。空白区段2300,2100,2320和2330代表自由空间。该库为未初始化数据2340,初始化数据2350,代码2360和连接区2370提供了四个段。在HOOPS中,这些段没有空间关系。连接使用将被装入的关系的内容而非可能在HOOPS本身内具有的关系。
装入
为了运行一个程序,装入程序必须有一个数据流式“T装入模块”分类。在建立程序过程中,生成一个数据流式“T装入模块”,当装入时,把生成的段装入HOOPS,没被装入的应用程序和HOOPS共用。这提供了两个好处:首先,它大大减少了必须复制的工作量,其次,它使程序在装入时进行增量更新。
由于装入程序需要一个数据流式“T装入模块”分类,而且“T增量装入模块(Tincremental Load Module)要减少流入的信息量,因此,必须写出从开始到结束数据流。这意味着对于一个程序中心大部分改变,“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
				
				<dp n="d52"/>
alignment);

   virtualvoid            AdoptFixup(EObjectKind
whichOne,TFixup*theFixup);
//   Getting/Setting

   void*

   CopyBits(EObijectKind 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;
//   Linking

   virtual void          GetLocation(EObjectKind
whichOne,TLocation&amp;fillInLocation)const;

   TIterator*                    CreateFixupIterator( )
const;
};

   The object code property delegates the fixup work to
individual fixup objects.

   class TFixup {

   public:

         void           DoFixup(void*moduleBase)=0;

   private:

         TComponent*fReference;

         long        fOffset;

   };
从T Fixup衍生出来的分类为TPcRelative Fixup,Tabso-luteFixup以及TDataRelativeFixup,每一安排分类都清楚如何对其类型进行适当的修补,这与常规的编译程序/连接程序交互全然不同,在常规编程程序/连接程序交互时,连接程序必须对不同的位进行解释以决定要采取何种行动。这一方式另一优点在于用于一个新结构的新编译程序不必担心一个安排类型不为连接程序所支持。
引用类别
连接程序必须处理4类引用。它们是码对码,码对数据,数据对码,以及数据对数据。每类引用被处理(对68K而言)的方式叙述如下:
码对码
例如:Foo( );
编译程序根据文本以两种不同方式处理这一情况。它可go pc-relative to Foo( ),或可把Foo( )的地址装入,并直接去往一个寄存器。任何内部调用都可选用其中一种方式,连接程序将总是报告连接区的地址,交叉库调用必须使用装入地址的方式,这些将用绝对地址,这些绝对地址则在装入时刻被修补。
码对数据
例如:gValue=1;
编译程序产生一个对于gValue的Pc-relative存取,但是,其gValue在一个不同的共用库中时,编译程序将自动生成一个间接引用。连接程序将捕获该间接引用并提供一个在装入时刻由外部地址修补过的本地地址。
数据对码和数据对数据
例如(数据对数据):Void(*pfn)( )=&Foo;
例如(数据对数据):int&pi=i;
由于这两种引用都需要绝对地址,它们将在装入时被处理。在装入时刻修补数据引用就象修补外部引用一样。
图25表示了在每类引用中发生的情况。若一个外部库要引用同样的部件,该库将在装入时刻接收几个GetExpor-tadres( )调用。响应于GetExportaddress( )调用,一个库将返回到功能的内部连接区地址以及数据的实地址。这使得当库在被装载时,功能在附近移动。
图26,27,28和29是示明与一最佳实施例相关的逻辑的流程图。图26展示了控制的“整个流程,处理起始于2602,该处,建立操作按前述那样被初始化且处理去往功能框2610以供编译。这一处理始于功能框2630,在那里,目标码被接受且收集部件的安排,然后,在功能框2640处存储目标码并在功能框2650处为新改变的目标模型进行安排,与功能框2640关联的处理详细示于图27中,而与功能框2650的细节示于图28和29中。
图27是一流程图,示出了与根据本发明的目标码存储关联的逻辑。处理始于2700并立即去往判别框2710以确定是否这是一个起始存储操作。若是,则存储按功能框2740所示分配,一个入口在功能框2744中示出的映射中生成或更新,其细节示于图29中,然后该目标在功能框2750处存储。若另一分量在该目标被编译之前已引用了该目标,则发生更新。判别框2710将决定是否这是一个更新操作。然后在判别框2720处进行测试以确定是否该码与现有位置吻合。若是,则在功能框2750处存储该目标,若否,则在功能框2730处消除现有的存储,并在判别框2760处进行另一测试以确定是否该数据为目标数据。若是,则在功能框2762处分配存储,并在功能框2770中在所示的映射中生成入口或更新入口,其细节示于图29中,并且在功能框2750处存储该目标。
图28展示了安排处理以及与获取一个引用目标的地址关联的处理的详细逻辑。执行安排的处理始于2800并马上去往功能框2810获取一个引用目标的地址。然后,在判别框2820处,进行测试以确定是否需要绝对安排。若是,则在功能框2830处为一个装入操作注释该绝对安排,若否,则用功能框2840所示的相关位置修补该码。获取引用目标地址的处理始于功能框2850,在判别框2860处立即进行测试以确定是否一个目标已在映射之中。若是,则地址返回到功能框2880,若否,则在功能框2744所示的映射中行成或更新一个入口,其细节示于图29,然后地址返回到功能框2880。
图29是根据本发明在一个映射中生成或更新一个入口的逻辑。处理始于2900并立即去往判别框2910以确定是否一个目标已在该映射之中,若目标存在,则在判别框2930处进行测试以确定目标是否为数据。若是数据,则映射为功能框2940所示之新地址所更新。否则,由功能框2920中所示之新地址更新转移位置。若目标不在映射中,则在判别框2950处进行另一测试以确定是否该目标是数据,若是,则由功能框2960所示之适当地址生成一个映射,若否,则由功能框2980所示之连接区生成一个对于以后定义的位置的转移位置,并由连接区地址将一入口收入该映射中。
虽然本发明以实施例方式叙述了本发明,但本发明领域的一般技术人员可了解本发明的基本原理并可据其进行修改和变型,本发明的范围受权利要求保护。

Claims (17)

1一种连接计算机程序的方法,其特征在于包括以下步骤:
(a)将一个计算机程序模式成一个部件的集合;
(b)在一存储器中存储这些部件;
(c)访问所存储的部件并计算与每个部件关联的相关性以生成一个相关性表;
(d)根据该相关性表编译部件以生成一个更新的目标模块;以及
(e)通过更新一个现有的可执行文件来连接该更新的目标模块。
2权利要求1所述的方法,其中,连接该更新的目标模块的步骤与编译部件的步骤并行发生。
3权利要求1所述的方法,其中,只有更新的目标模块被连接。
4权利要求1所述的方法,包括在存储器中把目标码作为部件特性存储的步骤。
5权利要求1所述的方法,包括存储一个包括连接信息的数据库的步骤。
6权利要求1所述的方法,包括在连接操作完成时释放存储的步骤。
7权利要求1所述的方法,还包括以下步骤:
(a)在存储器中存储一个外部连接区;以及
(b)由外部调用信息在装入时刻修补该外部连接区。
8一种用于连接计算机程序的装置,特征在于包括:
(a)用于将计算机程序成型为一个部件集合的装置;
(b)用于在存储器中存储部件的装置;
(c)用于访问存储的部件并计算与每个部件关联的相关性以生成一个相关性表的装置;
(d)用于根据该相关性表的编译部件以生成一个更新的目标模块的装置;以及
(e)用于通过更新一个现有的可执行文件来连接该更新的目标模块的装置。
9权利要求8所述装置,其中所述用于连接更新的目标模块的装置与用于编译部件的装置并行工作。
10权利要求8所述装置,其中所述用于连接的装置只连接更新的目标模块。
11权利要求8所述装置,还包括用于把目标码作为部件特性存在存储器中的装置。
12权利要求8所述装置,还包括用于存储包括连接信息的数据库的装置。
13权利要求8所述装置,还包括在连接操作结束时释放存储的装置。
14权利要求8所述的装置,还包括:
(a)用于在存储器中存储外部连接区的装置;以及
(b)用于在装入时刻由外部调用信息修补该外部连接区的装置。
15一种用于连接计算机程序的方法,其特征在于包括:
(a)将计算机程序模式成为一个部件的一个集合;
(b)在存储器中存储部件;
(c)访问所存储的部件并计算每个部件的相关性以生成一个相关性表;
(d)根据该相关性表编译部件以生成一个更新的目标模块;
(e)通过更新一个现有的可执行文件来连接更新的目标模块;以及
(f)更新一个装入的可执行文件。
16权利要求15所述的方法,还包括存储目标模块以简化可执行文件的自连接的步骤。
17权利要求16所述的方法,还包括在存储目标模块时进行目标自连接的步骤。
CN94190010A 1993-06-28 1994-01-06 增量连接系统 Pending CN1102934A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/085,490 US5519866A (en) 1993-06-28 1993-06-28 Method and apparatus of incrementally linking components of a modeled computer program
US08/085,490 1993-06-28

Publications (1)

Publication Number Publication Date
CN1102934A true CN1102934A (zh) 1995-05-24

Family

ID=22191952

Family Applications (1)

Application Number Title Priority Date Filing Date
CN94190010A Pending CN1102934A (zh) 1993-06-28 1994-01-06 增量连接系统

Country Status (8)

Country Link
US (1) US5519866A (zh)
EP (1) EP0693193B1 (zh)
JP (1) JPH08512154A (zh)
CN (1) CN1102934A (zh)
AU (1) AU6086294A (zh)
CA (1) CA2144875A1 (zh)
DE (1) DE69402539D1 (zh)
WO (1) WO1995000904A1 (zh)

Families Citing this family (134)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5930505A (en) * 1991-12-17 1999-07-27 Hudson Soft Co. Ltd. Method for storing a program into an auxiliary memory
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
AU692775B2 (en) * 1993-07-01 1998-06-18 British Telecommunications Public Limited Company System for generating instructions for speech application
JPH07104981A (ja) * 1993-09-30 1995-04-21 Hitachi Software Eng Co Ltd オブジェクトリンク情報を用いたプログラム構築装置
US6021307A (en) 1994-04-07 2000-02-01 Chan; Hark C. Information distribution and processing system
US6473860B1 (en) 1994-04-07 2002-10-29 Hark C. Chan Information distribution and processing system
US7991347B1 (en) 1994-04-07 2011-08-02 Data Innovation Llc System and method for accessing set of digital data at a remote site
US6188869B1 (en) * 1994-04-07 2001-02-13 Hark C. Chan Information distribution and processing system
US7181758B1 (en) 1994-07-25 2007-02-20 Data Innovation, L.L.C. Information distribution and processing system
US6289200B1 (en) 1994-07-25 2001-09-11 Hark C. Chan Information distribution system which intermittaly transmits radio frequency signal digital data
JP3434038B2 (ja) * 1994-09-22 2003-08-04 株式会社日立製作所 ネットワ−ク構築支援システム
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
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
US5815152A (en) * 1995-04-18 1998-09-29 Logical Software Solutions Corporation Method and apparatus for defining and evaluating a graphic rule
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
US5787447A (en) * 1995-05-08 1998-07-28 Sun Microsystems, Inc. Memory allocation maintaining ordering across multiple heaps
US5640558A (en) * 1995-05-31 1997-06-17 International Business Machines Corporation Identifying and analyzing multiple level class relationships in an object oriented system by parsing source code without compilation
US5701489A (en) * 1995-06-06 1997-12-23 International Business Machines Corporation System for partial in-line expansion of procedure calls during program compilation
US5680621A (en) * 1995-06-07 1997-10-21 International Business Machines Corporation System and method for domained incremental changes storage and retrieval
US5768582A (en) * 1995-06-07 1998-06-16 International Business Machines Corporation Computer program product for domained incremental changes storage and retrieval
US6185597B1 (en) * 1995-06-07 2001-02-06 Microsoft Corporation Method and system for expanding a buried stack frame
US5854932A (en) * 1995-08-17 1998-12-29 Microsoft Corporation Compiler and method for avoiding unnecessary recompilation
US5917483A (en) * 1995-09-18 1999-06-29 Oracle Corporation Advanced windows management for a computer system
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
US6526565B1 (en) * 1995-12-21 2003-02-25 International Business Machines Corporation Packaging algorithm for providing object oriented applications having reduced footprints
US5848274A (en) * 1996-02-29 1998-12-08 Supercede, Inc. Incremental byte code compilation system
US5764989A (en) * 1996-02-29 1998-06-09 Supercede, Inc. Interactive software development system
US5815720A (en) * 1996-03-15 1998-09-29 Institute For The Development Of Emerging Architectures, L.L.C. Use of dynamic translation to collect and exploit run-time information in an optimizing compilation system
US6112025A (en) * 1996-03-25 2000-08-29 Sun Microsystems, Inc. System and method for dynamic program linking
US6434739B1 (en) 1996-04-22 2002-08-13 International Business Machines Corporation Object oriented framework mechanism for multi-target source code processing
US7987427B1 (en) * 1996-05-10 2011-07-26 Apple Inc. Graphical editor for program files
US6067413A (en) * 1996-06-13 2000-05-23 Instantations, Inc. Data representation for mixed-language program development
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
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
US5999972A (en) 1996-07-01 1999-12-07 Sun Microsystems, Inc. System, method and article of manufacture for a distributed computer system framework
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
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
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
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
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
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
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
JP2000514584A (ja) 1996-10-25 2000-10-31 シュルンベルジェ システーム 高級プログラミング言語を用いたマイクロコントローラ
GB2321322B (en) * 1996-10-28 2001-10-10 Altera Corp Remote software technical support
US6263376B1 (en) 1997-02-24 2001-07-17 Novell, Inc. Generic run-time binding interpreter
US6269475B1 (en) * 1997-06-02 2001-07-31 Webgain, Inc. Interface for object oriented programming language
DE19725593A1 (de) * 1997-06-17 1999-01-07 Siemens Nixdorf Inf Syst Verfahren zum Steuern einer Datenverarbeitungsanlage
US5920725A (en) * 1997-07-02 1999-07-06 Adaptivity Inc. Run-time object-synthesis and transparent client/server updating of distributed objects using a meta server of all object descriptors
US5991544A (en) * 1997-12-09 1999-11-23 Nortel Networks Corporation Process and apparatus for managing a software load image
US5911073A (en) * 1997-12-23 1999-06-08 Hewlett-Packard Company Method and apparatus for dynamic process monitoring through an ancillary control code system
US8752010B1 (en) 1997-12-31 2014-06-10 Honeywell International Inc. Dynamic interface synthesizer
US6052132A (en) * 1998-02-06 2000-04-18 Digital Equipment Corporation Technique for providing a computer generated face having coordinated eye and head movement
US6043827A (en) * 1998-02-06 2000-03-28 Digital Equipment Corporation Technique for acknowledging multiple objects using a computer generated face
US6493870B1 (en) * 1998-03-20 2002-12-10 Sun Microsystems, Inc. Methods and apparatus for packaging a program for remote execution
US6199196B1 (en) * 1998-03-20 2001-03-06 Sun Microsystems, Inc. Methods and apparatus for linking a program for remote execution
US7185332B1 (en) 1998-03-25 2007-02-27 Symantec Corporation Multi-tiered incremental software updating
US6052531A (en) 1998-03-25 2000-04-18 Symantec Corporation Multi-tiered incremental software updating
US6164841A (en) * 1998-05-04 2000-12-26 Hewlett-Packard Company Method, apparatus, and product for dynamic software code translation system
US6148437A (en) * 1998-05-04 2000-11-14 Hewlett-Packard Company System and method for jump-evaluated trace designation
US6189141B1 (en) 1998-05-04 2001-02-13 Hewlett-Packard Company Control path evaluating trace designator with dynamically adjustable thresholds for activation of tracing for high (hot) activity and low (cold) activity of flow control
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
DE19909717C2 (de) * 1999-03-05 2001-01-11 Siemens Ag Ausführungsverfahren für eine Softwarekomponente
US6622300B1 (en) 1999-04-21 2003-09-16 Hewlett-Packard Development Company, L.P. Dynamic optimization of computer programs using code-rewriting kernal module
WO2001008003A2 (en) * 1999-07-23 2001-02-01 Concorde Solutions Inc. Computer programming object externalization
US6883167B1 (en) * 1999-08-04 2005-04-19 Texas Instruments Incorporated Method and system for visual linker
GB9920905D0 (en) * 1999-09-03 1999-11-10 Sgs Thomson Microelectronics A relocation format for linking
US6578194B1 (en) * 1999-09-08 2003-06-10 International Business Machines Corporation System and method using extended relocation types and operations in relocating operations
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
US6700590B1 (en) * 1999-11-01 2004-03-02 Indx Software Corporation System and method for retrieving and presenting data using class-based component and view model
US6757893B1 (en) 1999-12-17 2004-06-29 Canon Kabushiki Kaisha Version control system for software code
US7035989B1 (en) 2000-02-16 2006-04-25 Sun Microsystems, Inc. Adaptive memory allocation
US6760720B1 (en) 2000-02-25 2004-07-06 Pedestrian Concepts, Inc. Search-on-the-fly/sort-on-the-fly search engine for searching databases
US20010047512A1 (en) * 2000-03-23 2001-11-29 Leland Szewerenko Method and system for linking multiple processors having shared memory
US6728951B1 (en) * 2000-04-14 2004-04-27 Hewlett-Packard Development Company, L.P. System and method for performing automated incremental compilation of computer programs
US6546359B1 (en) 2000-04-24 2003-04-08 Sun Microsystems, Inc. Method and apparatus for multiplexing hardware performance indicators
US6647546B1 (en) 2000-05-03 2003-11-11 Sun Microsystems, Inc. Avoiding gather and scatter when calling Fortran 77 code from Fortran 90 code
US6802057B1 (en) 2000-05-03 2004-10-05 Sun Microsystems, Inc. Automatic generation of fortran 90 interfaces to fortran 77 code
US6744450B1 (en) * 2000-05-05 2004-06-01 Microsoft Corporation System and method of providing multiple installation actions
US6981252B1 (en) 2000-07-14 2005-12-27 Symantec Corporation Method and apparatus for automatically uninstalling software on a network
GB0017336D0 (en) * 2000-07-15 2000-08-30 Ibm Preferable modes of software package deployment
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
US6957208B1 (en) 2000-10-31 2005-10-18 Sun Microsystems, Inc. Method, apparatus, and article of manufacture for performance analysis using semantic knowledge
KR100388486B1 (ko) * 2000-12-14 2003-06-25 한국전자통신연구원 객체 관계와 객체 이용 정보를 이용한 소프트웨어컴포넌트 식별 장치 및 그 방법
US7017123B2 (en) * 2000-12-27 2006-03-21 National Instruments Corporation Graphical user interface including palette windows with an improved search function
US7647411B1 (en) 2001-02-26 2010-01-12 Symantec Corporation System and method for controlling distribution of network communications
WO2002069108A2 (en) * 2001-02-26 2002-09-06 Eprivacy Group, Inc. System and method for controlling distribution of network communications
EP1244011A1 (en) * 2001-03-21 2002-09-25 STMicroelectronics Limited Displaying user readable information during linking
US20040015822A1 (en) * 2001-03-23 2004-01-22 Linton Samuel W. Method and apparatus for dynamic assembly and verification of software components into flexible applications
AU2002251225A1 (en) * 2001-04-06 2002-10-21 British Telecommunications Plc Method and apparatus for building algorithms
US20030070160A1 (en) * 2001-10-04 2003-04-10 International Business Machines Corporation Embedding information in software
KR100461535B1 (ko) * 2001-11-02 2004-12-14 한국전자통신연구원 내장형 시스템을 위한 점진적 원격 로딩 장치 및 그 방법
US7062763B2 (en) * 2001-11-13 2006-06-13 Sun Microsystems, Inc. Method and apparatus for remote software code update
US7359914B2 (en) * 2002-11-05 2008-04-15 Autodesk, Inc. Reference manager
US9521209B2 (en) 2002-11-06 2016-12-13 Code Valley Corp Pty Ltd Code generation
US7360201B2 (en) * 2002-12-09 2008-04-15 International Business Machines Corporation Automated analysis and identification of options in project management
US20040143812A1 (en) * 2003-01-14 2004-07-22 Vladimir Bernstein Automatic software design tool for building web and other applications wherein components are linked through connected command and control and data variables
US7346903B2 (en) * 2003-02-04 2008-03-18 Sun Microsystems, Inc. Compiling and linking modules of a cycle-based logic design
US7373519B1 (en) 2003-04-09 2008-05-13 Symantec Corporation Distinguishing legitimate modifications from malicious modifications during executable computer file modification analysis
US20040225282A1 (en) * 2003-05-09 2004-11-11 Ness Anton P. Method and articles for assuring appropriate surgery
US7519951B2 (en) * 2003-09-30 2009-04-14 International Business Machines Corporation Multi-attribute dynamic link library packaging
US8713544B1 (en) 2003-11-25 2014-04-29 Symantec Corporation Universal data-driven computer proxy
US7467378B1 (en) 2004-02-09 2008-12-16 Symantec Corporation System state rollback after modification failure
US8291375B2 (en) * 2004-03-29 2012-10-16 Sybase, Inc. Attribute-based component programming system and methodology for object-oriented languages
US8700671B2 (en) * 2004-08-18 2014-04-15 Siemens Aktiengesellschaft System and methods for dynamic generation of point / tag configurations
DE102004060301A1 (de) * 2004-12-15 2006-06-22 Robert Bosch Gmbh Verfahren zum Initialisieren eines elektronischen Systems umfassend mehrere Plug-Ins
US7475395B2 (en) * 2005-01-04 2009-01-06 Nokia Corporation Multiple device notification synchronization
US8442938B2 (en) * 2005-01-14 2013-05-14 Siemens Aktiengesellschaft Child data structure update in data management system
US8700559B2 (en) * 2005-03-28 2014-04-15 Siemens Aktiengesellschaft Interface chaining to populate a class-based model
US20060245096A1 (en) * 2005-04-29 2006-11-02 Microsoft Corporation Application framework phasing model
US8275793B2 (en) * 2005-04-29 2012-09-25 Microsoft Corporation Transaction transforms
US8418132B2 (en) * 2005-04-29 2013-04-09 Microsoft Corporation Application description language
US8132148B2 (en) 2005-04-29 2012-03-06 Microsoft Corporation XML application framework
US8046737B2 (en) 2005-04-29 2011-10-25 Microsoft Corporation XML application framework
US20070006166A1 (en) * 2005-06-20 2007-01-04 Seagate Technology Llc Code coverage for an embedded processor system
US7797689B2 (en) * 2005-12-12 2010-09-14 Microsoft Corporation Using file access patterns in providing an incremental software build
US7721272B2 (en) * 2005-12-12 2010-05-18 Microsoft Corporation Tracking file access patterns during a software build
US10635455B2 (en) * 2007-02-13 2020-04-28 Oracle International Corporation Simplifying understanding of procedure dependencies in a form definition
KR100871563B1 (ko) * 2007-02-14 2008-12-02 삼성전자주식회사 컴포넌트 기반의 소프트웨어 개발을 위한 장치 및 방법
US8260783B2 (en) * 2007-02-27 2012-09-04 Siemens Aktiengesellschaft Storage of multiple, related time-series data streams
US7987457B2 (en) * 2007-06-25 2011-07-26 Microsoft Corporation Targeted patching for native generation images
US8434077B2 (en) * 2007-10-18 2013-04-30 International Business Machines Corporation Upgrading virtual resources
US20090217242A1 (en) * 2008-02-26 2009-08-27 The Boeing Company Learning software program to web-based file converter
US8918732B2 (en) * 2008-08-09 2014-12-23 Hewlett-Packard Development Company, L.P. Program object properties defined by object space
US8732146B2 (en) * 2010-02-01 2014-05-20 Microsoft Corporation Database integrated viewer
US8856724B2 (en) * 2011-06-20 2014-10-07 Ebay Inc. Systems and methods for incremental software development
US10120664B2 (en) 2015-08-28 2018-11-06 International Business Machines Corporation Incremental build generation
US10552140B2 (en) * 2018-01-31 2020-02-04 Oracle International Corporation Automated identification of deployment data for distributing discrete software deliverables
US10719304B2 (en) * 2018-11-16 2020-07-21 Fujitsu Limited Computer program generation using a library
US11822910B2 (en) 2021-10-14 2023-11-21 International Business Machines Corporation Reducing a delivery size of a software update

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4589068A (en) * 1983-10-03 1986-05-13 Digital Equipment Corporation Segmented debugger
US4558413A (en) * 1983-11-21 1985-12-10 Xerox Corporation Software version management system
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
US5182806A (en) * 1989-06-30 1993-01-26 Digital Equipment Corporation Incremental compiler for source-code development system
AU638999B2 (en) * 1989-06-30 1993-07-15 Digital Equipment Corporation Incremental compiler for source-code development system
US5193191A (en) * 1989-06-30 1993-03-09 Digital Equipment Corporation Incremental linking in source-code development system
US5170465A (en) * 1989-06-30 1992-12-08 Digital Equipment Corporation Incremental-scanning compiler for source-code development system
US5201050A (en) * 1989-06-30 1993-04-06 Digital Equipment Corporation Line-skip compiler for source-code development system
GB2242293A (en) * 1990-01-05 1991-09-25 Apple Computer Apparatus and method for dynamic linking of computer software components
US5124989A (en) * 1990-01-08 1992-06-23 Microsoft Corporation Method of debugging a computer program
US5204960A (en) * 1990-01-08 1993-04-20 Microsoft Corporation Incremental compiler
US5140671A (en) * 1990-01-26 1992-08-18 International Business Machines Corporation Expert system debugger
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
US5187789A (en) * 1990-06-11 1993-02-16 Supercomputer Systems Limited Partnership Graphical display of compiler-generated intermediate database representation
US5421016A (en) * 1991-12-12 1995-05-30 International Business Machines Corporation System and method for dynamically invoking object methods from an application designed for static method invocation

Also Published As

Publication number Publication date
AU6086294A (en) 1995-01-17
JPH08512154A (ja) 1996-12-17
DE69402539D1 (de) 1997-05-15
US5519866A (en) 1996-05-21
EP0693193A1 (en) 1996-01-24
EP0693193B1 (en) 1997-04-09
WO1995000904A1 (en) 1995-01-05
CA2144875A1 (en) 1995-01-05

Similar Documents

Publication Publication Date Title
CN1102934A (zh) 增量连接系统
CN1105507A (zh) 模型化系统
US5956479A (en) Demand based generation of symbolic information
CN1082208C (zh) 从语言中性源程序产生语言专用接口定义的系统和方法
JP4195479B2 (ja) インクリメンタル生成システム
CN1096637C (zh) 管理类方法名
CN1181428C (zh) 软件翻译的内省编辑器系统、程序和方法
CN110825369A (zh) 一种基于java语言的代码自动生成的方法
CN1591405A (zh) 版本兼容的数据处理系统
CN101052948A (zh) 对象过程图应用程序开发系统
CN101048729A (zh) 用于编辑标记语言文档的文档处理和管理方法
CN1568458A (zh) 无需修改现有代码即可增加新软件特征的方法
US20080313208A1 (en) Apparatus, system, and method for automated context-sensitive message organization
CN1949187A (zh) 一种程序调测系统及方法
CN1875343A (zh) 用于建立软件套件的系统和方法
JP4948126B2 (ja) Java(登録商標)言語プログラムを用いた大規模業務システムを分析するプログラム及びその処理方法
CN1143225C (zh) 调整信息生成装置和由调整装置所组成的程序开发系统
CN1105508A (zh) 动态浏览窗系统
CN1251066C (zh) 程序再生方法
CN1950818A (zh) 处理以多种标记语言表述的文档
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