JP4195479B2 - インクリメンタル生成システム - Google Patents

インクリメンタル生成システム Download PDF

Info

Publication number
JP4195479B2
JP4195479B2 JP2006239370A JP2006239370A JP4195479B2 JP 4195479 B2 JP4195479 B2 JP 4195479B2 JP 2006239370 A JP2006239370 A JP 2006239370A JP 2006239370 A JP2006239370 A JP 2006239370A JP 4195479 B2 JP4195479 B2 JP 4195479B2
Authority
JP
Japan
Prior art keywords
component
components
list
implementation
determined
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.)
Expired - Lifetime
Application number
JP2006239370A
Other languages
English (en)
Other versions
JP2007012088A (ja
Inventor
マッキナーニィ,ピーター,ジョセフ
ギボンズ,ビル
Original Assignee
オブジェクト テクノロジー ライセンシング コーポレイション
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 オブジェクト テクノロジー ライセンシング コーポレイション filed Critical オブジェクト テクノロジー ライセンシング コーポレイション
Publication of JP2007012088A publication Critical patent/JP2007012088A/ja
Application granted granted Critical
Publication of JP4195479B2 publication Critical patent/JP4195479B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime 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/70Software maintenance or management
    • G06F8/71Version control; Configuration management

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本発明は、一般に、コンピュータ支援ソフトウェア・エンジニアリング(CASE)、特にコンピュータ・プログラムを生成するための対話型でダイナミック環境に提供する人間指向オブジェクトプログラミング・システム(HOOPS)に関する。
本発明は、オペレーティング・システム(OS)ソフトウェアおよびグラフィック・ユーザ・インターフェース(GUI)を有する多数のアプリケーションのような複合プログラムを開発する際に特に有用である最適インクリメンタル・コンパイラでコンピュータ・プログラムを編集する細粒度ソース・コードをプログラマが、実行することを可能にする。本発明は、通常用いられているオブジェクト指向プログラミング(OOP)言語、C++を用いた実施例で説明されているが、この原理は、他のオブジェクト指向および手続型の両方のコンピュータ・プログラミング言語に適用可能であり、従来の言語およびOOP言語の両方を使用するプログラムを生成するために使用することができる。
オブジェクト指向プログラミング(OOP)は、ユーザ・フレンドリーなインテリジェント・コンピュータ・ソフトウェアを生成するための好ましい環境である。
OOPの主な要素は、データ遮蔽性(data encapsulation)、継承(inheritance)および多相性(polymorphism)である。これらの要素は、アイコン、マウスカーソルおよびメニューを有するウインドウイング環境によって一般に特徴づけられるグラフィック・ユーザ・インターフェース(GUI)を生成するために使用することができる。これらの3つの主な要素はOOP言語に共通であるのに対して、大抵のOOP言語は3つの重要な要素を違ったふうに実装する。
OOP言語の例は、Smalltalk、Object PascalおよびC++である。Smalltalkは実際に言語以上のものである。すなわち、それはプログラミング環境とするとより正確に特徴づけられる。Smalltalkは、1970年初期にゼロックス社のパロアルト研究センター(PARC)の学習研究グループで開発された。Smalltalkでは、メッセージは、オブジェクト自体で評価するためにオブジェクトに送られる。メッセージは、従来のプログラミング言語の関数呼出しと同様な役割を行っている。プログラマはデータタイプに注意する必要がない。どちらかといえば、プログラマは、メッセージの正しい順序を生成することおよび正しいメッセージを使用することに注意することだけ必要である。Object Pascalは、アップル社のマッキントッシュ(登録商標)コンピュータのために使用される言語である。アップル社は、パスカルの設計者、ニクラウス・ウィルス(Niklaus Wirth)と共同でオブジェクトパスカルを開発した。C++は、Cの拡張として1983年AT&Tのベル研究所で、ビョーン・ストラウストラップ(Bjarne Stroustrup)によって開発された。主なC++のコンセプトはクラスであり、それは、ユーザ定義タイプである。クラスがオブジェクト指向プログラミング機能を提供している。C++モジュールは、Cモジュールと互換性があり、現在のCライブラリがC++プログラムとともに使用されることができるように自由にリンクできる。最も広く使用されるオブジェクトに基づくプログラミング言語およびオブジェクト指向プログラミング言語は、ノルウェーのO−J・ダール(O−J.Dahl)、B・ミーラウ(B.Myhrhaug)およびK・ニガード(K.Nygard)によって1960年に開発されたSimulaまでその祖先をさかのぼることができる。OOPの主体に関する他の情報は、1991年、カリフォルニア州レッドウッド市のベンジャミン/カミングス出版社発行のGrady Booch著“Object Oriented Design with Application”を参照することによって得られる。
コンピュータ・プログラムを実行することに関する全処理には、オブジェクト・コードと称される機械で実施可能な形式に、プログラマによって記述されたソース・コードを翻訳すること、そのオブジェクト・コードを実行することが含まれる。翻訳処理は、インタプリタまたはコンパイラによって実行される。インタプリタの場合、プログラムが実行されるときに翻訳が行われるのに対して、コンパイラの場合、プログラムを実行する前に翻訳が行われ、オブジェクト・コードとして記憶される。すなわち、通常のコンパイルおよび実行システムでは、翻訳および実行の2つのフェーズは独立していて、コンパイルが一度だけ行われる。Smalltalkインタプリタのようなインタプリティブ・システムでは、2つのフェーズが順次実行される。そのプログラミング環境の特質が、オブジェクトが実行されるまで特定のレジスタまたはアドレス空間の指定を行うことができないので、Smalltalkためのインタプリタが必要とされる。
コンパイラは、3つの部分、すなわち、字句解析部、構文解析部およびコード生成部から構成される。字句解析部への入力は高レベル言語プログラムを表す一連の文字である。この字句解析部は、シーケンスを構文解析部への入力である一連のトークンに分割する。この構文解析部はトークンを命令に分割し、文法規則のデータベースを使用して各命令が文法的に正しいか否かを決定する。正しくないならば、エラー・メッセージが発生される。正しいならば、命令は、一連の基本命令に分解され、低レベル言語を発生するためにコード生成部に転送される。コード生成部そのものは、3つの部分、すなわち、中間コード生成、コード最適化およびコード生成に一般に分割される。基本的に、コード生成部は、構文解析部からの出力を受取り、マシン言語コードを生成する。
ソフトウェアの開発を支援するために、インクリメンタル・コンパイラが開発され、このコンパイラは、バッチ処理動作において、他のステートメントに対して後で生成されるコードとは独立に、受取られたときの一つのステートメントまたはステートメント・グループに対してコードを生成する。インクリメンタル・コンパイルの長所は、必要なデバッグ処理が全プログラムが記述されるまで後回しされるのではなく、コードが記述ごとに、プログラムの一部分のコードに対してコンパイルおよびテストすることができることにある。しかしながら、伝統的なインクリメンタル・コンパイラは、毎回全モジュールを再処理しなければならない。
最適化コンパイラは、多くの場合、非最適化コンパイラの場合よりソース・レベルでデバッグをすることがもっと困難である非常に最適化されたオブジェクト・コードを生成する。この問題は、ルーチンは適切な応答をするようにコンパイルされるけれども、それがその応答を計算する正確な方法がソース・コードで記述された方法と著しく異なっているという事実にある。最適化コンパイラが行うことができるいくつかのことは、最終結果に影響を及ぼさないことが知られているコードまたは変数を除去すること、不変コードをループの中から外に移動させること、共通コードを結合すること、変数がもはや必要としないとき変数に割当たられたレジスタを再使用すること等を含んでいる。したがって、ソースからオブジェクト・コードへのおよびオブジェクト・コードからソースへのマッピングは、これらの最適化のために難しいことがある。変数値を検査することは、変数値が必ずしもルーチン内のいかなるロケーションでも使用可能ではないので、難しいことがある。最適化されたコードの変数値を修正することは、不可能でないとしても、特に困難である。特にvolatile(揮発性)であるとして宣言されていなければ、コンパイラは変数に割当てられた値を“覚えておき”、変数を再読出しをせずに、後でコード中の“覚えている”値を使用する。したがって、その値の変化は誤りのあるプログラム結果を生じることがあった。
コンピュータ・プログラムを生成し、テストおよび開発する技術には多くの進歩があったが、公知のソフトウェア・ツールは、しばしば洞察力のある直感を必要とし、今だにプログラマに相当な負担を負わせる。さらに、伝統的なバッチ指向プログラミング・システムは、プログラミングの創造的な活動に対して非常に破壊的である、非常に長い編集−コンパイル−テストのサイクルを提供している。
したがって、本発明の目的は、プログラマに対してより良く集中し専念することを促進させる処理であって、コンピュータ・プログラムの生成のための人間指向の対話型でかつダイナミック処理を提供すること、これにより、より大きな生産性を得て、コンピュータ・プログラムの生成で必要とされる編集−コンパイル−テストのサイクルを最小にする自動プログラム生成機構(build mechanism)を提供することにある。
本発明によれば、プログラム生成は、プロジェクトと呼ばれるインクリメンタル・プログラム・モデルの相互作用および3つの主要な機能性によって可能となる。プログラムは、特性(property)と呼ばれる名前付けられたデータ項目(named dataitemes)のリストからなる構成要素(component)と呼ばれる意味単位(semanticunit)としてモデル化される。伝統的なシステムで行われるファイルのゆるやかなコレクションとしてプログラムを記憶するよりもむしろ、本発明の人間指向オブジェクトプログラミング・システム(HOOPS)は、このプロジェクト中にプログラムについての全ての情報を記憶する。
本発明の実施にあたっては、コンピュータ・プログラムは、プロジェクト構成要素および生成可能な構成要素のコレクションとしてモデル化される。それぞれは、単一のコンパイル可能な言語要素を表し、かつ増加性(incrementality)のレベルを規定している。コンピュータ・プログラムのためのモデルを提供する構成要素(component)は、生成処理中はアクセスするために記憶される。この記憶された構成要素は、順次にアクセスされ、構成要素に関連する従属性(従属関係)は、コンパイラを使用してクライアント・リストおよび参照(リファレンス)リストを発生させるように計算される。最後に、構成要素は、コンパイラ生成の従属性に加えて構成要素の特性(properties)を使用してコンピュータ・プログラムを生成するようにコンパイルされる。
本発明の好ましい実施例は、C++で記述され、C++、Cおよびアセンブラでプログラムを生成するために使用される。これらは現在最も使用されている言語である。本発明を使用して生成されるプログラムは、一般にこれらの言語の3つ全てを使用する。したがって、本発明そのものはオブジェクト指向プログラミング言語で記述されているオブジェクト指向プログラムであるが、本発明は、オブジェクト指向プログラミング言語でプログラムを生成することに限定されず、手続型言語でプログラムを生成する際にも同様に有用である。さらに、本発明は、C++言語に限定されず、他のプログラミング言語で実施されることができ、かつ本発明はこれらの3つの言語への応用に限定されない。すなわち、本発明の教示するところにより、もっと一般的なアプリケーションの人間指向オブジェクト・プログラミング・システムで使用することができる。
上述の事項および他の目的、態様および利点は、図面に関して本発明の好ましい実施例の下記の詳細な説明から、よりよく理解されるだろう。
(発明の概観)
本発明による人間指向オブジェクトプログラミング・システム(HOOPS)では、構成要素(Component)は、インクリメンタル・コンパイルのための粒度である。すなわち、構成要素は、クラス(Class)または関数(Function)のような単一のコンパイル可能な言語要素を表している。構成要素は、2つの部分、すなわちインターフェース(Interface)と呼ばれる外部から認識できる部分(すなわち公開(public)部分)およびインプリメンテーション(Implementation)(非公開(private)部分)に分割される特性セットからなる。これは、構成要素(Component)が他の構成要素のインターフェースに従属しているだけのこともあることを意味する。プロジェクト(Project)の全構成要素はツリー構造に組織され、プロジェクト構成要素と呼ばれるルート構成要素であるツリーのベースを有する。
3つの主要な機能性は、データベース、コンパイラおよび生成機構である。データベースは、構成要素およびその特性(Property)を、持続的に記憶し、検索する。特性のソース・コードをコンパイルするとともに、コンパイラは、構成要素に関連する従属性を計算する責任を負う。生成機構は、生成処理中、構成要素のコンパイル処理を正確かつ効率的に一定の順序に配列するために、コンパイラ生成従属性に加えて構成要素の特性を使用する。生成機構は、いつもプログラムに関するグローバルな視野を有する。これは、プログラムが互いに独立してコンパイルされる、ファイルのセットによって表されている伝統的な方法と対照をなしている。伝統的なプログラミング環境に使用されるファイルは、ファイルに含まれる意味ユニットに処理の特定の固定的順序を負わせている。
本システムは、編集変更(editing change)が、インターフェース(Interface)にあるのか、またはインプリメンテーション(Inplementation)にあるのかどうかを含む、構成要素の編集変更(editing change)の経過を自動的に追う。これは、ファイルレベルでのみ追跡する従来のシステムと対照的である。従属性解析は自動的であり、構成要素間の関係に基づいている。このシステムは、従属性が存在する事実ばかりでなく、それがいかなる種類の従属性であるかを記録することをコンパイラが可能にする機構を含んでいる。これにより、生成(組立)機構が、どの構成要素が実際にコンパイルを必要としているかをより正確に決定して、再コンパイルが必要であろうとなかろうと従属性が存在する全ての構成要素を再コンパイルするよりも、このシステムを効率的にすることを可能にしている。
従来のコンパイラは、ソフトウェアを生成することを容易にするために、プログラミング環境のソフトウェア構造ツールを使用する。例えば、全てのプログラムを個々のファイル内に記憶されているモジュールに分割することは、従来のプログラム構造では通例である。そして、個々のモジュールは、それぞれ別々に処理される。Makeコマンドは、コンピュータ・プログラムを構成するモジュールを管理および保持するために使用される。すなわち、Make機能は、プログラムのモジュール間の関係の経過を追い、変化がなされた後モジュールを一貫性があるようにするのに必要とされるコマンドのみを発生する。しかしながら、プログラマが、モジュール間の関係(従属性)を規定するMakefile仕様を生成することが必要である。Makefile仕様に対する要求は、プログラマが、いつ従属性が発生するかを決定することができなければならないこと、およびプログラマに同期化従属性を同期化する負担をかけていることを意味している。実際、これは通常、不必要な従属性の存在および必要な従属性の省略の両方を意味する。不必要な従属性の存在および必要な従属性の省略の両者は、コンピュータ・プログラムの生成におけるエラー源であることが多い。
Make機能と対照的に、本発明による生成機構は、プログラマがMakefile仕様のような仕様を生成しないと言う点で異なっている。この生成機構は、従属性のいかなる予備知識も想定していない。すなわち、実際には、それは、要素の従属性を“見いだし”、これらの従属性の経過を追う。これは、生成機構が、予め存在する従属性情報がない場合に、最初からプログラムを生成することを意味する。初期の生成動作では、全ての構成要素は変更リストに列挙される。変更リスト上の構成要素のコンパイルが試みられるが、もしそのコンパイルが他の構成要素のコンパイルに従属するならば、第1の構成要素のコンパイルが中断されるかまたは打ち切られるかのいずれかである。そして第2の構成要素のコンパイルが試みられる。このようにコンパイルすることができる構成要素が見つけだされるまで続けられる。次に、コンパイルが中断されたかまたは打切られた構成要素に対して、処理で既に作成された情報を用いて、生成機構が再度働く。
生成機構は、全てのインターフェース(Interface)が、全てのインプリメンテーション (Inplementation)の前にコンパイルされるように、コンパイルを順序付ける。これは、潜在的な相互従属性の数を減少させるので、したがって効率を増加する。この生成機構は、構成要素(Component)の処理を制御するために、有限状態機械(finite state machine)のフォームを用いている。そして、中断されたかまたは打切られた構成要素のコンパイルを最少にするために、正しい順序付け(ordering)を確実にするのに役立てている。
変更(構成要素の編集または構成要素の付加あるいは削除)が行われた後の生成動作は、変更リストが変更されたこれらの構成要素のみを含むことを除いて、初期の生成動作と同様であり、再コンパイルを必要とするこれらの構成要素のみを再コンパイルするために、生成機構は予め開発されたクライアントおよびソース参照リストを使用する。本発明によって実施される機能レベルのインクリメンタル・コンパイルは、通常、プログラムのより小さい部分が再生成されることになるので、プログラム変更からのテストまでのターン・アラウンド・タイムを大いに減少する。
プログラム・モデルは、インターフェースのための内部処理された様式(宣言(Declaration)特性と呼ばれる)を記憶および再使用するための方法を提供する。コンパイラは、他の構成要素をコンパイルする時に効率的に使用されるように、インターフェース(Interface)の処理された内部様式(form)を記憶する。そして、になる。これは、使用されるインターフェースが、使用される全てのファイルに含まれて(include)、その都度コンパイラによって内部様式に再処理される伝統的なシステムとは対照的である。さらに、構成要素および特性のプログラム・モデルは、特定の構成要素と密接に結合した情報を記憶するのに自然な方法を提供する。この情報は、プログラマにより直接または他のツールにより間接のいずれかによって使用することができる。伝統的なシステムでは、このようなデータは、コンパイルの終了で忘れられるかまたはプログラム・ソースとゆるく結合されるのみかのいずれかである。
エラー処理は、生成機構が、エラーを有する構成要素に従属する構成要素に対してコンパイルすることを避けることを可能にする。生成機構は、プロジェクト中のできるだけ多くを正確に生成する。これらはともに、最初の誤りのあるファイルで中止するか、または、続行しても、誤りを含んだファイルを繰り返して処理する伝統的なシステムと対照的である。エラー処理は、エラーである特定の構成要素を間違って処理されないように、警告メッセージがコンパイラによって発生することを可能にする。この処理により、警告を発生しているときでさえプログラムが正確に生成されることを可能にする。
ハードウェア・プラットホーム
ここで、図面を参照するに、特に第1図を参照とすると、汎用コンピュータ10が示されている。コンピュータ10は、システム・ユニット12、陰極線管(CRT)または液晶ディスプレイ(LCD)のような高解像度ディスプレイ装置14を有する。ディスプレイの種類は、それがグラフィック・ユーザ・インターフェース(GUI)のウィンドウ・システムのために必要とされる高解像が可能なディスプレイであるべきであることを除いて重要ではない。コンピュータへのユーザ入力は、キーボード16およびマウス18のようなカーソル指示装置による。マウス18はキーボード16に接続される。このキーボード16は、次にシステム・ユニット12に接続される。マウス18は、その代りに、システム・ユニット12の専用または直列ポートに接続されてもよい。第1図に示されたタイプの汎用コンピュータの例は、アップル社のマッキントッシュ(アップルコンピュータの登録商標)およびIBM社のPS/Vである。他の例として、IBM社のRISCシステム/6000およびサン・マイクロ・システムズ社のコンピュータのような種々のワークステーションが含まれる。
第2図は、第1図に示された汎用コンピュータの主要な構成要素を詳細に示している。システム・ユニット12は、中央処理装置(CPU)21、ランダム・アクセス・メモリ(RAM)22およびバス24に接続される読出し専用メモリ(ROM)23を含んでいる。CPU21は、アップル社のマッキントッシュ(登録商標)コンピュータに一般に使用されているモトローラ社の68030および68040マイクロプロセッサまたはIBM社のPS/Vコンピュータに一般に使用されているインテル社の80386および80486マイクロプロセッサのようないくつかの商用マイクロプロセッサのいずれでもよい。ワークステーションに一般に使用されるRISC(reducedinstruction set computers)コンピュータのような他のマイクロプロセッサもまた、使用することができる。ROM24は、CPU21のために基本入出力システム(BIOS)を含む基本マイクロコードを記憶する。コンピュータ・システム10のためのオペレーティング・システム(OS)はROM24に記憶されてもよいし、またはそのOSは初期プログラムロード(IPL)の一部としてRAM22に記憶されてもよい。RAM22はまた、アプリケーション・プログラムの一部およびプログラムの実行で発生される一時的データを記憶するために使用される。バス24は、アップル社のNuBus(登録商標)、IBM社のマイクロチャネル(登録商標)またはISA(industrial standard adapter)あるいはEISA(extended industrial standard adapter)バスのような工業規格の一つでもよい。
バス24には、ユーザ・インターフェース・アダプタ25およびI/Oアダプタ26を含む種々の入出力(I/O)アダプタもまた、接続されている。キーボード16はユーザ・インターフェース・アダプタ25に接続され、I/Oアダプタ26は、フロッピーディスク駆動装置27およびハードディスク駆動装置28に接続する。フロッピーディスク駆動装置27は、取外し可能な媒体へのデータおよびプログラムの読出しおよび書込みを可能にするのに対し、ハードディスク駆動装置28は、RAM22にページインおよびページアウトされるデータおよびプログラムを一般に記憶する。ディスプレイ装置14は、ディスプレイ・アダプタ29を介してバス24に接続されている。通信アダプタ30はネットワークへのインターフェースを提供する。集積回路(IC)チップの形の他のサポート回路(図示せず)は、バス24および/またはCPU21に接続されている。これらは、例えば、バス24上のトラフィックを制御するバス・マスタ・チップを含んでいる。あるコンピュータにおいては、バス24は2つのバス、すなわちデータ・バスおよびディスプレイ・バスであり、ディスプレイ・バスは、グラフィック・ユーザ・インターフェースで望ましい高速ディスプレイ動作を可能にしている。
定義
プログラム
本発明の説明で使用されるように、HOOPSプログラムは、「プロジェクト(Project)」と呼ばれる一つの生成不可能な構成要素(non-buidable component)および“生成可能な構成要素(buildable component)”の集合(Collection)からなる。それはまた、生成不可能な構成要素(non-buidablecomponent)を格納することが可能であるが、この説明では、形容詞がない構成要素について言及されている時はいつでも、意味しているものは“生成可能な構成要素(buildable component)”である。生成不可能な構成要素(non-buidable component)は生成動作中コンパイルされない。
構成要素(Component)
構成要素(Component)は独特な識別を有し、名前を付けられる。異なる構成要素は、IDと呼ばれるいくらかの様式の独特な識別子(Identifer)によって識別される。いかなる構成要素にも属しないNullIDと呼ばれる、他とは異なるIDがある。構成要素が形成されると、このIDが割当てられ、構成要素の存在中決して変更されない。構成要素が削除されると、その構成要素のIDは決して再使用されない。実際には、IDは通常数字である。
構成要素はまた、余白を含まないテキスト・ストリング(文字列)からなる名前を有する。異なる構成要素が異なる名前を有する必要はない。その名前が、ある所与のテキスト・ストリングにマッチする全ての構成要素のリスト(多分、空)を得ることは可能である。構成要素の名前は、構成要素の存在中何回変更してよい。
各生成可能な構成要素は特定のコンピュータ言語に関連している。実際には、コンピュータ言語は、通常テキスト・ストリング(文字列)によって識別される。各コンピュータ言語は、それに関連付けられたコンパイラを有し、そのコンパイラは、その言語の全ての構成要素をコンパイルするときに使用される。実際には、所与のコンピュータ言語が一つ以上のコンパイラと関連付けられることは可能である。この場合、構成要素は、言語と特定のコンパイラを識別するための方法をともに記録しなければならない。
特定の言語は、それに関連した特定の構成要素の種類(Kind)からなる特定セットおよびインプリメンテーション特性の特定セットを有し、それらは全ての種類は異なっている。したがって、ある言語の特定意味構成要素は、必要に応じて異なる方法で構成される。
構成要素は「BuildState(生成状態)」を有する。BuildStateは、NeverCompile(コンパイル不可)、Compiled(コンパイル済み)、NeedToCompile(要コンパイル)、Uncertain(不確定)、BeingCompiled(コンパイル中)、CompileError(コンパイル・エラー)、UncertainError(不確定エラー)のリストからの値である。実際には、これらの値は通常数値である。各構成要素は、「InterfaceBuildState(インターフェース生成状態)」および「ImplementationBuildState(インプリメンテーション生成状態)」と呼ばれる一対のBuildStateを有する。あらゆる構成要素は、それが生成可能(buildable)であれ生成不可能(non-buildable)あれ、これらのBuildStateの両方を有する。生成不可能構成要素に対しては、これらのBuildStateは、両者共NeverCompile(コンパイル不可)である。
BuildStateはアクセスされても、および変更されてもよい。構成要素のBuildStateを同一値に再度設定することは可能であり、いかなる影響も引き起こさない。BuildStateを変更することは、同一または異なる構成要素の他の特性のBuildStateを変更するかまたは例えば、変更リストもしくはエラー・リストのようなあるリストからの参照(リファレンス)を付加あるいは削除するような、明確な副作用を有するかもしれない。
構成要素は、意味言語構成要素を表すために使用される。これが行われる方法は、モデル化されている特定のコンピュータ言語に依存する。例えば、C++では、構成要素によって表される言語構成要素の部分リストは、グローバル・データ(global data)、グローバル関数(global function)、クラス(class)、データ・メンバー(data member)、メンバー関数(member function)、型定義(typedef)、列挙(enum)、列挙子(enumerator)、マクロ(macro)、ユニオン(union)および構造体(struct)を含んでいる。一般に、各意味構成要素は関連する異なる種類を有する。
特性(Property)
構成要素(Component)は名前を付けられた「特性(Property)」の集合からなる。特性は、構成要素に関連付けられたいくつかのデータを表す。構成要素のIDと特性名が与えられたデータを取り出したり、格納したりすることができる。実際には、特性名は、名前を識別する番号(このような番号は、ときにはトークンと呼ばれる)によって通常、内部的に表される。いかなる特性にも属しない「NullProperty(ヌル特性)」と呼ばれる他とは異なる特性名がある。
所定の特性に関連するデータは、異なる構成要素(Component)に対して異なっている。一つの構成要素に対するある特性のためのデータを変更することは、他の構成要素の同一の特性のためのデータを変更することを意味しない。しかしながら、構成要素の一つの特性の変更により、同一または他の構成要素の他の特性の変更を引き起こすことは可能である。
IDと特性名からなる一対は、リファレンス(Reference)と呼ばれる。リファレンスは、特定の特性データをユニークに識別する。しばしば、リファレンスは、それが構成要素および/またはそれが参照する特性であるかのように漠然と使用される。実際には、リファレンスは、プログラム生成に直接使用されない情報で、データのどのバージョンが参照されているかおよびデータのどの細区分(subsection)が参照されているかを識別する他の情報、を通常含んでいる。
全ての構成要素は、「名前(Name)」および「コンテナ(Container)」の特性を有しなければならない。名前特性は構成要素名を記憶する。コンテナ特性は特性名がNullProperty(ヌル特性)である単一のリファレンスを含んでいる。ある構成要素から開始して、それを、そのContainer ID(コンテナID)によって参照される構成要素とを連続して置換えて行くと、常に最後にはプロジェクト構成要素(Project component)となる。プロジェクトのコンテナIDはNullID(ヌルID)である。したがって、全ての構成要素は、プロジェクトにあるものとして記述されている。
生成特性(また構成要素生成リスト(component built list)と呼ばれる)は、構成要素が生成された順序の最後の生成で、正しくコンパイルされた特性リストを記録する。同一の特性は、多くても一度リスト上に出現するだけである。それは、テストおよびデバッグのために使用される。
プロジェクト構成要素(Project Component)
プロジェクトは、さらに特性「ChangeList(変更リスト)」および「ErrorList(エラー・リスト)」を有する構成要素である。ChangeList(変更リスト)特性はリファレンスのリストである。このリファレンスは、構成要素および最後の生成以来変更された特性を記述する。実際には、ChangeList(変更リスト)は、プログラムを生成する際の効率のために、いくらかの方法で分類された一つ以上のリストによって表されてもよい。ErrorList(エラー・リスト)特性もまた、リファレンスのリストである。これらのリファレンスは、最後のプログラム生成中エラーを有するものとしてリストされた構成要素を記述している。リファレンスは、全てその特性としてエラーを有する。各リファレンスと関連しているのは数値で表されたキーである。このキーは、特定のメッセージおよび構成要素の特定された特性の特定サブレンジの位置を突きとめるために、特定のエラー特性とともに使用される。
生成可能な構成要素(Buildable Component)
生成可能な構成要素はまた、特性である「宣言(Declaration)」、「オブジェクト・コード(Objectcode)」、「クライアント(Clients)」、「ソース・リファレンス(SourceReferences)」、「エラー(Errors)」を有しなければならないし、特性「インターフェース(Interface)」、「インプリメンテーション(Implementation)」および「メンバー(Members)」を有してもよい。
宣言特性は、コンパイラのためのデータキャッシュを表す。これは、構成要素が、例えばコンパイルされてしまう前、空でもよい。実際には、記憶された表現は、コンパイラの内部表現とは異なってもよいが、それはコンパイラのシンボル・テーブルのエントリとして考えられることができる。
オブジェクト・コード特性は、構成要素のための実行可能なコードを表す。これは、構成要素が、例えばコンパイルされてしまう前、または、いかなるオブジェクト・コードもこの構成要素と関連していない場合、空でもよい。実際には、それは、通常、ほかの所に記憶される実際のコードを指示するための手段を提供している。
クライアントおよびソース・リファレンス特性は、リファレンスおよび「従属性(dependency)」からなるペアの集合である。従属性は変更リストである。変更は、特定の有限ストリング・リストから選択されたテキスト・ストリングとして表することができる。インターフェース特性における使用とは反対に、インプリメンテーション特性のみに対する構成要素に対して、リファレンスを区別するために使用される「パブリック(Public)」と呼ばれる特定の変更がある。リストのn番目の変更があるならば、n番目のビットが“1”であり、なければ“0”であるビット・ベクトルとして、従属性は表すことができる。
「エラー」特性は複数の三つ組みのリストからなる。各三つ組みは「キー」、特性名およびメッセージからなる。キーは数値識別子である。所定のキーは、特定のエラー特性に一度だけ現れることができる。特性名は、通常インターフェースまたはインプリメンテーションである。メッセージは、テキストおよび/またはグラフィックの一部分である。
インターフェースおよびインプリメンテーション特性は、構成要素のソース・テキストを表す特性である。ソース・テキストは、テキストよりもむしろトークンとして記憶され、もし必要とされるならば、異なる様式でアクセスすることができる。これらの特性によって表されるテキストは、プログラミング環境においてそれをマニュアルで編集することによって変更することができる。インターフェース・データは、それからソース・テキストが必要に応じて再構成することができる構造化フィールドとして記憶されるようにするが可能である。
メンバー特性は、リファレンスの集合で(多分、空)、そのコンテナとしてこの構成要素を有しているプロジェクト中の各構成要素に対する特性である。
属性(Attribute)
構成要素は多数の「属性(attribute)」を有する。属性は「真」または「偽」のいずれかである。実際には、属性は、数値“1”および“0”によって表される値、「真」および「偽」で、メモリの単一ビットによって通常表されている。
全ての構成要素は属性「IsBuildable」を有する。もしこの属性が「真」ならば、この構成要素は生成可能(buildable)であり、さもなければ、それは生成不可能(non-buildable)である。構成要素は、常に生成不可能かまたは一時的生成不可能(ある一時的条件の動作のために)であってもよい。
生成可能な構成要素はまた、属性「IsInline」を有する。この属性が「真」であるとき、構成要素のインプリメンテーションは公開(public)であり、これは、他の構成要素がインプリメンテーションの変化に従属され得ることを意味する。もしそれが偽であるならば、インプリメンテーションの変更により、他の構成要素は決して変更しない。
生成可能な構成要素はまた、属性「IsSynthetic」を有する。この属性は、コンパイラによって生成処理中、形成される構成要素に対して「真」である。それは、プログラマによってマニュアルで作成される構成要素に対して「偽」である。合成構成要素(synthetic component)は、コンパイラがデフォルト言語要素に対応する構成要素を形成することを可能にするように設けられている。このデフォルト言語要素は、必要ではあるが、プログラマにより明示的に作成する必要のないものである。実際には、例えば合成された構成要素がマニュアルで編集されるならば、属性IsSyntheticを真から偽へ変更することが可能であるかもしれないが、偽から真への逆の変更は決して可能ではない。合成構成要素はしばしばインターフェースまたはインプリメンテーション特性を有しないが、いかなる場合でも、常にそのInterface BuildStateおよびImplementation Bui1dStateはコンパイル済み(Compiled)である。
種類(Kinds)
各構成要素は種類(kind)を有する。種類は、例えば、同一特性または同一言語特有の動作を共有するグループに、構成要素を分類するために使用されるテキスト・ストリングである。大部分の種類は特定のコンピュータ言語に特有であり、意味的に特定言語要素を指定するように使用される。
しかしながら、システムによって規定されるいつくかの種類がある。これらは、プロジェクト(Project)、ライブラリ(Library)およびコンテナ(Container)の種類(kind)である。これらの種類は生成不可能な構成要素に適用されるのみである。プロジェクト種類はプロジェクト構成要素の種類である。ライブラリ種類は、共有ライブラリまたはアプリケーションのようなオブジェクト・コードの単一の外部ブロックの中にリンクされるべきである構成要素の集合に適用される。コンテナ種類は、編成上の目的のために他の構成要素をグループ化するために適用される。実際には、種類は、通常内部的には数値で表される。
プログラム表現
第3図は、構成要素セット31から構成されるようなプログラムの概念的表現を提供する。各構成要素は、2つの部分、すなわち、インターフェース(Interface)311と呼ばれる外部から認識できる部分(すなわちpublic:公開)およびインプリメンテーション(Implementation)(private part:非公開部分)312に分割される特性セットからなる。第3図に示されるように、構成要素は、他の構成要素のインターフェースにのみ従属する。プロジェクトにおける全構成要素は、ツリー構造に編成されており、プロジェクト構成要素と呼ばれるルート構成要素32であるツリーのベースを有する。当業者によって理解されるように、構成要素は、必ずしもエンティティを自分自身に含む必要はなく、実コードのための記憶位置を指示するポインタを含んでいてもよい。それにもかかわらず、このツリー構造表現はプログラムの編成を表現するのに有用であり、したがって、同様なツリー構造表現は、後述される複数のユーザ・スクリーンの一つで使用される。
第4図は、本発明の3つの主要な機能性を示すブロック図である。これらは、データベース41、コンパイラ42および生成機構(build mechanism)43である。データベース41は、ここで、プロジェクト構成要素411、および生成可能な構成要素412の集合として示される構成要素のセットからなり、これらは、生成されるべきプログラムをモデル化する構成要素のセットである。コンパイラ42は、データベース41中の構成要素に関連する従属性を計算する。生成機構43は、プログラムを生成するために、コンパイラが生成した従属性と一緒に構成要素の特性を使用する。
プログラマは、エディタ44によってプログラムを変更する。エディタは、構成要素を形成および削除し、通常は構成要素をカット、コピー、ペーストおよび移動することができなければならない。メニューからの選択のような他のより構造化された方法が可能であるけれども、エディタは、テキストの直接修正を可能にすることによってインターフェース(Interface)特性およびインプリメンテーション(Implementation)特性のデータを変更することができなければならない。実際には、エディタ44はしばしば、インターフェース特性またはインプリメンテーション特性の各タイプと同じ数のエディタか、あるいはこれらの特性のデータのサブフィールドに対するのと同じ数のエディタからなる可能性もある。
編集変更を登録するための方法
インクリメンタル生成44に関連するエディタによって実行される、機能の論理を表現しているフローチャートを示す第5A図〜第5D図を参照する。生成可能な非合成構成要素(non-synthetic component)に関しては、BuildStates(生成状態)は、生成処理以外では、値Compiled(コンパイル済み)およびNeedToCompile(コンパイルを要する)に制限される。もしInterface(インターフェース)特性が存在しないならば、InterfaceBuildState(インターフェース生成状態)はCompiled(コンパイル済み)である。Implementation(インプリメンテーション)特性が存在しないならば、ImplementationBuildState(インプリメンテーション生成状態)はCompiled(コンパイル済み)である。第5A図では、種々の編集状態変更が示される。ラベル500で、システムが、CreateComponent(構成要素の形成)、RenameComponent(構成要素のリネーム)、PasteComponent(構成要素のペースト)またはEditInterface(インターフェースの編集)のコマンドを識別するとき、制御は、インターフェース変更を処理するために、機能ブロック510に渡される。変更のための詳細な論理は第5B図に詳述されている。
第5B図では、インターフェース生成状態がNeedToCompile(コンパイルを要する)であるかどうかを決定するためにテストが実行される判断ブロック511で処理が開始する。そうであるならば、ラベル514を介して制御が渡され、編集を継続する。これらの動作は編集中に生じ、再生成中には生じない。次の動作は多分他の編集動作である。そうでないならば、機能ブロック512で、インターフェース生成状態がNeedToCompile(コンパイルを要する)とセットされ、したがって、インターフェース変更リストが更新される。それから、機能ブロック513で、インプリメンテーション変更処理およびコンテナ変更処理が終了される。インプリメンテーション変更動作は第5C図に示され、コンテナ変更動作は第5D図に詳述される。
第5C図は、変更されたインプリメンテーションと関連した詳細な処理を詳述している。判断ブロック571で、インプリメンテーション生成状態が既にNeedToCompile(コンパイルを要する)とセットされているかどうかを決定するためにテストが実行される。もしそうであるならば、ラベル572を介して制御が渡され、編集を継続する。もしそうでないならば、機能ブロック573で、インプリメンテーション生成状態がNeedToCompile(コンパイルを要する)とセットされて、インプリメンテーション変更リストが更新される。それから、制御はラベル574を介して元に渡される。
第5D図は、コンテナ変更動作と関連した詳細な論理を詳述する。変数が生成可能であるかどうかを決定するために、テストが判断ブロック542で実行される。そうならば、機能ブロック543で、変更されたインターフェースが、第5B図の議論で上記に詳述したような構成要素のコンテナによって、呼出される。それから、制御はラベル544を介して戻される。
Edit Implementation(編集インプリメンテーション)コマンドが第5A図のラベル560で検出されるならば、処理は機能ブロック570で詳述され、第5C図の議論で上記に詳述されたような変更された動作インプリメンテーションを実行する。
Delete Component(削除構成要素)コマンドが第5A図の530で検出されるならば、構成要素Aのためのコンテナ変更処理は機能ブロック540で示され、かつ第5D図の議論で詳述されたように開始される。それから、コンテナAは削除され、制御はラベル550を介して戻される。
Move Component(移動構成要素)コマンドが第5A図の580で検出されるならば、構成要素Aのためのコンテナ変更処理は機能ブロック590で示され、かつ第5D図で詳述されたように開始される。それから、構成要素のコンテナは新しいコンテナに等しくセットされ、構成要素Aのためのインターフェース変更処理は、第5B図で詳述されるように開始される。最後に、処理はラベル595を介して戻される。
生成構成要素を決定するための方法
プログラム生成中、プロジェクト構成要素(Project Component)はCompileList(コンパイル・リスト)と呼ばれるリファレンスの非公開リスト(private list)を保持する。InterfaceCompileList(インターフェース・コンパイル・リスト)およびImplementationCompileList(インプリメンテーション・コンパイル・リスト)がある。プロジェクトはまた、InternalErrorList(内部エラー・リスト)と呼ばれるリファレンスの専用リストを保持する。実際には、これらのリストのそれぞれは効率の理由で1つ以上のリストで物理的に表されてもよい。
この処理は第6図に示される。機能ブロック601で示されるようなプロジェクトのChangeList(変更リスト)の各リファレンスに関しては、リファレンスはリストの最前部から選択される。リスト上にリファレンスがもうこれ以上はないならば、処理はブロック602で示されるように終了される。リファレンスがブロック603で決定されるようなInterface(インターフェース)であるならば、リファレンスのコピーはInterfaceCompileList(インターフェース・コンパイル・リスト)の中に置かれ、機能AddClient(クライアントの付加)は、処理がブロック601で継続される前に機能ブロック604のリファレンスに呼出される。その特性名がInterface(インターフェース)でないならば、その特性名はブロック605で示されているようにImplementation(インプリメンテーション)であり、そのIsInline属性が「真」かどうかを決定するために判断ブロック606でテストが行われる。もしそうであるならば、リファレンスのコピーはInterfaceCompileList(インターフェース・コンパイル・リスト)に置かれ、機能AddClientクライアントの付加)は、処理がブロック601で継続される前に機能ブロック607のリファレンス上に呼出される。さもなければ、その特性名はImplementation(インプリメンテーション)でなければならないし、かつそのIsInline属性は「偽」でなければならないし、リファレンスの複写は、処理がブロック601で継続される前に機能ブロック608のImplementationCompileList(インプリメンテーション・コンパイル・リスト)上に置かれる。
機能CreateCompileList(コンパイル・リストの形成)のための擬似コードは次のようになる。
Figure 0004195479
パラメータ・リファレンスのクライアント特性における各リファレンスに対して、機能AddClient(クライアントの付加)が、リファレンスを正確に調べ、そのBuildState(生成状態)がCompiled(コンパイル済み)であるならば、リファレンスのBuildState(生成状態)をUncertain(不確定)とセットし、リファレンスの複写を適当なCompileList(コンパイル・リスト)に付加し、リファレンス上にAddClient(クライアントの付加)を呼出す。この処理は、ChangeList(変更リスト)のClient Closure(クライアント終了)の形成と呼ばれる。このClient Closure(クライアント終了)は生成の結果として再コンパイルされる必要があるかもしれない構成要素のサブセットを表す。実際には、生成の進行にしたがって、コンパイラによって発生された従属性および変更が使用されて、Client Closure(クライアント終了)において可能性があるとされた多くの構成要素をコンパイルしなければならないことが回避される。
下記は、AddClient(クライアントの付加)機能のための擬似コードである。
Figure 0004195479
インターフェースを処理するための方法
これはBuild(生成)処理の第2段階である。InterfaceCompileList(インターフェース・コンパイル・リスト)に関する項目に対する可能なBuildStates(生成状態)は、Compiled(コンパイル済み)、BeingCompiled(コンパイル中)、NeedToCompile(コンパイルを要する)、Uncertain(不確定)、CompileError(コンパイル・エラー)またはUncertainError(不確定エラー)である。InterfaceCompileList(インターフェース・コンパイル・リスト)は、それが第7図のフローチャートに示されるように、空になるまで処理される。この処理はブロック701から入り、ここでリファレンスがInterfaceCompileList(インターフェース・コンパイル・リスト)の最前列から選択される。リストにリファレンスがこれ以上存在しないならば、処理はブロック702で終了する。リファレンスに関連した構成要素(Component)のInterface(インターフェース)のBuildState(生成状態)が、ブロック703で示されるように、Compiled(コンパイル済み)、CompileError(コンパイル・エラー)またはUncertainError(不確定エラー)であるならば、リファレンスはリストの最前列から取除かれ、処理はブロック701に継続する。リファレンスに関連された構成要素のInterface(インターフェース)のBuildState(生成状態)が、ブロック704で示されるように、BeingCompiled(コンパイル中)またはNeedToCompile(コンパイルを要する)であるならば、構成要素のBuildState(生成状態)は機能ブロック705でBeingCompiled(コンパイル中)とセットされる。したがって、コンパイル機能(コンパイラ42を呼出す)は構成要素のInterface(インターフェース)に対して呼出される。この機能は、Abort(打切り)、Done(実行)およびError(エラー)の一つの値を返す。ブロック706において返された値がAbort(打切り)であるならば、処理はブロック701で継続される。ブロック707において返された値がDone(実行)であるならば、構成要素のInterface BuildState(インターフェース生成状態)はCompiled(コンパイル済み)とセットされ、かつリファレンスは、処理がブロック701で継続される前に、ブロック708でリストの最前列から取除かれる。ブロック709において返された値がError(エラー)であるならば、構成要素のInterface BuildState(インターフェース生成状態)はCompileError(コンパイル・エラー)とセットされ、このリファレンスはリストの前部から取除かれる。機能PropagateError(エラー伝播)は、処理がブロック701で継続される前に機能ブロック710で構成要素に呼出される。リファレンスに関連する構成要素のInterface BuildState(インターフェース生成状態)が、ブロック711で決定されるように、Uncertain(不確定)であるならば、構成要素のBuildState(生成状態)は機能ブロック712でBeingCompiled(コンパイル中)にセットされる。したがって、ConditionallyCompile(条件付きコンパイル)機能(コンパイラ42を呼出すか、呼出さないか)は構成要素のInterface(インターフェース)に対して呼出される。この機能はまた、Abort(打切り)、Done(実行)およびError(エラー)の一つの値を返す。返された値がAbort(打切り)であるならば、処理はステップ1で継続される。返された値がブロック713でDone(実行)であるならば、リファレンスは機能ブロック708でリストの最前列から取除かれ、処理は701に継続される。返された値がブロック714でError(エラー)であるならば、リファレンスがリストから取除かれ、機能PropagateError(エラー伝播)は、処理がブロック701に継続される前に、機能ブロック715で構成要素に呼出される。
ProcessInterface(インターフェースの処理)機能ための擬似コードは、次のようになる。
Figure 0004195479
Figure 0004195479
機能PropagateError(エラー伝播)は、プロジェクトのInternalErrorList(内部エラー・リスト)に構成要素に対応するリファレンスを加え、構成要素のClient(クライアント)リストの全てのリファレンスに対して下記のことを実行する。すなわち、リファレンスのBuildState(生成状態)がCompileError(コンパイル・エラー)またはUncertainError(不確定エラー)であるならば、処理は次のリファレンスに対して続ける。リファレンスのBuildState(生成状態)がNeedToCompile(コンパイルを要する)であるならば、処理はそのBuildState(生成状態)をCompileError(コンパイル・エラー)とセットし、リファレンスにInternalErrorList(内部エラー・リスト)を加え、次のリファレンスに対して続ける前にリファレンスに対してPropagateError(エラー伝播)を呼出す。リファレンスのBuildState(生成状態)がUncertain(不確定)であるならば、処理はそのBuildState(生成状態)をUncertainErrors(不確定エラー)とセットし、リファレンスにInternalErrorList(内部エラー・リスト)を加え、次のリファレンスに対して続ける前にリファレンスに対してPropagateError(エラー伝搬)を呼出す。
機能PropagateError(エラー伝播)の擬似コードは次のとおりである。
Figure 0004195479
インプリメンテーションを処理するための方法
これはBuild(生成)処理の第3段階である。ImplementationCompileList(インプリメンテーション・コンパイル・リスト)の各リファレンスは、第8図のフローチャートに示されるように処理される。この処理はブロック801から入り、リファレンスがImplementationCompileList(インプリメンテーション・コンパイル・リスト)の最前列から選択される。リストにリファレンスがこれ以上ないならば、処理はブロック802で終了する。リファレンスのBuildState(生成状態)が、ブロック803で決定されたようにUncertain(不確定)であるならば、BuildState(生成状態)は、処理がブロック801に継続される前に、機能ブロック804でCompiled(コンパイル済み)とセットされる。リファレンスのBuildState(生成状態)が、ブロック805で決定されたようにNeedToCompile(コンパイルを要する)ならば、構成要素は機能ブロック806でコンパイルされる。コンパイラ42から返される値は、Done(実行)およびErrors(エラー)である。返された値がブロック807でDone(実行)であるならば、リファレンスのBuildState(生成状態)は、処理がブロック801に継続される前に、機能ブロック804でCompiled(コンパイル済み)とセットされる。返された値がブロック808でError(エラー)であるならば、リファレンスのBuildState(生成状態)はCompileError(コンパイル・エラー)とセットされ、機能PropagateError(エラー伝播)は、処理がブロック801に継続される前に、機能ブロック809で構成要素に呼出される。リファレンスのBuildState(生成状態)がCompileError(コンパイル・エラー)またはUncertainError(不確定エラー)であるならば、何も実行されない。Implementation(インプリメンテーション)の処理はこの段階では順序に対して独立であることに留意されたい。これは、従属性がInterface(インターフェース)またはIsInline属性は真であるImplementation(インプリメンテーション)に対してのみあり得、これらは処理が完了しているからである。
ProcessImplementation(インプリメンテーションの処理)のための擬似コードは次のとおりである。
Figure 0004195479
生成処理をサポートするコンパイラ
コンパイラ42は、Compile(コンパイル)機能を介して呼出され、これらの2つは同義語として使用されてもよい。コンパイラ42は、ソース・テキストを処理し、可能な外部構成要素の名前を識別する。コンパイラ42は、次に、全ての構成要素に対するリファレンスのリストを得る。コンパイラは、構成要素の種類のような言語特有の知識を使用して、リストからリファレンスを除去する。それから、コンパイラは、テキストで識別された各外部構成要素のために、GetDeclaration(宣言の取得)と呼ばれる機能を呼出す。Compile(コンパイル)機能は、コンパイラ42を呼出す前に、構成要素に関する存在する全てのエラーをクリアする。これは、エラー特性から全てのエラー・メッセージをクリアし、プロジェクトのErrorList特性から全てのリファレンスも取除く。
コンパイラは最初に、第9図のフローチャートによって示されるGetDeclaration(宣言の取得)機能を呼出す。GetDeclaration(宣言の取得)機能は、Abort打切り)、Done(実行)、Circulardependency(循環従属性)またはError(エラー)の一つの値を返し、さらに、Declaration(宣言)のデータを返すことができる。この処理はブロック901から入り、各リファレンスがそのBuildState(生成状態)に対して調べられる。ブロック902で示されるように、処理に対するリファレンスがもうこれ以上はないならば、処理は終了し、リターンが行われる。構成要素のBuildState(生成状態)がCompiled(コンパイル済み)であるならば、この機能は機能ブロック904でDone(実行)を返し、処理がブロック901に継続される前に、記憶されたDeclaration(宣言)データもまた、返される。構成要素のBuildState(生成状態)がブロック905で示されるように、NeedToCompile(コンパイルを要する)またはUncertain(不確定)であるならば、構成要素に対応するリファレンスは、機能、ブロック906でInterfaceCompileList(インターフェース・コンパイル・リスト)の最前列に加えられ、この機能は、処理がブロック901に継続される前に、機能ブロック907でAbort(打切り)を返す。Declaration(宣言)データはこの場合、返されない。構成要素のBuildState(生成状態)がブロック908で示されるようにBeingCompiled(コンパイル中)であるならば、この機能は、処理がブロック901に継続される前に、機能ブロック909でCirculardependency(循環従属性)を返す。Declaration(宣言)データは、この場合には返されない。構成要素のBuildState(生成状態)が、ブロック910で示されるように、CompileError(コンパイル・エラー)またはUncertain(不確定エラー)であるならば、この機能は、処理がブロック901に継続される前に、機能ブロック911でError(エラー)を返す。また、Declaration宣言)データは返されない。
GetDeclaration(宣言の取得)機能のための擬似コードは、次のようになる。
Figure 0004195479
GetDeclaration(宣言の取得)を呼出した後、コンパイラは次のように続ける。返された値がAbort(打切り)であったならば、コンパイラは処理を終了して、Abort(打切り)値を返さなければならない。別の実装方法としては、コンパイルをコンパイラは中断し返された構成要素をコンパイルした後、再開または放棄することである。これは、コンパイラがリエントラントである必要があるが、前述のような手順に対するいかなる本質的な変更も別に必要としない。返された値がCompiled(コンパイル済み)であったならば、コンパイラは処理を継続することができる。Declaration(宣言)が使用されているならば、これはSourceReference(ソース・リファレンス)従属性を構成し、コンパイラは従属性およびその性質の両方について常に追跡しているべきである。返された値がCirculardependency(循環従属性)またはError(エラー)であったならば、コンパイラは処理を終了し、構成要素に関するSetError(エラーのセット)機能を呼出し、値Error(エラー)に返さなければならない。コンパイラは、終了前にできるだけ多くのエラーを見つけだすために、処理を任意に継続してもよい。
GetDeclaration(宣言の取得)に対する呼出しがCompiled(コンパイル済み)を返すならば、コンパイラは、従来と同様ソース・テキストを処理し続ける。この処理でエラーにも出会うと、コンパイラは構成要素に対するSetError(エラーのセット)を呼出し、値Error(エラー)を返す。エラーに出会わないなら、コンパイラは値Done(実行)を返す。コンパイラがインターフェースを処理したならば、それはDeclaration(宣言)特性の新しい値を記憶する。
エラーを処理する方法
コンパイラが、Interface(インターフェース)またはImplementation(インプリメンテーション)をコンパイルするために呼出される前に、全ての存在するErrors(エラー)はクリアされる。これは、全てのエラー・メッセージを更新していることを保証する。Interface(インターフェース)とImplementation(インプリメンテーション)間の組込み従属性およびエラーが伝播されるという事実のために、同一の生成においてInterface(インターフェース)およびImplementation(インプリメンテーション)の両者のコンパイラ・エラーを得ることは決してできない。
コンパイラがエラーに出会うとき、コンパイラは、エラーの位置およびエラーを記述するメッセージを含むエラーについての情報を、誤りのある構成要素に返して伝える機能であるSetError(エラーのセット)を呼出す。この情報は、構成要素のErrors(エラー)特性および適切なソース特性(Interface(インターフェース)またはImplementation(インプリメンテーション))に記憶される。また、リファレンスは、Project(プロジェクト)によって保有されたグローバル・エラー・リストに記憶され、全てのエラーに対する手近なアクセスを可能にしている。
エラーが全ての従属する構成要素に伝播するため、構成要素は後でコンパイルされることはない。これは、これらのコンパイルが失敗することが分っているからである。さらに、生成はエラーに出会った後も継続され、それ自身明白にエラーがない構成要素またはエラーを有する構成要素に従属していない構成要素を、できるだけ多く正確に生成する。
SetError(エラーのセット)機能は、コンパイラ42によって渡されたエラー・メッセージを処理し、特性(Interface(インターフェース)またはImplementation(インプリメンテーション))に対応する構成要素のエラー特性中のエントリを形成する。それはまた、エラーに対応するプロジェクトのErrorList特性のエントリを形成する。この方法で形成された2つのエントリは、同一のキーを共有し、それらは「リンク」されている。この機能はまた、その後のユーザ編集の間、同一文字の範囲に添付されたままである“粘着性のあるマーカ”を使用して、プログラム・ソースのエラーの位置を記録する。
コンパイラが、首尾よくソース・テキストの処理を完了すると、オブジェクト・コードを生成し、増分的に(incrementally)リンクするようにリンカ機能にオブジェクト・コードを渡す。その代わりに、オブジェクト・コードを生成処理の終了まで記憶し、伝統的な方法でリンクすることもできる。
コンパイラは、いま構成要素のSourceReference(ソース・リファレンス)特性および各SourceReference(ソース・リファレンス)のClients(クライアント)特性を更新する。例えば構成要素AのSourceReference(ソース・リファレンス)特性における、例えば構成要素Bに対する各リファレンスに関しては、構成要素BのClients(クライアント)特性における構成要素Aに対応するリファレンス(同一の従属性情報を有している)である必要がある。
コンパイラは、Declaration(宣言)が、その前の値から変更した方法を記述している変化(change)を形成する。コンパイラは、構成要素に対して機能PropagateChange(変化の伝播)を呼出し、それに計算された変化を渡す。それから、コンパイラはDeclaration(宣言)の新しい値をセットする。機能PropagateChange(変化の伝播)は、構成要素のClient List(クライアント・リスト)の各リファレンスの従属性に対して変化を合致させる。この合致が、参照された構成要素は変化によって影響されて、そのBuildState(生成状態)がCompileList(コンパイル・エラー)またはUncertainError(不確定エラー)でないことを示す場合は、そのBuildState(生成状態)はNeedToCompile(コンパイルを要する)とセットされる。
コンパイラは、種々の様式の警告メッセージまたは提案を発するために、SetError(エラーのセット)機能を使用することができる。この場合、警告メッセージのみが戻されるならば、Compile(コンパイル)機能はDone(実行)を返す。この警告メッセージはErrors(エラー)特性に加えられ、リファレンスはプロジェクトのErrorList特性に加えられる。しかしながら、これ以外の場合、コンパイルは、成功とみなされる。BuildState(生成状態)はCompiled(コンパイル済み)とセットされ、エラーは伝播されない。警告または提案のみが出されるならば、プログラムは、完全にそして正確に生成される。
構成要素を条件付きコンパイルするための処理
機能ConditionallyCompile(条件付きコンパイル)は、第10A図および第10B図に示されており、これを参照する。構成要素AのSourceReference(ソース・リファレンス)における各構成要素Bが1001で処理される。全ての構成要素Bは、ブロック1002によって示されるように、処理されると、処理は構成要素Bについては完了し、処理は、構成要素Aをコンパイルするために第10B図に進む。構成要素BのBuildState(生成状態)が、ブロック1003に示されるように、BeingCompiled(コンパイル中)またはNeedToCompile(コンパイルを要する)ならば、構成要素のBuildState(生成状態)はBeingCompiled(コンパイル中)とセットされ、構成要素は機能ブロック1004でコンパイルされる。Compile(コンパイル)機能は、Done(実行)、Abort(打切り)またはError(エラー)の一つの値を返すことができる。値Done(実行)がブロック1005で返されると、処理はブロック1001に継続する。
返された値が、ブロック1006でAbort(打切り)であるならば、この機能は終了され、Abort(打切り)は機能ブロック1007で返される。返された値がブロック1008でError(エラー)であるならば、原構成要素のBuildState(生成状態)はUncertainError(不確定エラー)とセットされ、この機能は終了され、Error(エラー)が機能ブロック1009で返される。構成要素BのBuildState(生成状態)がブロック1010に示されるようにUncertain(不確定)であるならば、BuildState(生成状態)はBeingCompile(コンパイル中)とセットされ、この構成要素は機能ブロック1011で条件付きでコンパイルされる。また、ConditionallyCompile(条件付きコンパイル)は、Done(実行)、Abort(打切り)またはError(エラー)の一つの値を返すことができる。値Done(実行)がブロック1005で返されるならば、処理はブロック1001に継続する。Error(エラー)がブロック1012で返されるならば、構成要素のBuildState(生成状態)がUncertainError(不確定エラー)とセットされ、構成要素AはInterfaceCompileList(インターフェース・コンパイル・リスト)から取除かれ、PropagateError(エラーの伝播)機能が、この機能が終了される前に機能ブロック1014で呼出される。Abort(打切り)がブロック1015で返されるならば、Abort(打切り)は、この機能が終了される前に、機能ブロック1007で返される。
いま、第10B図を参照すると、全てのリファレンスが処理されたならば、全てCompiled(コンパイル済み)BuildState(生成状態)を有する。しかしながら、SourceReference(ソース・リファレンス)の一つが、この処理中の構成要素に対する変化をこの点に伝搬する可能性があるので、それで、そのBuildState(生成状態)は、BeingCompiled(コンパイル中)またはNeedToCompile(コンパイルを要する)のいずれでもよい。したがって、構成要素AのBuildState(生成状態)がブロック1016で決定される。BuildState(生成状態)がブロック1017で示されるように、NeedToCompile(コンパイルを要する)ならば、BuildState(生成状態)はBeingCompiled(コンパイル中)とセットされ、構成要素Aは機能ブロック1018でコンパイルされる。コンパイラは、Error(エラー)またはDone(実行)のいずれかを返すことができる。全てのSourceReference(ソース・リファレンス)はこの段階ではCompiled(コンパイル済み)であるため、Abort(打切り)は決して生じないことに注意されたい。Error(エラー)がブロック1019で返されるならば、BuildState(生成状態)はCompileError(コンパイルエラー)とセットされ、Error(エラー)が機能ブロック1020で返される。Done(実行)がブロック1021で返されるならば、BuildState(生成状態)はCompiled(コンパイル済み)とセットされ、かつDone(実行)が機能ブロック1023で返される。構成要素AのBuildState(生成状態)が、ブロック1024に示されるように、BeingCompiled(コンパイル中)であるならば、BuildState(生成状態)はCompiled(コンパイル済み)とセットされ、かつDone(実行)が機能ブロック1023で返される。
機能ConditionallyCompile(条件付きコンパイル)のための擬似コードは次のとおりである。
Figure 0004195479
Figure 0004195479
エラーを後処理するための方法
エラーを後処理するための方法はBuild(生成)処理の第4段階である。どのようなエラーでも生成中に発生したならば、PostProcessEroors(エラーの後処理)は生成の終わりで呼出される。InternalErrorList(内部エラー・リスト)の各リファレンスに関しては、リファレンスのBuildState(生成状態)がCompileError(コンパイル・エラー)ならば、このBuildState(生成状態)はNeedToCompileコンパイルを要する)に変更される。リファレンスのBuildState(生成状態)がUncertainError(不確定エラー)ならば、BuildState(生成状態)はCompiled(コンパイル済み)に変更される。
InternalErrorList(内部エラー・リスト)に関する全てのリファレンスが処理されたとき、このリストの全てのエントリはクリアされる。プログラマのための便宜として、プロジェクトのErrorListがあるエントリを含む場合、ウィンドウまたはBrower(ブラウザ)がプロジェクトのErrorList(プロジェクトのエラー・リスト)に対して開かれる。
PostProcessEroors(エラーの後処理)機能のための擬似コードは次のとおりである。
Figure 0004195479
本発明は、特定のプログラミング環境で好ましい実施例に関して記載されているが、当業者は、本発明が添付の請求の範囲の精神および範囲内において変更して実施され得ることを理解できるであろう。
第1図は、本発明が実施される、高分解能グラフィック・ディスプレイ装置およびマウスのようなカーソル指示装置をサポートすることができる汎用コンピュータ・システムを示す図である。 第2図は、コンピュータ・システムの主要な要素をより詳細に示す、第1図に示された汎用コンピュータ・システムのブロック図である。 第3図は、プログラムを構成する構成要素のコレクションを概念形式で示すブロック図である。 第4図は、本発明の主要な機能性を示すブロック図である。 第5A図は、一緒にまとめて、BuildStateによる編集変化を登録するための論理のフローチャートである。 第5B図は、一緒にまとめて、BuildStateによる編集変化を登録するための論理のフローチャートである。 第5C図は、一緒にまとめて、BuildStateによる編集変化を登録するための論理のフローチャートである。 第5D図は、一緒にまとめて、BuildStateによる編集変化を登録するための論理のフローチャートである。 第6図は、本発明による生成機構(build mechanism)の動作の第1ステージの可能な要素を決定するための論理を示すフローチャートである。 第7図は、本発明による生成機構の動作の第2ステージのインターフェース処理の論理を示すフローチャートである。 第8図は、本発明による生成機構の動作の第3ステージのインプリメンテーション処理の論理を示すフローチャートである。 第9図は、本発明によるコンパイラによって呼出されたGetDeclarations機能の論理を示すフローチャートである。 第10A図は、一緒にまとめて、条件付きコンパイル機能の論理を示すフローチャートである。 第10B図は、一緒にまとめて、条件付きコンパイル機能の論理を示すフローチャートである。

Claims (20)

  1. 各構成要素がそれらに関連付けられたインターフェース情報とインプリメンテーション情報とを有し、複数の構成要素の集合として記述されたコンピュータ・プログラムを含むデータベース、ユーザインターフェースを使用して各前記構成要素を変更することを可能とする編集手段、前記各構成要素をコンパイルすることが可能なコンパイラ、及び前記コンピュータ・プログラムからコンピュータに実装されるプログラムを生成する生成手段を備えたコンピュータ・システムにおける、前記編集手段によって前記コンピュータ・プログラム内の複数の構成要素が変更された後で、構成要素が変更されたことを示す記録を有する構成要素を前記データベースが含む場合に実施可能な方法であって、前記生成手段によって実行される方法は、
    前記コンパイラを使用して構成要素の従属性を計算し、クライアント・リストおよび参照(リファレンス)リストを生成するステップと、
    (a)インターフェース・コンパイル・リストとインプリメンテーション・コンパイル・リストとを生成するステップと
    (b)前記編集手段によって一つの構成要素の前記インターフェース情報が変更されていた場合に、
    (b1)前記一つの構成要素へのリファレンスを、前記インターフェース・コンパイル・リスト上に配置するステップと
    (b2)前記一つの構成要素の前記インターフェース情報に従属しているインターフェース情報を他の複数の構成要素が有しているかを、前記生成されたクライアント・リストの従属性を使用して決定、他の構成要素へのリファレンスを前記インターフェース・コンパイル・リストに追加するステップと、
    (b3)ステップ(b2)で決定された各構成要素に対して、ステップ(b2)を再帰的に、決定される他の構成要素がなくなるまで繰り返すステップと、
    (c)前記編集手段によって一つの構成要素の前記インプリメンテーション情報が変更されていた場合に、
    (c1)前記一つの構成要素のインプリメンテーション情報に他の構成要素が従属していない場合、前記一つの構成要素のリファレンスを前記インプリメンテーション・コンパイルリストに配置し、前記一つの構成要素のインプリメンテーション情報に他の構成要素が従属している場合、インプリメンテーション情報が変更された構成要素へのリファレンスを、前記インターフェース・コンパイル・リストに配置するステップと、
    (c2)前記一つの構成要素のインプリメンテーション情報に他の構成要素が従属している場合、前記一つの構成要素のインプリメンテーション情報に従属しているインターフェース情報を有する他の構成要素を、前記生成されたクライアント・リストの従属性を使用して決定、前記他の構成要素へのリファレンスを、前記インターフェース・コンパイル・リスト上に追加するステップと、
    (c3)ステップ(c2)で決定された各構成要素に対して、ステップ(c2)を再帰的に、決定される他の構成要素がなくなるまで繰り返すステップと、
    (d)前記インターフェース・コンパイル・リストを参照して、前記コンパイラに、前記データベースに含まれ、前記インターフェース・コンパイル・リスト内のリファレンスを有する全ての構成要素の前記インターフェース情報をコンパイルさせるステップと、
    (e)前記インプリメンテーション・コンパイル・リストを参照して、前記コンパイラに、前記データベースに含まれ、前記インプリメンテーション・コンパイル・リスト内のリファレンスを有する全ての構成要素の前記インプリメンテーション情報をコンパイルさせるステップと
    を備えることを特徴とする方法。
  2. 請求項1に記載の方法であって、
    前記ステップ(b)は、さらに
    (b4)前記一つの構成要素の前記インターフェース情報に従属しているインプリメンテーション情報を有している他の構成要素を、前記生成されたクライアント・リストの従属性を使用して決定、インプリメンテーション情報を有していると決定された他の構成要素それぞれへのリファレンスをインプリメンテーション・コンパイル・リストに追加するステップと、
    (b5)ステップ(b4)で決定された各構成要素に対して、ステップ(b4)を再帰的に、決定される他の構成要素がなくなるまで繰り返すステップと
    を備えることを特徴とする方法。
  3. 請求項1に記載の方法であって、
    前記ステップ(c)は、さらに
    (c4)他の構成要素が前記一つの構成要素のインプリメンテーション情報に従属している場合に、インプリメンテーション情報が変更された前記一つの構成要素の前記インプリメンテーション情報に従属しているインプリメンテーション情報を有している他の構成要素を、前記生成されたクライアント・リストの従属性を使用して決定、インプリメンテーション情報を有している他の構成要素それぞれへのリファレンスをインプリメンテーション・コンパイル・リストに追加するステップと、
    (c5)ステップ(c4)で決定された各構成要素に対して、ステップ(c4)を再帰的に、決定される他の構成要素がなくなるまで繰り返すステップと
    を備えることを特徴とする方法。
  4. 請求項1に記載の方法であって、前記ステップ(b2)は、前記一つの構成要素のクライアント・リストを調べ、前記他の構成要素を決定することを備えることを特徴とする方法。
  5. 請求項1に記載の方法であって、前記ステップ(d)は、
    (d1)前記インターフェース・コンパイル・リスト上にリファレンスを有する各構成要素に対して、当該各構成要素が従属する他の複数の構成要素を、前記生成されたクライアント・リストの従属性を使用して決定るステップと、
    (d2)ステップ(d1)で決定された他の複数の構成要素に対して、当該他の複数の構成要素それぞれがコンパイルされたかを決定し、コンパイルされていない場合に、前記コンパイラに、当該他の複数の構成要素それぞれをコンパイルさせるステップと、
    (d3)ステップ(d1)で決定された全ての他の複数の構成要素がコンパイルされた場合に、前記コンパイラに、インターフェース・コンパイル・リスト上にリファレンスを有する各構成要素をコンパイルさせるステップと
    を備えることを特徴とする方法。
  6. 請求項5に記載の方法であって、前記ステップ(d2)で、前記コンパイラに他の複数の構成要素それぞれをコンパイルさせる前記ステップは、
    (d2−1)ステップ(d1)で決定された他の複数の構成要素が従属する他の構成要素を決定するステップと、
    (d2−2)ステップ(d2−1)で決定された他の構成要素それぞれについて、当該他の複数の構成要素が、今回コンパイルされたかを決定し、コンパイルされていない場合に、前記コンパイラに、ステップ(2−1)で決定された他の構成要素それぞれをコンパイルさせるステップと、
    (d2−3)ステップ(d2−1)で決定された全ての他の複数の構成要素がコンパイルされた場合に、前記コンパイラに、ステップ(d1)で決定された他の複数の構成要素をコンパイルさせるステップと
    を備えることを特徴とする方法。
  7. 請求項5に記載の方法であって、各構成要素は、当該構成要素のコンパイル状態を表すBuildState(生成状態)値を有し、前記ステップ(d2)は、ステップ(d1)で決定された他の複数の構成要素の前記BuildState(生成状態)を調べ、当該他の複数の構成要素が今回コンパイルされたか否かを決定することを備えることを特徴とする方法。
  8. 請求項7に記載の方法であって、前記ステップ(d2)は、前記コンパイル処理が成功した場合に、その他の構成要素を処理する前に、コンパイルが成功した構成要素がコンパイル済みであることを表す、構成要素についての前記BuildState(生成状態)値を、前記コンパイラが設定することを備えることを特徴とする方法。
  9. 請求項7に記載の方法であって、前記ステップ(d2)は、前記コンパイラが、
    前記コンパイル処理が成功しなかった場合に、
    エラーが発生したことを表す、構成要素についての前記BuildState(生成状態)値を設定し、
    前記インターフェース・コンパイル・リストからエラーが発生した構成要素が従属している構成要素への前記リファレンスを取り除く
    ことを備えることを特徴とする方法。
  10. 請求項1に記載の方法であって、
    各構成要素は、当該構成要素のコンパイル状態を表すBuildState(生成状態)値を有し、前記ステップ(e)は、
    (e1)前記インプリメンテーション・コンパイル・リスト内にリファレンスを有する各構成要素であって、当該構成要素の前記BuildState(生成状態)値が、コンパイル状態がUncertain(不確定)であることを表している当該構成要素に対して、前記コンパイラが、前記BuildState(生成状態)値を、コンパイル済みを表す値に、設定すること、
    (e2)前記インプリメンテーション・コンパイル・リスト内にリファレンスを有する各構成要素であって、当該構成要素の前記BuildState(生成状態)値が、コンパイル状態がNeedToCompile(コンパイルを要する)であることを表している当該構成要素に対して、前記生成手段が前記コンパイラにコンパイルさせること、および
    (e3)前記インプリメンテーション・コンパイル・リスト内にリファレンスを有する各構成要素であって、当該各構成要素のBuildState(生成状態)値が、エラーが発生したことを表している当該各構成要素を、前記生成手段がスキップすること
    を備えることを特徴とする方法。
  11. 各構成要素がそれらに関連付けられたインターフェース情報とインプリメンテーション情報とを有し、複数の構成要素の集合として記述されたコンピュータ・プログラムを含むデータベース、各前記構成要素を編集することを可能とする編集手段、前記各構成要素をコンパイルすることが可能なコンパイラ、及び、前記コンピュータ・プログラムからコンピュータに実装されるプログラムを生成する生成手段を備えたコンピュータ・システムであって、前記編集手段によって前記コンピュータ・プログラム内の複数の構成要素が変更された後で、構成要素が変更されたことを示す記録を有する構成要素を前記データベースが含む場合に、前記生成手段は、
    前記コンパイラを使用して構成要素の従属性を計算し、クライアント・リストおよび参照(リファレンス)リストを生成する動作と、
    インターフェース・コンパイル・リストとインプリメンテーション・コンパイル・リストとを生成する動作と、
    前記編集手段によって一つの構成要素のインターフェース情報が変更されていた場合に、
    (a1)前記一つの構成要素へのリファレンスを、前記インターフェース・コンパイル・リスト上に配置する動作と、
    (a2)前記生成されたクライアント・リストの従属性を使用して、前記一つの構成要素の前記インターフェース情報に従属しているインターフェース情報を有する他の複数の構成要素を決定し、前記他の構成要素へのリファレンスを、前記インターフェース・コンパイル・リスト上に追加する動作と、
    (a3)手段(a2)で決定された各構成要素に対して動作(a2)を再帰的に、決定される他の構成要素がなくなるまで繰り返す動作と
    を実行する動作と、
    構成要素の前記インプリメンテーション情報が変更されていた場合に、
    (b1)前記一つの構成要素のインプリメンテーション情報に他の構成要素が従属していない場合、インプリメンテーション情報が変更された構成要素へのリファレンスを、前記インプリメンテーション・コンパイル・リストに配置し、前記一つの構成要素のインプリメンテーション情報に他の構成要素が従属している場合、インプリメンテーション情報が変更された構成要素へのリファレンスを、前記インターフェース・コンパイル・リストに配置する動作と、
    (b2)インプリメンテーション情報が変更された構成要素の前記インプリメンテーション情報に従属している他の複数の構成要素がある場合、インプリメンテーション情報が変更された構成要素の前記インプリメンテーション情報に従属しているインターフェース情報を有する他の構成要素を、前記生成されたクライアント・リストの従属性を使用して決定、決定された他の構成要素それぞれへのリファレンスをインターフェース・コンパイル・リストに追加する動作と、
    (b3)動作(2)で決定された各構成要素に対して、動作(b2)を再帰的に、決定される他の構成要素がなくなるまで繰り返す動作と
    を実行する動作と、
    (c)前記インターフェース・コンパイル・リストを参照して、前記コンパイラに、前記データベースに含まれ、前記インターフェース・コンパイル・リスト内にリファレンスを有する全ての構成要素の前記インターフェース情報をコンパイルさせる動作と、
    (d)前記インプリメンテーション・コンパイル・リストを参照して、前記コンパイラに、前記データベースに含まれ、前記インプリメンテーション・コンパイル・リスト内にリファレンスを有する全ての構成要素の前記インプリメンテーション情報をコンパイルさせる動作と
    を実行することを特徴とするコンピュータ・システム。
  12. 請求項11に記載のコンピュータ・システムであって、
    前記生成手段は、さらに
    (a4)他の複数の構成要素が、前記一つの構成要素の前記インターフェース情報に従属しているインプリメンテーション情報を有しているかを、前記生成されたクライアント・リストの従属性を使用して決定、インプリメンテーション情報を有していると決定された他の構成要素それぞれへのリファレンスをインプリメンテーション・コンパイル・リストに追加する動作と、
    (a5)動作(a4)で決定された各構成要素に対して、動作(a4)を再帰的に、決定される他の構成要素がなくなるまで繰り返す動作と
    を実行することを特徴とするコンピュータ・システム。
  13. 請求項11に記載のコンピュータ・システムであって、
    前記生成手段は、さらに、
    (c4)インプリメンテーション情報が変更された構成要素の前記インプリメンテーション情報に従属しているインプリメンテーション情報を有している他の複数の構成要素を、前記生成されたクライアント・リストの従属性を使用して決定、インプリメンテーション情報を有している他の構成要素それぞれへのリファレンスをインプリメンテーション・コンパイル・リストに追加する動作と、
    (c5)手段(c4)で決定された各構成要素に対して、動作(b4)を再帰的に、決定される他の構成要素がなくなるまで繰り返す動作と
    を実行することを特徴とするコンピュータ・システム。
  14. 請求項11に記載のコンピュータ・システムであって、前記一つの構成要素の前記インターフェース情報に従属しているインターフェース情報を有する他の複数の構成要素を決定させる動作(a2)は、前記一つの構成要素内のクライアント・リストを調べ、前記他の構成要素を決定することを特徴とする装置。
  15. 請求項11に記載のコンピュータ・システムであって、前記コンパイラに前記インターフェース情報をコンパイルさせる前記動作(c)は、
    (c1)前記インターフェース・コンパイル・リスト上にリファレンスを有する各構成要素に対して実施可能な、当該構成要素が従属する他の複数の構成要素を、前記生成されたクライアント・リストの従属性を使用して決定する動作と、
    (c2)前記動作(c1)で決定された他の複数の構成要素に対して実施可能な、当該他の複数の構成要素それぞれがコンパイルされたかを決定し、コンパイルされていない場合に、前記コンパイラに、当該他の複数の構成要素それぞれをコンパイルさせる動作と、
    (c3)前記動作(c1)で決定された全ての他の複数の構成要素がコンパイルされた場合に実施可能な、インターフェース・コンパイル・リスト上にリファレンスを有する各構成要素を前記コンパイラにコンパイルさせる動作と
    を備えることを特徴とするコンピュータ・システム。
  16. 請求項15に記載のコンピュータ・システムであって、
    前記コンパイラに当該構成要素が従属する他の複数の構成要素それぞれをコンパイルさせる動作(c2)は、
    (c2−1)前記他の複数の構成要素が従属する他の構成要素を決定する動作と、
    (c2−2)前記動作(c2−1)で決定された他の構成要素それぞれについて、当該他の複数の構成要素が、今回コンパイルされたかを決定し、コンパイルされていない場合に実施可能な、前記コンパイラに、前記決定された他の構成要素それぞれをコンパイルさせる動作と、
    (c2−)前記動作(c2−1)で決定された全ての他の複数の構成要素がコンパイルされた場合に実施可能な、前記コンパイラに前記動作(c1)で決定された他の複数の構成要素をコンパイルさせる動作と
    を備えることを特徴とするコンピュータ・システム。
  17. 請求項15に記載のコンピュータ・システムであって、各構成要素は、当該構成要素のコンパイル状態を表すBuildState(生成状態)値を有し、他の複数の構成要素それぞれが今回コンパイルされたかを決定する前記動作(c2)は、前記動作(c1)で決定された他の複数の構成要素の前記BuildState(生成状態)を調べ、当該他の複数の構成要素が今回コンパイルされたか否かを決定する動作を備えることを特徴とするコンピュータ・システム。
  18. 請求項17に記載のコンピュータ・システムであって、他の複数の構成要素が今回コンパイルされたかを決定する前記動作は、
    前記コンパイル処理が成功した場合に、その他の構成要素を処理する前に、構成要素の前記BuildState(生成状態)値を、コンパイルが成功した構成要素がコンパイル済みであることを表すように設定する前記コンパイラの動作を備えることを特徴とするコンピュータ・システム。
  19. 請求項17に記載のコンピュータ・システムであって、他の複数の構成要素が今回コンパイルされたかを決定する動作は、前記コンパイル処理が成功しなかった場合に、構成要素の前記BuildState(生成状態)値をエラーが発生したことを表すように設定し、前記インターフェース・コンパイル・リストからエラーが発生した構成要素への前記リファレンスを取り除く、前記コンパイラの動作を備えることを特徴とするコンピュータ・システム。
  20. 請求項11に記載のコンピュータ・システムであって、
    各構成要素は、当該構成要素のコンパイル状態を表すBuildState(生成状態)値を有し、前記コンパイラに前記インプリメンテーション情報をコンパイルさせる動作は、
    前記インプリメンテーション・コンパイル・リスト内にリファレンスを有する各構成要素であって、当該構成要素の前記BuildState(生成状態)値が、コンパイル状態がUncertain(不確定)であることを表している当該構成要素に対して実施可能な、前記BuildState(生成状態)値を、コンパイル済みを表す値に設定する前記コンパイラの動作と、
    前記インプリメンテーション・コンパイル・リスト内にリファレンスを有する各構成要素であって、当該構成要素の前記BuildState(生成状態)値が、コンパイル状態がNeedToCompile(コンパイルを要する)であることを表している当該構成要素に対して、前記コンパイラにコンパイルさせる前記生成手段の動作と、
    前記インプリメンテーション・コンパイル・リスト内にリファレンスを有する各構成要素であって、当該各構成要素のBuildState(生成状態)値が、エラーが発生したことを表している当該各構成要素をスキップする前記生成手段の動作と
    を備えることを特徴とするコンピュータ・システム。
JP2006239370A 1993-06-28 2006-09-04 インクリメンタル生成システム Expired - Lifetime JP4195479B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US08/085,487 US5758160A (en) 1993-06-28 1993-06-28 Method and apparatus for building a software program using dependencies derived from software component interfaces

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP8502762A Division JPH10502063A (ja) 1994-06-27 1995-06-16 1,2−ブチレンオキシドの製法

Publications (2)

Publication Number Publication Date
JP2007012088A JP2007012088A (ja) 2007-01-18
JP4195479B2 true JP4195479B2 (ja) 2008-12-10

Family

ID=22191926

Family Applications (2)

Application Number Title Priority Date Filing Date
JP7502762A Pending JPH08512152A (ja) 1993-06-28 1994-01-03 インクリメンタル生成システム
JP2006239370A Expired - Lifetime JP4195479B2 (ja) 1993-06-28 2006-09-04 インクリメンタル生成システム

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP7502762A Pending JPH08512152A (ja) 1993-06-28 1994-01-03 インクリメンタル生成システム

Country Status (8)

Country Link
US (1) US5758160A (ja)
EP (1) EP0688448B1 (ja)
JP (2) JPH08512152A (ja)
CN (1) CN1105802A (ja)
AU (1) AU6018794A (ja)
CA (1) CA2144874C (ja)
DE (1) DE69406113D1 (ja)
WO (1) WO1995000901A1 (ja)

Families Citing this family (94)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6070006A (en) * 1993-04-14 2000-05-30 Kabushiki Kaisha Toshiba Object oriented software development tool for creation of new class(es)
US5854932A (en) * 1995-08-17 1998-12-29 Microsoft Corporation Compiler and method for avoiding unnecessary recompilation
JPH09134282A (ja) * 1995-11-08 1997-05-20 Hitachi Ltd プログラム作成方法
US6282561B1 (en) * 1995-12-07 2001-08-28 Microsoft Corporation Method and system for resource management with independent real-time applications on a common set of machines
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
DE19615683A1 (de) * 1996-04-22 1997-10-23 Sel Alcatel Ag Verfahren und Steuereinrichtung für eine graphische Steuerung von Abläufen in einem Netzwerkmanagementsystem
US6434739B1 (en) 1996-04-22 2002-08-13 International Business Machines Corporation Object oriented framework mechanism for multi-target source code processing
US6067413A (en) * 1996-06-13 2000-05-23 Instantations, Inc. Data representation for mixed-language program development
JP3763937B2 (ja) * 1996-06-28 2006-04-05 富士通株式会社 オブジェクト指向プログラミング装置、およびオブジェクト結合プログラム記憶媒体
JP3427918B2 (ja) * 1996-07-02 2003-07-22 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラム開発支援システム及び支援方法
US6094528A (en) * 1996-10-24 2000-07-25 Sun Microsystems, Inc. Method and apparatus for system building with a transactional interpreter
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
US6473768B1 (en) * 1996-11-12 2002-10-29 Computer Associates Think, Inc. System and method for modifying an executing application
US5950000A (en) * 1996-12-06 1999-09-07 Sun Microsystems, Inc. Integrated of a third party software tool
CA2224466C (en) * 1997-01-09 2003-12-23 Mitel Corporation Transfer of basic knowledge to agents
US5907707A (en) * 1997-01-14 1999-05-25 International Business Machines Corporation Object model for Java
US6212673B1 (en) * 1997-03-31 2001-04-03 International Business Machines Corporation Component-neutral builder interface
US6023578A (en) * 1997-05-09 2000-02-08 International Business Macines Corporation Systems, methods and computer program products for generating an object oriented application for an object oriented environment
US5987247A (en) * 1997-05-09 1999-11-16 International Business Machines Corporation Systems, methods and computer program products for building frameworks in an object oriented environment
CA2296061C (en) * 1997-07-25 2004-08-24 British Telecommunications Public Limited Company Software system generation
EP0945812A1 (en) 1998-03-23 1999-09-29 Application Building Blocks Limited Data processing systems
US6735757B1 (en) * 1998-06-04 2004-05-11 Gateway, Inc. Apparatus and method for checking component compatibility in a build to order computer 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
US6449050B1 (en) 1998-10-05 2002-09-10 Canon Kabushiki Kaisha Code generator for printer driver
US6173441B1 (en) * 1998-10-16 2001-01-09 Peter A. Klein Method and system for compiling source code containing natural language instructions
US6272674B1 (en) * 1998-12-14 2001-08-07 Nortel Networks Limited Method and apparatus for loading a Java application program
US7526468B2 (en) * 1999-01-08 2009-04-28 Computer Associates Think, Inc. System and method for recursive path analysis of DBMS procedures
US7065717B1 (en) 1999-01-19 2006-06-20 International Business Machines Corporation Tree-based interface apparatus for display of call dependencies and method therefor
US6370683B1 (en) * 1999-05-07 2002-04-09 Arnold Sobers Computer software for generating flowchart images of a source program
WO2000073893A2 (en) * 1999-05-26 2000-12-07 Sobrio International Incorporated Apparatus and method for re-using and tracking digital assets
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
US6591413B1 (en) 1999-10-07 2003-07-08 International Business Machines Corporation Method and apparatus in a data processing system for faster notification of errors in a software build
US6757893B1 (en) 1999-12-17 2004-06-29 Canon Kabushiki Kaisha Version control system for software code
EP1266284A4 (en) * 2000-03-20 2003-08-06 Phoenix Tech Ltd DEVELOPMENT SOFTWARE SYSTEM PRESENTING A LOGIC VIEW OF PROJECT COMPONENTS, FACILITATING THEIR SELECTION, AND MISSING SIGNAL LINKS BEFORE COMPILATION
US7334216B2 (en) * 2000-04-04 2008-02-19 Sosy, Inc. Method and apparatus for automatic generation of information system user interfaces
US6681383B1 (en) 2000-04-04 2004-01-20 Sosy, Inc. Automatic software production system
US6658642B1 (en) * 2000-06-21 2003-12-02 International Business Machines Corporation System, method and program product for software development
US7853922B1 (en) * 2001-05-15 2010-12-14 The Mathworks, Inc. Data objects for model-based design
JP2002082922A (ja) * 2001-06-14 2002-03-22 Digital Vision Laboratories Corp 並列分散処理方法
US7080352B2 (en) * 2002-01-30 2006-07-18 Dloo, Incorporated Method and system for creating programs using code having coupled syntactic and semantic relationships
US7133894B2 (en) * 2002-03-12 2006-11-07 International Business Machines Corporation Method, apparatus, and program for synchronous remote builds
US7703077B2 (en) * 2002-04-30 2010-04-20 Microsoft Corporation Programming model to detect deadlocks in concurrent programs
US7203924B2 (en) * 2002-04-30 2007-04-10 Microsoft Corporation Behavioral analysis for message-passing application programs
US7360201B2 (en) * 2002-12-09 2008-04-15 International Business Machines Corporation Automated analysis and identification of options in project management
EP1465069B1 (en) 2003-04-01 2017-01-25 Sap Se Method and computer system for activation of source files
US20050144615A1 (en) * 2003-12-29 2005-06-30 Shu-Chuan Chen Modularized custom-developed software package producing method and system
US7337428B2 (en) * 2004-02-05 2008-02-26 Microsoft Corporation Automatic batching of tasks in a build process
US7797669B1 (en) 2004-02-13 2010-09-14 Microsoft Corporation Analysis of distributed software systems via specification substitution
US7765520B2 (en) * 2004-05-21 2010-07-27 Bea Systems, Inc. System and method for managing cross project dependencies at development time
US7757212B2 (en) * 2004-05-21 2010-07-13 Bea Systems, Inc. System and method for managing cross project dependencies at development time
US7640533B1 (en) * 2005-03-30 2009-12-29 Emc Corporation System and methods for defining a software build
US20070006166A1 (en) * 2005-06-20 2007-01-04 Seagate Technology Llc Code coverage for an embedded processor system
US7895572B2 (en) * 2005-08-15 2011-02-22 Sap Aktiengesellschaft Systems and methods for enterprise software management
US7949995B2 (en) * 2005-09-14 2011-05-24 Sadlek James M Visual programming method
US7721272B2 (en) * 2005-12-12 2010-05-18 Microsoft Corporation Tracking file access patterns during a software build
US7797689B2 (en) * 2005-12-12 2010-09-14 Microsoft Corporation Using file access patterns in providing an incremental software build
US20070234278A1 (en) * 2006-03-02 2007-10-04 Microsoft Corporation Managing source code in a model-based development environment
US9361137B2 (en) 2006-03-10 2016-06-07 International Business Machines Corporation Managing application parameters based on parameter types
US7739267B2 (en) * 2006-03-10 2010-06-15 International Business Machines Corporation Classification and sequencing of mixed data flows
WO2007123958A2 (en) * 2006-04-18 2007-11-01 Collabnet, Inc. Systems and methods for on- demand deployment of software build and test environments
KR100834676B1 (ko) * 2006-08-08 2008-06-02 삼성전자주식회사 소프트웨어 프로젝트 빌드 방법
US8381180B2 (en) * 2006-09-08 2013-02-19 Sap Ag Visually exposing data services to analysts
US8332827B2 (en) 2006-12-01 2012-12-11 Murex S.A.S. Produce graph oriented programming framework with scenario support
US8307337B2 (en) 2006-12-01 2012-11-06 Murex S.A.S. Parallelization and instrumentation in a producer graph oriented programming framework
US8191052B2 (en) 2006-12-01 2012-05-29 Murex S.A.S. Producer graph oriented programming and execution
US8160999B2 (en) * 2006-12-13 2012-04-17 International Business Machines Corporation Method and apparatus for using set based structured query language (SQL) to implement extract, transform, and load (ETL) splitter operation
US8219518B2 (en) 2007-01-09 2012-07-10 International Business Machines Corporation Method and apparatus for modelling data exchange in a data flow of an extract, transform, and load (ETL) process
KR100871563B1 (ko) * 2007-02-14 2008-12-02 삼성전자주식회사 컴포넌트 기반의 소프트웨어 개발을 위한 장치 및 방법
US8122428B2 (en) * 2007-06-26 2012-02-21 Analog Devices, Inc. Methods and apparatus for automation and facilitating design of register maps
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
CN101546260B (zh) * 2008-03-28 2012-07-11 国际商业机器公司 用于重构面向服务的应用的方法及其设备
US20100050156A1 (en) * 2008-08-20 2010-02-25 International Business Machines Corporation Using build history information to optimize a software build process
US20110239195A1 (en) * 2010-03-25 2011-09-29 Microsoft Corporation Dependence-based software builds
US9250866B2 (en) 2011-06-20 2016-02-02 Ebay Inc. Systems and methods for incremental software deployment
US8856724B2 (en) 2011-06-20 2014-10-07 Ebay Inc. Systems and methods for incremental software development
US9003383B2 (en) * 2011-09-15 2015-04-07 You Know Solutions, LLC Analytic engine to parallelize serial code
GB2506596A (en) * 2012-10-02 2014-04-09 Ibm Managing a set of software modules in a runtime environment
US10649424B2 (en) 2013-03-04 2020-05-12 Fisher-Rosemount Systems, Inc. Distributed industrial performance monitoring and analytics
US9558220B2 (en) 2013-03-04 2017-01-31 Fisher-Rosemount Systems, Inc. Big data in process control systems
US10386827B2 (en) * 2013-03-04 2019-08-20 Fisher-Rosemount Systems, Inc. Distributed industrial performance monitoring and analytics platform
US10551799B2 (en) 2013-03-15 2020-02-04 Fisher-Rosemount Systems, Inc. Method and apparatus for determining the position of a mobile control device in a process plant
CN103294478A (zh) * 2013-06-17 2013-09-11 宁夏新航信息科技有限公司 一种计算机软件的智能化编程方法
US20150082298A1 (en) * 2013-09-19 2015-03-19 Qiu Shi WANG Packaging and deploying hybrid applications
US10261889B2 (en) 2014-06-25 2019-04-16 Microsoft Technology Licensing, Llc Techniques for edit-and-continue and enhanced optimized debugging on optimized code
US9442707B2 (en) 2014-06-25 2016-09-13 Microsoft Technology Licensing, Llc Incremental whole program compilation of code
US10817552B2 (en) 2017-03-27 2020-10-27 Microsoft Technology Licensing, Llc Input-output example encoding
US10795645B2 (en) 2017-03-27 2020-10-06 Microsoft Technology Licensing, Llc Neural network for program synthesis
CN108920217B (zh) * 2018-03-30 2021-12-03 惠州市德赛西威汽车电子股份有限公司 一种减少不可重入函数的重构方法
US11656860B2 (en) * 2021-03-26 2023-05-23 Microsoft Technology Licensing, Llc Bundling data packages based on usage patterns for download control
KR102649150B1 (ko) * 2021-04-23 2024-03-18 연세대학교 산학협력단 다중 오류 프로그램 소스 코드 자동 수정 장치 및 방법

Family Cites Families (19)

* 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
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
US5193191A (en) * 1989-06-30 1993-03-09 Digital Equipment Corporation Incremental linking in source-code development system
US5201050A (en) * 1989-06-30 1993-04-06 Digital Equipment Corporation Line-skip compiler for source-code development system
US5182806A (en) * 1989-06-30 1993-01-26 Digital Equipment Corporation Incremental compiler for source-code development system
US5325531A (en) * 1989-06-30 1994-06-28 Digital Equipment Corporation Compiler using clean lines table with entries indicating unchanged text lines for incrementally compiling only changed source text lines
US5170465A (en) * 1989-06-30 1992-12-08 Digital Equipment Corporation Incremental-scanning compiler for source-code development system
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
US5325533A (en) * 1993-06-28 1994-06-28 Taligent, Inc. Engineering system for modeling computer programs
US5519866A (en) * 1993-06-28 1996-05-21 Taligent, Inc. Method and apparatus of incrementally linking components of a modeled computer program

Also Published As

Publication number Publication date
JPH08512152A (ja) 1996-12-17
WO1995000901A1 (en) 1995-01-05
CN1105802A (zh) 1995-07-26
CA2144874A1 (en) 1995-01-05
AU6018794A (en) 1995-01-17
DE69406113D1 (de) 1997-11-13
JP2007012088A (ja) 2007-01-18
EP0688448B1 (en) 1997-10-08
CA2144874C (en) 2000-07-18
EP0688448A1 (en) 1995-12-27
US5758160A (en) 1998-05-26

Similar Documents

Publication Publication Date Title
JP4195479B2 (ja) インクリメンタル生成システム
EP0664027B1 (en) Program modeling system
US5956479A (en) Demand based generation of symbolic information
US5519866A (en) Method and apparatus of incrementally linking components of a modeled computer program
US7171646B2 (en) Generating source code for object oriented elements with language neutral transient meta model and correlating display of names, symbols and code
US7055130B2 (en) Methods and systems for identifying dependencies between object-oriented elements
US7055131B2 (en) Methods and systems for animating the interaction of objects in an object oriented program
US6993759B2 (en) Diagrammatic control of software in a version control system
US8042097B2 (en) Automated semantic-based updates to modified code base
US7114149B2 (en) Navigation links in generated documentation
US20050204344A1 (en) Program analysis device, analysis method and program of same
US6976243B2 (en) Method and system for developing source code and displaying linked elements found within the source code
JP2007511834A (ja) リバーシブルなデザイン・ツリーの変換のための方法とシステム
KR20090042242A (ko) 플라즈마 프로세싱 시스템 컴포넌트 분석 소프트웨어 및 이를 생성하기 위한 방법 및 시스템
Mafi et al. Regression test selection in test-driven development
Mirian-Hosseinabadi Regression Test Selection in Test-Driven Development
II User's Manual
Kolb et al. Programming environments
Bendisposto A framework for semantic-aware editors in eclipse
Navia A quick introduction to the C language
Borrione et al. EDISYN: A Language-Based Editor for High-level

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20061215

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070315

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070410

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070710

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20070817

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20071106

RD13 Notification of appointment of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7433

Effective date: 20071121

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20071121

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20071221

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20080111

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080807

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080925

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111003

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111003

Year of fee payment: 3

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111003

Year of fee payment: 3

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111003

Year of fee payment: 3

RD15 Notification of revocation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: R3D15

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111003

Year of fee payment: 3

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: R3D02

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: R3D04

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121003

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131003

Year of fee payment: 5

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term