JPH08512154A - 増分リンカ・システム - Google Patents
増分リンカ・システムInfo
- Publication number
- JPH08512154A JPH08512154A JP7502766A JP50276694A JPH08512154A JP H08512154 A JPH08512154 A JP H08512154A JP 7502766 A JP7502766 A JP 7502766A JP 50276694 A JP50276694 A JP 50276694A JP H08512154 A JPH08512154 A JP H08512154A
- Authority
- JP
- Japan
- Prior art keywords
- component
- linking
- components
- property
- function
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/48—Incremental compilation
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/54—Link editing before load time
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- 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)
Abstract
(57)【要約】
増分リンカ・システムが開示されている。具体的には、人間指向オブジェクト・プログラミング・システムは、コンピュータ・プログラムを増分的に構築していき、オペレーティング・システムや大きなアプリケーションなどの複雑なコンピュータ・プログラムの開発を、グラフィカル・ユーザ・インタフェース(GUI)を使用して容易化する対話式、動的プロセスを提供する。プログラムは、コンポーネントと呼ばれる単位のコレクションとしてモデル化される。コンポーネントはクラスや関数などの、互換性をもつ単一言語エレメント(要素)を表わしている。主要機能はデータベース、コンパイラ、構築メカニズムおよびリンク・メカニズムである。コンパイラはプロパティのソース・コードをコンパイルし、オブジェクト・コードを生成することと同時に、コンポーネントに関連する従属関係を計算することを担当する。構築メカニズムは、コンポーネントのプロパティを、コンパイラ生成の従属関係と一緒に使用して、構築プロセス期間にコンポーネントのコンパイルを正しく、かつ効率的に順序づける。リンク・メカニズムは、コンポーネントがオブジェクト・コードをコンポーネント・データベースにストアするとき、すべてのオブジェクト・コードをリンクする。更新されたコンポーネントだけがリンキング・オペレーションを必要とする。
Description
【発明の詳細な説明】
増分リンカ・システム
著作権表記
本特許出願の一部には、著作権保護の対象となる内容が含まれている。著作権
所有者は、米国特許商標局の特許ファイルに登録されている特許文書または特許
開示事項を第三者がファクシミリで複製することを妨げるものではないが、その
他の場合には一切の著作権を所有することを留保する。
関連特許出願の相互参照
本特許出願は、「ローダ・システム(Loader System)」という名称の特許出願
(発明者Russell NakanoおよびAndrew G.Heninger、承継人Taligent)の関連出
願であり、その開示事項は引用により本明細書の一部を構成するものである。
発明の分野
本発明は、一般的には、コンピュータ支援ソフトウェア・エンジニアリング(c
omputer aided software engineering‐CASE)に関し、より具体的には、コンピ
ュータ・プログラム構築のための対話式(interactive‐インタラクティブ)、動
的環境を提供する人間指向オブジェクト・プログラミング・システム(human ori
ented object programming‐HOOPS)に関する。HOOPSによると、プログラマ
は、最適化増分(incremental)コンパイラを備えたコンピュータ・プログラムで
、ソース・コードの編集をきめ細かく行なうことができる。本発明は、HOOP
S内部で動作し、ローダで使用されるファイルを作成する増分リンカ(increment
al linker)に係るものである。本発明は、ポピュラーなオブジェクト指向プログ
ラミング(object oriented programming‐OOP)言語であ
る、C++を使用する好適実施例を例にして開示されているが、本発明の原理は
、オブジェクト指向であるか、手続向き(procedural)であるかに関係なく、他の
コンピュータ・プログラミング言語にも応用可能であり、従来の言語とOOP言
語のどちらを使用しても、プログラムを構築するために使用することができる。
発明の背景
オブジェクト指向プログラミング(OOP)は、ユーザ・フレンドリなインテ
リジェント・コンピュータ・ソフトウェアを構築するための好適な環境である。
OOPの中心となる要素は、カプセル化(encapsulation)、継承(inheritance)お
よび多態(polymorphism)である。これらの要素は、アイコン、マウス・カーソル
、およびメニューをもつウィンドウ操作環境で特徴づけられている、グラフィカ
ル・ユーザ・インタフエース(graphical user interface‐GUI)を生成するため
に使用することができる。これらの3つの主要要素は、OOP言語に共通してい
るが、大部分のOOP言語では、これらの3主要要素の実現方法が異なっている
。
OOP言語の例としては、Smalltalk、Object PascalおよびC++がある。Sm
alltalkは実際には言語を越えており、正確には、プログラミング環境と特徴づ
けることができる。Smalltalkは、1970年代の初期に、ゼロックス社のAlto
Research Center(PARC)のLearning Research Groupによって開発されたものであ
る。Smalltalkでは、メッセージがオブジェクトに送られ、そのオブジェクト自
身が評価される。メッセージは、従来のプログラミング言語におけるファンクシ
ョン(関数)コールのそれと似たタスクを実行する。プログラマはデータのタイ
プを気にする必要がなく、むしろ、プログラマは、メッセージを正しい順序で作
成し、正しいメッセージを使用することだけを気にすればよい。Object Pascal
は、アップル・マッキントッシュ(登録商標)コンピュータ用に使用されている
言語である。アップル社は、Pascalの設計者であるNiklaus Wirthの協力を得てO
bject Pascalを開発した。C++は、1983年にAT&T
Bell LaboratoriesのBjarne StroustrupによってCの拡張版として開発されたも
のである。C++の中心となる概念はクラス(class)であり、これはユーザが定
義するタイプである。クラスはオブジェクト指向プログラミンの特徴を備えてい
る。C++モジュールはCモジュールと互換性があり、自由にリンクできるので
、既存のCライブラリをC++プログラムで使用できるようになっている。最も
普及しているオブジェクト・ベースのプログラミング言語とオブジェクト指向プ
ログラミング言語の起源は、1960年代にノルウェーのO-J.Dahl、B.Myhrha
ugおよびK.Nygardによって開発されたSimulaである。OOPの主題に関する詳
細説明は、Grady Booch著「オブジェクト指向設計とその応用(Object Oriented
Design and Applications)」(The Benjamin/Cummings Publishing Co.,Inc.,R
eadwood City,Calif.(1991))に記載されている。
コンピュータ・プログラムを実行するプロセス全体は、プログラマが書いたソ
ース・コードを、オブジェクト・コードと呼ばれるマシン実行可能形体に変換(
翻訳)し、オブジェクト・コードを実行することにより行なわれる。変換プロセ
スは、インタプリータまたはコンパイラによって実行される。インタプリータの
場合には、変換はプログラムの実行時に行なわれ、これに対してコンパイラの場
合には、プログラム実行に先立って変換が行なわれ、オブジェクト・コードとし
てストアされる。つまり、通常のコンパイルと実行システムでは、変換と実行の
2フェーズは別々であり、コンパイルは一度だけ行なわれている。Smalltalkイ
ンタプリータのような、インタプリータ・システムでは、これらの2フェーズは
シーケンスに行なわれている。Smalltalkでインタプリータが必要であるのは、
そのプログラミング環境の性質上、オブジェクトが実現されるまでは特定のレジ
スタまたはアドレス空間(address space)を指定できないためである。
コンパイラは、レキシカル・アナライザ(lexical analyzer−字句解析)、シン
タックス(構文)アナライザ、およびコード・ジェネレータの3部分からなって
いる。レキシカル・アナライザへの入力は、高水準言語プログラムを表わす文字
のシーケンス(文字列)である。レキシカル・アナライザはこのシーケンスをト
ークンのシーケンスに分割し、これはシンタックス・アナライザへの入力となる
。シンタックス・アナライザはトークンを命令に分割し、文法ルールを使用し
て、各命令が文法的に正しいかどうかを判断する。正しければ、命令は基本的命
令のシーケンスに分解され、これはコード・ジェネレータへ転送されて低水準言
語が得られる。コード・ジェネレータは、それ自身が3部分に分割されているの
が代表的である。つまり、中間コード生成、コード最適化、およびコード生成で
ある。基本的には、コード・ジェネレータはシンタックス・アナライザからの出
力を受け取り、マシン言語コードを生成する。
ソフトウェア開発を支援するために、増分コンパイラが開発されたが、これに
よれば、コンパイラは、ステートメントまたはステートメント群を受け取った時
点で、そのあとで生成される他のステートメントのコードに関係なく、バッチ処
理オペレーションでそのコードを生成している。増分コンパイルの利点は、変更
によって影響を受けたコードだけがコンパイルされることである。この結果、コ
ードをコンパイルし、デバッグするときのターンアラウンド時間が大幅に高速化
している。
最適化コンパイラは、高度に最適化されたオブジェクト・コードを生成するの
で、多くの場合、ソース・コード・レベルでのデバッグが非最適化コンパイラに
よる場合よりも、非常に困難になっている。問題点は、ルーチンが正しい解が得
られるようにコンパイルされたとしても、そのルーチンがその解を計算する正確
な仕方が、ソース・コードに記述されているものと大幅に異なるということであ
る。最適化コンパイラができるものとしては、最終結果に影響しないことが分か
っているコードや変数を除去すること、不変コードを移動してループから出すこ
と、共通コードを結合すること、変数に割り当てられたレジスタをその変数が不
要になったとき再使用することなどがある。従って、ソース・コードからオブジ
ェクト・コードへのマッピングまたはその逆のマッピングは、これらの最適化の
いくつかが行なわれた場合、困難になることがある。変数の値がルーチン内の任
意のロケーションで常に使用可能であるとは限らないため、変数の値を調べるこ
とが困難になることがある。最適化コード内の変数の値を変更することは、不可
能ではないにもても、特に困難である。揮発性(volatile)と明示に宣言されてい
なければ、コンパイラは変数に割り当てられた値を「記憶」しており、その変数
を再読み取りすることなく、コードの後半で「既知の」値を使用するおそれが
ある。従って、その値が変更されると、エラーのあるプログラム結果が得られる
ことになる。
コンピュータ・プログラム構築、テストおよび開発の分野では、多数の進歩が
行なわれているが、公知のソフトウェア開発ツールは、依然として、プログラマ
に大きな負担をかけており、洞察力のある直感が要求されることがしばしばであ
る。さらに、従来のバッチ向きプログラミング・システムでは、編集−コンパイ
ル−テストのサイクルが非常に長いために、創造的なプログラミングを行なうの
に大きな支障となっている。
従来のプログラミング・システムでは、コンパイルを終えても、アプリケーシ
ョンをリンクし、ロードすることがまだ残っている。リンカと呼ばれるプログラ
ムは、再配置可能(relocatable)マシン・コードのいくつかのファイルから1つ
のプログラムを作り出す。これらのファイルは、いくつかのコンパイルの結果で
ある場合がある。そのあと、プログラムはロードされるが、これは、再配置可能
マシン・コードを取り出し、再配置可能アドレスを変更し、変更された命令とデ
ータをメモリ内の正しいロケーションに置くことにより行なわれる。
発明の概要
以上に鑑みて、本発明の目的は、コンピュータ・プログラム構築のための人間
指向で、対話式かつ動的なプロセス内で動作する増分リンカ(incremental linke
r)を提供することである。
対話式、動的構築プロセスでは、プログラム構築は、プロジェクト(project)
と呼ばれる増分プログラム・モデル(incremental program model)と3つの主要
機能とがやりとりすることによって可能になっている。プログラムは、コンポー
ネント(component)と呼ばれるセマンティック単位(semantic unit)としてモデル
化され、これらは、プロパティ(property)と呼ばれる、名前付きデータ・アイテ
ム(項目)のリストから構成されている。従来のシステムで行なわれているよう
に、プログラムを、結合の弱いファイルのコレクション(loose collection)とし
てストアするのではなく、本発明の人間指向オブジェクト・プログラミング・
システム(HOOPS)によれば、プログラムに関するすべての情報はプロジェ
クトにストアされる。コンピュータ構築プロセス(computer builder process)に
よると、プログラマの注意力と集中力が向上するので、生産性を向上することが
できる。
本発明によれば、HOOPS内で動作する増分リンク機能が提供されており、
この増分リンク機能では、関数は既存の実行可能ファイル(executables)にリン
クされるので、オブジェクト・ファイル・セット全体を再処理する必要がなくな
っている。本発明を実施する際には、コンピュータ・プログラムはコンポーネン
トのコレクションとしてモデル化される。コンピュータ・プログラムのモデルと
なるコンポーネントは、構築プロセスの実行時にアクセスされるようにストアさ
れている。ストアされたコンポーネントはシーケンス(順番)にアクセスされ、
各コンポーネントに関連する従属関係(dependencies)は、コンパイラを使用して
計算され、従属関係リストが作成される。次に、コンポーネントは従属関係リス
トに基づいてコンパイルされ、更新されたオブジェクト・モジュールが生成され
る。最後に、更新されたオブジェクト・モジュールは既存の実行可能ファイルを
更新することによってリンクされる。
本発明の好適実施例はC++で書かれており、現在使用されている最もポピュ
ラーな言語である、C++、Cおよびアセンブラでプログラムを構築するために
使用される。本発明を使用して構築されるプログラムは、これらの3言語すべて
を使用するのが代表的である。従って、本発明は、それ自体がオブジェクト指向
プログラミング言語で書かれたオブジェクト指向プログラムであるが、オブジェ
クト指向プログラミング言語でプログラムを構築することだけに限定されるもの
ではなく、手続き向き言語でプログラムを構築する場合にも同じく有用である。
さらに、本発明はC++言語に限定されるものではなく、他のプログラミング言
語で実現することも可能である。また、本発明はそのアプリケーションが前記3
言語に限定されるものではない。つまり、本発明の教示事項は、より一般的なア
プリケーションの人間指向オブジェクト・プログラミング・システムで利用する
ことが可能である。
図面の簡単な説明
上記およびその他の目的、側面および利点は、その理解を容易にするために、
以下、添付図面を参照して本発明の好適実施例について詳しく説明する。なお、
添付図面において、
図1は、高解像度グラフィックス・ディスプレイ・デバイスおよびマウスなど
のカーソル・ポインティング・デバイスをサポートする機能を備え、本発明を実
現することができる汎用コンピュータ・システムを示す絵図である。
図2は、図1に示す汎用コンピュータ・システムにおいて、コンピュータ・シ
ステムの主要エレメントの詳細を示すブロック図である。
図3は、プログラムを構成するコンポーネントのコレクションを概念化して示
すブロック図である。
図4は、本発明の主要機能を示すブロック図である。
図5Aから図5Dまでは1つに連結されて、編集した変更をBuildStatesを通
して登録するロジックを示すフローチャートである。
図6は、本発明による構築メカニズムのオペレーションの第1ステージで、可
能とされるコンポーネントを判断するロジックを示すフローチャートである。
図7は、本発明による構築メカニズムのオペレーションの第2ステージで、イ
ンタフェース(Interfaces)を処理するロジックを示すフローチャートである。
図8は、本発明による構築メカニズムのオペレーションの第3ステージで、イ
ンプリメンテーション(Implementations)を処理するロジックを示すフローチャ
ートである。
図9は、本発明によるコンパイラから呼び出されるGetDeclarations関数のロ
ジックを示すフローチャートである。
図10Aと図10Bは1つに連結されて、Conditionally Compile関数のロジ
ックを示すフローチャートである。
図11は、本発明を使用しているときの代表的なメンバ・ビュワー(members v
iewer)示しているコンピュータ・スクリーンの絵図である。
図12は、本発明によるブラウザ(browser)を示しているコンピュータ・スク
リーンの絵図である。
図13は図12に示すコンピュータ・スクリーンにおいて、ブラウザ・ワイヤ
リングがオンになっている様子を示す絵図である。
図14は、部分的に展開したプロジェクトをツリー・ビュワーで示しているコ
ンピュータ・スクリーンの絵図である。
図15から図18までは、コンポーネントを編集している過程で表示されるス
クリーンの一部を示す図である。
図19は、好適実施例による内部クロスライブラリ・コール(internal and cr
oss library call)を示す図である。
図20は、好適実施例によるフィックスアップ・クラス(fixup class)のセッ
トを示す図である。
図21は、好適実施例によるリンケージ・エリアを示す図である。
図22は、好適実施例によるオブジェクト・コードのストーレッジを示す図で
ある。
図23は、好適実施例によるロードされたライブラリを示す図である。
図24は、好適実施例によるロード・モジュールのメモリ・マップを示す図で
ある。
図25は、好適実施例による種々のタイプの参照およびリンカによる参照の変
更を示す図である。
図26,図27,図28および図29は、好適実施例によるリンキングに関連
するロジックを示すフローチャートである。
本発明の好適実施例の詳細な説明
以下、添付図面、特に、図1を参照して説明する。図1は汎用コンピュータ1
0を示したものである。コンピュータ10はシステム・ユニット12と陰極線管
(CRT)などの高解像度ディスプレイ・デバイス14を備えいる。なお、CR
Tは液晶ディスプレイ(LCD)にすることも可能である。ディスプレイのタイ
プは、グラフィックス・ユーザ・インタフェース(GUI)を代表とする
ウィンドウ操作システムに要求される高解像度ディスプレイであることを除けば
、重要でない。コンピュータへのユーザ入力はキーボード16およびマウス18
などのカーソル・ポインティング・デバイスを通して行なわれる。マウス18は
キーボード16に接続され、キーボードの方はシステム・ユニット12に接続さ
れている。別の方法として、マウス18をシステム・ユニット12内の専用ポー
トまたはシリアル・ポートに接続することも可能である。図1に示すタイプの汎
用コンピュータの例としては、アップル・マッキントッシュ(アップル・コンピ
ュータ社の登録商標)およびIBM PS/2がある。その他の例としては、I
BM RISCシステム/6000およびサン・マイクロシステムズ社コンピュ
ータなどの種々ワークステーションがある。
図2は、図1に示す汎用コンピュータ・システムの主要エレメントの詳細を示
す図である。システム・ユニット12は中央演算処理ユニット(CPU)21、
ランダム・アクセス・メモリ(RAM)22、およびリードオンリ・メモリ(R
OM)23を装備し、これらはバス24に接続されている。CPU21は、いく
つかの市販マイクロプロセッサにすることができる。そのようなものとして、ア
ップル・マッキントッシュ(登録商標)コンピュータで広く使用されているモト
ローラ68030と68040マイクロプロセッサや、IBM PS/2コンピュータで広
く使用されているインテル80386と80486マイクロプロセッサがある。代表例とし
てワークステーションで使用されているRISC(reduced instruction set com
puter−縮小命令セット・コンピュータを意味する)マイクロプロセッサなどの、
他のマイクロプロセッサを使用することも可能である。ROM24は、基本入出
力システム(basic input/output system‐BIOS)を含めて、CPU21用の基本
マイクロコードをストアしている。コンピュータ・システム10用のオペレーテ
ィング・システム(OS)をROM 24にストアしておくことも可能であるが
、別の方法として、OSは初期プログラム・ロード(initial program load‐IPL
)の一部としてRAM22にストアされている。RAM22は、アプリケーショ
ン・プログラムの一部と、プログラムの実行時に生成される一時データをストア
するためにも使用されている。バス24としては、アップルNuBus(登録商
標)、IBM マイクロチャネル
(MicroChannel−登録商標)またはISA(業界標準アダプタ)やEISA(拡張
業界標準アダプタ)などの業界標準の1つにすることができる。
バス24には、ユーザ・インタフェース・アダプタ25および入出力アダプタ
26を含む、種々の入出力(I/O)アダプタも接続されている。キーボード1
6はユーザ・インタフェース・アダプタ25に接続され、入出力アダプタ26は
フロッピ・ディスク・ドライブ27とハードディスク・ドライブ28に接続して
いる。フロッピ・ディスク・ドライブ27はデータとプログラムを取外し可能媒
体に読み書きするのを可能にし、他方、ハードディスク・ドライブ28は、RA
M22との間でページインされ、ページアウトされるデータとプログラムをスト
アしているのが代表的である。ディスプレイ・デバイス14はディスプレイ・ア
ダプタ29を介してバス24に接続されている。通信アダプタ30はネットワー
クとのインタフェースとなるものである。集積回路(IC)チップの形体になっ
た、その他のサポート回路(図示せず)はバス24および/またはCPU21に
接続されている。このような回路としては、例えば、バス24上のトラフィック
を制御するバス・マスタ・チップがある。バス24は、一部のコンピュータでは
、2バスになっている場合がある。データ・バスと、グラフィック・ユーザ・イ
ンタフェースで望まれているディスプレイ・オペレーションの高速化を可能にす
るディスプレイ・バスである。
定義
プログラム(program)
本発明の説明で用いられているときの、HOOPSプログラムは、プロジェク
ト(project)と呼ばれる1つの構築不能コンポーネント(non-buildable componen
t)と、「構築可能コンポーネント」(buildable component)のコレクション(集
合)とで構成されている。構築不能コンポーネントをストアすることも可能であ
るが、以下の説明では、未修飾のコンポーネントが言及されるときは、その意味
は「構築可能コンポーネント」のことである。構築不能コンポーネントは構築オ
ペレーションのときコンパイルされない。
コンポーネント(component)
コンポーネントは固有の識別子をもち、名前が付けられている。異種のコンポ
ーネントは、IDと呼ばれる、ある種の固有識別子(unique identifier)によっ
て区別される。NullIDと呼ばれる特別なIDがあり、これはどのコンポー
ネントにも属していない。IDはコンポーネントの作成時に割り当てられ、その
コンポーネントが存在する間変更されることはない。コンポーネントが削除され
ると、そのIDは再使用されることがない。実際には、IDは数字になっている
のが通常である。
コンポーネントは、テキスト・ストリングからなる名前ももっている。異なる
コンポーネントが異なる名前をもたなければならないという要件はない。ある与
えられたテキスト・ストリングに一致する名前をもつ、すべてのコンポーネント
のリスト(空であることもある)を得ることが可能である。コンポーネントの名
前は、そのコンポーネントが存在する間、なん回でも変更することができる。
各構築可能コンポーネントは特定のコンピュータ言語が関連づけられている。
実際には、コンピュータ言語はテキスト・ストリングによって識別されるのが通
常である。各コンピュータ言語は、その言語でいずれかのコンポーネントをコン
パイルするとき使用されるコンパイラが関連づけられている。実際には、あるコ
ンピュータ言語を2つ以上のコンパイラと関連づけることが可能になっている。
その場合には、コンポーネントは言語のほかに、特定コンパイラを識別するなん
らかの方法も記録していなければならない。
特定の言語は、特定のコンポーネント種類(component kind)のセットが関連づ
けられており、特定のプロパティ・インプリメンテーションのセットをもち、こ
れは種類ごとに異なる場合がある。従って、特定の言語の中の個々のセマンティ
ック・エレメントは、要求に応じて異なった構造にすることが可能である。
コンポーネントはBuildStatesをもっている。BuildStateは、リストNeverComp
ile、Compile、NeedToComplile、Uncertain、BeingCompiled、CompilerError、
およびUncertainErrorからの値である。実際には、これらの値は数値であるのが
通常である。各コンポーネントは、InterfaceBuildStateおよ
びImplementationBuildStateと呼ばれるペアのBuildStatesをもっている。すべ
てのコンポーネントは、それが構築可能であるか、構築不能であるかに関係なく
、両方のBuildStateをもっている。構築不能コンポーネントの場合は、これらの
BuildStateは共にNeverCompileである。
BuildStateはアクセスして変更することができる。コンポーネントのBuildSta
teを再度同じ値にセットすることは許されるが、セットしても、なにも作用しな
い。BuildStateを変更すると、同じまたは異なるコンポーネントの別のプロパテ
ィのBuildStateが変更されるという副作用が生じることが、明確に定義されてい
る。つまり、例えば、変更リストやエラー・リストなどの、ある種のリストに参
照が追加されたり、そのリストから削除されることになる。
コンポーネントはセマンティック言語エレメントを表わすために使用される。
これがどのように行なわれるかは、モデル化される特定コンピュータ言語によっ
て決まる。例えば、C++では、コンポーネントで表わされた言語エレメントの
の一部を挙げると、グローバル・データ、グローバル関数、クラス、データ・メ
ンバ、メンバ関数、typedefs、enums、enumerator、マクロ、unionおよびstruct
などがある。代表例として、各セマンティック・エレメントは独自の種類が関連
づけられている。
プロパティ(property)
コンポーネントは名前付きプロパティのコレクションからなっている。プロパ
ティは、コンポーネントに関連づけられた、一部のデータを表わしている。コン
ポーネントのIDとプロパティ名が分かっていれば、データを取り出したり、ス
トアしたりできる。実際には、プロパティ名は、名前を識別する数字で内部表現
されているのが通常である(このような数字はトークン(token)と呼ばれること
がある)。NullPropetyと呼ばれる独特なプロパティ名があり、これはどのプロ
パティにも属していない。
あるプロパティに関連づけられたデータは、コンポーネントが異なるごとに異
なっている。あるコンポーネントのあるプロパティのデータを変更しても、その
ことは、他のいずれかのコンポーネントの同じプロパティのデータが変更される
ことを意味しない。しかし、あるコンポーネントのあるプロパティが変化すると
、同じまたは異なるコンポーネントの別のプロパティが変化することは起こり得
る。
IDとプロパティ名からなるペアは参照(reference)と呼ばれる。参照は、プ
ロパティ・データの特定の断片を固有に識別している。参照は、それが参照する
コンポーネントおよび/またはプロパティであるかのように、ゆるやかに使用さ
れることがよくある。実際には、参照はプログラム構築の際に直接に使用されな
い他の情報を含んでいて、データのどのバージョンおよびプロパティ内のデータ
のどのサブセクションが参照されているのかを示しているのが代表的である。
すべてのコンポーネントはName(名前)プロパティとContainer(コンテナ)
プロパティをもっていなければならない。Nameプロパティはコンポーネントの名
前をストアしている。Containerプロパティは、プロパティ名がNullPropertyに
なっている単一の参照を収めている。いずれかのコンポーネントから始まり、そ
のコンテナIDが参照するコンポーネントでそのコンポーネントを連続的に置き
換えていくと、最終的には、常にProject(プロジェクト)コンポーネントが得
られることになる。プロジェクトのコンテナIDはNullIDである。従って、すべ
てのコンポーネントはプロジェクト内にあるものと記述されている。
"Component Built"プロパティ(コンポーネント構築リストとも呼ばれる)は
最後の構築で正しくコンパイルされたプロパティのリストを、プロパティが構築
された順に記録している。同じプロパティは多くても1回だけこのリストに現わ
れるはずである。このリストはテストとデバッグを行なうとき使用される。
プロジェクト・コンポーネント(Project Component)
プロジェクトは、さらに、ChangeListプロパティとErrorListプロパティをも
つコンポーネントである。ChangeListプロパティは参照リストである。参照は最
後の構築以降に変更されたコンポーネントとプロパティを記述している。実際に
は、ChangeListは、プログラム構築の効率化のためになんらかの方法でソートさ
れた2つ以上のリストで表わすことが可能になっている。ErrorListプロパティ
も参照リストである。これらの参照は、最後のプログラム構築期間にエラーがあ
るとリストされたコンポーネントを記述している。参照はすべてErrorsをそのプ
ロパティとしてもっている。各参照には数値キーが関連づけられている。このキ
ーは特定のErrorsプロパティと一緒に使用され、特定のメッセージとコンポーネ
ントの特定プロパティの特定サブレンジを探し出す。
ライブラリ・コンポーネント(Library Component)
ライブラリはすべての構築可能コンポーネントのコンテナである。これは"Loa
dModuleProperty"のプロパティをもっている。このプロパティは以下で詳しく説
明する。複数のライブラリ・コンポーネントがプロジェクト内に存在することが
可能である。各構築可能コンポーネントはライブラリ・コンポーネントによって
収容されていなければならない。
構築可能コンポーネント(Buildable Component)
構築可能コンポーネントは、Declaration、ObjectCode、Clients、SourceRefe
rences、Errorsのプロパティももっていなければならないが、Interface、Imple
mentation、およびMembersのプロパティをもつこともできる。
Declarationプロパティは、コンパイラ用のデータ・キャッシュを表わしてい
る。これは、例えば、コンポーネントがコンパイルされる前のように、空になっ
ている場合がある。実際には、これは、ストアされた表現がコンパイラの内部表
現と異なることがあっても、コンパイラの記号テーブルのエントリと考えること
ができる。
ObjectCodeプロパティはコンポーネントの実行可能コードを表わしている。こ
れは、例えば、コンポーネントがコンパイルされる前のように、あるいはこのコ
ンポーネントに関連するオブジェクト・コードがないと、空になっている場合が
ある。実際には、これは、他の場所にストアされている実際のコードを指してい
る手段となっているのが普通である。
ClientsとSourceReferencesプロパティは、参照と従属関係(dependency)から
なるペアのコレクションである。従属関係は変更リストである。変更は、独特の
有限ストリング・リスト(distinguished finite list of strings)から選択され
たテキスト・ストリングで表わすことが可能である。Public(公開)と呼ばれる
独特の変更があり、これは、Interfaceプロパティでの使用とは対照的に、Imple
mentationプロパティだけのコンポーネントへの参照を区別するために使用され
ている。従属関係はビット・ベクトルで表わすことができ、n番目のビットは、
リスト内のn番目の変更が存在すれば“1”に、そうでなければ“0”になって
いる。
Errorsプロパティはトリプル(triple)のリストからなっている。各トリプルは
キー、プロパティ名、およびメッセージからなっている。キーは数値識別子であ
る。どのキーも、特定のErrorsプロパティの中に一度に一回だけ現われることが
できる。プロパティ名は、InterfaceまたはImplementationであるのが通常であ
る。メッセージはテキストおよび/またはグラフィックスの一断片である。
InterfaceとImplementationプロパティは、コンポーネントのソース・テキス
トを表わすプロパティである。ソース・テキストはテキストではなく、トークン
としてストアしておき、必要ならば、異なる方法でアクセスすることができる。
これらのプロパティで表わされたテキストは、プログラミング環境で手操作で編
集することにより変更することができる。1つの方法として、Interfaceデータ
を構造化フィールド(structured fields)としてストアしておき、そこからソー
ス・テキストを必要に応じて再構築することができる。
Membersプロパティは参照のコレクション(空である場合もある)であり、参
照は、プロジェクト内の各コンポーネントごとに1つあり、このコンポーネント
をそのコンテナとしてもっている。
属性(attribute)
コンポーネントはいくつかの属性をもっている。属性は真か偽のどちらかにな
っている。実際には、属性はメモリの1ビットで表わされるのが普通であり、真
と偽の値は“1”と“0”の数字で表されている。すべてのコンポーネントは、
Isbuildableの属性をもっている。この属性が真であれば、コンポーネントは構
築可能である。偽ならば、構築不能である。コンポーネントは常時構築不能
にすることも、一時的に構築不能(なんらかの一時的条件のアクションにより)
にすることもできる。
構築可能コンポーネントは属性IsInlineももっている。この属性が真であると
きは、コンポーネントのインプリメンテーションは公開(public)であり、このこ
とは、他のコンポーネントがインプリメンターションの変更に従属できることを
意味する。この属性が偽であるときは、インプリメンテーションが変更されても
、他のコンポーネントが変更されることはない。
構築可能コンポーネントは属性IsSyntheticももっている。この属性は、構築
プロセス期間にコンパイラによって作成されたコンポーネントでは真になってい
る。これは、プログラマによって手作業で作成されたコンポーネントでは偽にな
っている。合成(synthetic)コンポーネントは、必要であるが、プログラマが明
示的に作成する必要のない、デフォルト(省略時)の言語エレメントに対応する
コンポネーントを、コンパイラが作成できるように用意されたものである。実際
には、例えば、合成されたコンポーネントが手作業で編集される場合には、IsSy
nthetic属性を真から偽へ変更する必要が起こるが、偽から真への逆の変更は許
されない。合成コンポーネントは、InterfaceまたはImplementationプロパティ
をもたないことがよくあるが、どのような場合も、InterfaceとImplementation
BuildStates Compiledは常にもっている。
種類(kind)
各コンポーネントは種類をもっている。種類は、例えば、同じプロパティまた
は同じ言語固有の作用(behavior)を共有するグループにコンポーネントを分類す
るために使用されるテキスト・ストリングである。大部分の種類は特定のコンピ
ュータ言語に固有になっており、意味的に異なる言語エレメントを示すために使
用される。
しかし、システムによって定義された種類がいくつかある。これらはProject
、LibraryおよびContainerの種類である。これらの種類は構築不能コンポーネン
トだけに適用される。Project種類はProjectコンポーネントの種類である。Libr
ary種類は、共有ライブラリやアプリケーションのような、オブジェクト・
コードの単一外部ブロックにリンクされるコンポーネントのコレクションに適用
される。Container種類は、編成目的のために他のコンポーネントをグループ化
するために使用されるコンポーネントに適用される。実際には、種類は数値で内
部表現されているのが普通である。
発明の概要
図3は、1組のコンポーネント31で構成されたプログラムを概念化した図で
ある。各コンポーネントは1組のプロパティで構成され、プロパティは、外部か
ら見える(public:公開)部分311(インタフェースと呼ばれる)とインプリ
メンテーション312(privatepart:私有部分)の2つの部分に分かれている
。図3に示すように、コンポーネントは別のコンポーネントのインタフェースだ
けに従属する。プロジェクト内のすべてのコンポーネントはツリー構造に編成さ
れており、ツリーのベースはプロジェクト・コンポーネントと呼ばれるルート(r
oot)コンポーネント32になっている。この分野の当業者ならば理解されるよう
に、コンポーネントは必ずしも自己完結エンティティ(self-containedentity)で
ある必要がないが、実際のコードの記憶ロケーションを指すポインタを含むこと
ができる。それにもかかわらず、ツリー構造表現はプログラムの編成を表わすと
きに便利であるので、下述するユーザ・スクリーンの1つでは類似のツリー構造
表現が使用されている。
図4は、本発明の主要機能を示すブロック図である。これらはデータベース4
1、コンパイラ42、および構築メカニズム43である。データベース41は、
ここではプロジェクト・コンポーネント411として示されている1組のコンポ
ーネントと、構築されるプログラムをモデル化する構築可能コンポーネントのコ
レクション412とで構成されている。コンパイラ42はデータベース41内の
コンポーネントに関連する従属関係を計算する。構築メカニズム43はコンパイ
ラ生成の従属関係と一緒に、コンポーネントのプロパティを使用して、プログラ
ムを構築する。リンク・メカニズム45は更新されたコンポーネントを増分的に
リンクし、ロードされたアプリケーションを更新することもできる。リン
ク・メカニズムは、コンパイラによって生成されたオブジェクト・コードを収集
して実行可能ファイルとする。
プログラマはエディタ44を使用してプログラムを変更する。エディタはコン
ポーネントを作成し、削除し、代表例として、コンポーネントをカットし、コピ
ーし、ペーストし、移動する機能を備えていなければならない。また、エディタ
は、InterfaceとImplementationプロパティ内のデータを、通常はテキストの直
接的操作を可能にすることによって変更できる機能を備えていなければならない
が、メニューからの選択といった、他のもっと構造化されたアプローチによるこ
とも可能である。実際には、エディタ44はいくつかのエディタから構成されて
いることがよくあり、場合によっては、InterfaceまたはImplementationプロパ
ティの各タイプごとに1つのエディタが、場合によっては、これらのプロパティ
内のデータのサブフィールドにさえも1つのエディタが用意されている。
編集した変更を登録するメソッド
以下では、増分構築に関連するエディタ44で実行される機能のロジックを示
すフローチャートを示している図5A〜図5Dを参照して説明する。構築可能な
非合成コンポーネントの場合は、BuildStatesは、構築プロセスの外でCompiled
とNeedToCompileの値に限定されている。Interfaceプロパティが存在しなければ
、InterfaceBuildStateはCompiledになっている。Implementationプロパティが
存在しなければ、ImplementationBuildStateはCompiledになっている。図5Aに
は、種々の編集ステート変更が示されている。ラベル500に示すように、シス
テムがcreateComponent、RenameComponent、pasteComponentまたはEditInterfac
eコマンドであることを認識すると、制御が機能ブロック510へ移り、インタ
フェース変更が処理される。この変更の詳細ロジックは図5Bに示されている。
図5Bに示すように、処理は判定ブロック511から開始され、そこでテスト
が行なわれ、インタフェース構築ステート(interface build state)がNeedToCom
pileであるかどうかが判断される。そうであれば、制御はラベル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で検出されると、機能ブロック5
40に示すように、また図5Dの説明で上述したように、コンポーネントAのコ
ンテナ変更処理が開始される。そのあと、コンポーネントAは削除され、制御は
ラベル550から返却される。
Move Componentコマンドが図5Aの580で検出されると、機能ブロック59
0に示すように、または図5Dで詳述したように、コンポーネントAのコンテナ
変更処理が開始される。そのあと、コンポーネントのコンテナは新しいコンテナ
にセットされ、図5Bで詳述したように、コンポーネントAのインタフェース変
更処理が開始される。最後に、処理はラベル595から返却される。
構築のコンポーネントを判断するメソッド
プログラム構築期間には、Projectコンポーネントは、CompileListと呼ばれる
参照の私有リストを維持している。InterfaceCompileListとImplementationComp
ileListがある。Projectは、InternalErrorListと呼ばれる参照の私有リストも
維持している。実際には、これらのリストの各々は、効率上の理由から2つ以上
のリストによって物理的に表わすことが可能である。
プロセスは図6に示されている。機能ブロック601に示すように、プロジェ
クトのChangeList内の各参照ごとに、参照はリストの先頭から選択される。リス
トに参照が残っていなければ、処理は、機能ブロック602に示すように完了す
る。参照がInterfaceであるとブロック603で判断されると、参照のコピーがI
nterfaceCompileListに入れられ、関数AddClientsが機能ブロック604で参照
に対してコールされてから、処理がブロック601から続行される。そのプロパ
ティ名がInterfaceでなければ、そのプロパティ名は、ブロック605に示すよ
うにImplementationであるので、テストが判定ブロック606で行なわれ、IsIn
line属性が真であるかどうかが判断される。そうであれば、参照のコピーがInte
rfaceCompileListに入れられ、その参照で関数AddClientsが機能ブロック607
でコールされてから、処理がブロック601から続行される。そうでなければ、
そのプロパティ名はImplementationでなければならず、そのIsInline属性は偽で
なければならないので、参照のコピーが機能ブロック608でImplementationCo
mpileListに入れられてから、処理がブロック601から続行される。
関数CreateCompileListsの擬似コードは次のとおりである。
関数AddCleintsは、パラメータ参照クライアント・プロパティ内の各参照ごと
に、参照を調べ、そのBuildStateがCompiledであれば、参照のBuildStateをUnce
rtainにセットし、参照のコピーを該当のCompileListに追加し、その参照に対し
てAddClientsをコールする。このプロセスは、ChangeListのクライアント・クロ
ージャ(Client Closure)の作成と呼ばれる。クライアント・クロージャは、構築
の結果として、再コンパイルが必要になるコンポーネントのサブセットを表わし
ている。実際には、構築の進行と共にコンパイラによって生成される従属関係と
変更は、クライアント・クロージャ内の多くのコンポーネントに対して、できる
かぎりコンパイルを避けるように使用される。
以下は、AddClients関数の擬似コードである。
インタフェースを処理するメソッド
これは構築プロセスの第2ステージである。InterfaceCompileList上のアイテ
ムがとり得るBuildStatesはCompliled.BeingCompiled、NeedToCompile、Uncert
ain、CompileErrorまたはUncertainErrorである。
InterfaceCompiledListは、図7のフローチャートに示すように空になるまで処
理される。このプロセスにはブロック701から入り、そこで、参照がInterfac
eCompileListの先頭から選択される。リストに参照が残っていなければ、処理は
ブロック702で完了する。その参照に関連するコンポーネントのインタフェー
スBuildStateがブロック703に示すように、Compiled、CompileErrorまたはUn
certainErrorであれば、参照がリストの先頭から除去され、処理はブロック70
1で続行される。参照に関連するコンポーネントのインタフェースBuildStateが
、ブロック704に示すようにBeingCompiledまたはNeedToCompileであれば、コ
ンポーネントのBuildStateは機能ブロック705でBeingCompiledにセットされ
る。
次に、Compile関数(これはコンパイラ42を呼び出す)がコンポーネントの
インタフェースに対してコールされる。この関数はAbort(打切り)、Done(完
了)およびError(エラー)の値の1つを返却する。返却された値がブロック7
06でAbortであれば、処理はブロック701から続行される。返却された値が
ブロック707でDoneであれば、コンポーネントのインタフェースBuildStateは
Compiledにセットされ、参照がブロック708でリストの先頭から除去されてか
ら処理がブロック701から続行される。返却された値がブロック709でErro
rであれば、コンポーネントのインタフェースBuildStateがCompileErrorにセッ
トされ、参照がリストの先頭から除去され、関数PropageteErrorが機能ブロック
710で、コンポーネントに対してコールされてから、処理がブロック701か
ら続行される。参照に関連するコンポーネントのインタフェースBuildStateがUn
certainであるとブロック711で判断されていれば、コンポーネントのBuildSt
ateは機能ブロック712でBeingCompiledにセットされる。
次に、ConditionallyCompile関数(これはコンパイラ42をコールする場合と
コールしない場合がある)がコンポーネントのインタフェースに対してコールさ
れる。この関数も、Abort、DoneまたはErrorの値の1つを返却する。返却された
値がAbortであれば、処理はステップ1から続行される。返却された値がブロッ
ク713でDoneであれば、参照が機能ブロック708でリストの先頭から除去さ
れ、処理がブロック701から続行される。返却された値がブロック714でEr
rorであれば、参照がリストの先頭から除去され、関数PropagateErrorが機能ブ
ロック715でコンポーネントに対してコールされてから、処理がブロック70
1で続行される。
ProcessInterface関数の擬似コードは次のとおりである。
関数PropagateErrorは、コンポーネントに対応する参照をプロジェクトのInte
rnalErrorListに追加し、コンポーネントのクライアント・リスト上のすべての
参照について、以下のことを実行する。参照のBuildStateがCompileErrorまたは
UncertainErrorであれば、プロセスは次の参照から続行される。参照のBuildSta
teがNeedToCompileであれば、プロセスは、そのBuildStateをCompileErrorにセ
ットし、参照をInternalErrorListに追加し、その参照でPropagateErrorをコー
ルしてから、次の参照から続行する。参照のBuildStateがUncertainであれば、
プロセスはそのBuildStateをUncertainErrorにセットし、参照をInternalErrorL
istに追加し、その参照でPropagateErrorをコールしてから次の参照から続行す
る。
関数PropagateErrorの擬似コードは次のとおりである。
インプリメンテーションを処理するメソッド
これは構築プロセスの第3ステージである。ImplementationCompileList内の
各参照は図8のフローチャートに示すように処理される。プロセスにはブロック
801から入り、そこで参照がImplementationCompileListの先頭から選択され
る。リストに参照が残っていなければ、処理はブロック802で完了する。参照
のBuildStateがUncertainであるとブロック803で判断されていれば、参照のB
ui1dStateが機能ブロック804でCompiledにセットされてから、処理がブロッ
ク801から続行される。参照のBuildStateがNeedToCompileであるとブロック
805で判断されていれば、コンポーネントは機能ブロック806でコンパイル
される。コンパイラ42から返却される可能性のある値としては、DoneとError
がある。返却された値がブロック807でDoneであれば、参照のBuildStateが機
能ブロック804でCompiledにセットされてから処理がブロック801から続行
される。返却された値がブロック808でErrorであれば、参照のBuildStateがC
ompileErrorにセットされ、関数PropagateErrorが機能ブロック809でコンポ
ーネントに対してコールされてから、処理がブロック801から続行される。参
照のBuildStateがCompileErrorまたはUncertainErrorであれば、なにも行なわれ
ない。ここで注意すべきことは、インプリメンテーションの処理がこのステージ
では順序に依存しないのは、そのIsInline属性が真であるインタフェースまたは
インプリメンテーションだけに依存することができ、これらはすでに処理されて
いるからである。
ProcessImplementationsの擬似コードは次のとおりである。
構築プロセスをサポートするコンパイラ
コンパイラ42はCompile関数からコールされ、これらの2つはシノニム(同
義語)として使用できる。コンパイラ42はソース・テキストを処理し、起こり
得る外部コンポーネントの名前を識別する。コンパイラ42は、次に、すべての
コンポーネントへの参照リストを取得する。コンパイラはコンポーネント種類な
どの言語固有の知識を使用してリストから参照を除去することができる。次に、
コンパイラはテキストに示された各外部コンポーネントごとにGetDeclarationと
呼ばれる関数をコールする。Compile関数はコンポーネントにエラーがあれば、
それをクリアしてからコンパイラ42を呼び出す。これにより、Errorsプロパテ
ィからのエラーをクリアし、プロジェクトのErrorListプロパティから参照を除
去する。
コンパイラは、まず、GetDeclaration関数をコールする。これは図9のフロー
チャートに示されている。GetDeclaration関数はAbort、Done、Circulardepende
ncyまたはErrorの値の1つを返却し、さらに、デクラレーションのデータを返却
する場合もある。プロセスにはブロック901から入り、そこで各参照はそのBu
ildStateが調べられる。処理すべき参照が残っていなければ、ブロック902に
示すように、処理は完了し、リターンが行なわれる。コンポーネントのBuildSta
teがブロック903に示すようにCompiledであれば、関数は機能ブロック904
でDoneを返却し、ストアされたデクラレーション・データも返却されてから、処
理はブロック901から続行される。コンポーネントのBuildStateがブロック9
05に示すように、NeedToCompileまたはUncertainであれば、コンポーネントに
対応する参照が機能ブロック906でInterfaceCompileListの先頭に追加され、
関数が機能ブロック907でAbortを返却してから、処理はブロック901から
続行される。この場合には、デクラレーション・データは返却されない。コンポ
ーネントのBuildStateがブロック908に示すようにBeingCompiledであれば、
関数が機能ブロック909でCirculardependencyを返却してから処理はブロック
901から続行される。この場合も、デクラレーション・データは返却されない
。コンポーネントの
Bui1dStateがブロツク910に示すように、CompileErrorまたはUncertainError
であれば、関数が機能ブロック911でErrorを返却してから処理はブロック9
01から続行される。この場合も、デクラレーション・データは返却されない。
GetDeclaration関数の擬似コードは次のとおりである。
GetDeclarationをコールしたあと、コンパイラは次のように続行する。返却さ
れた値がAbortであれば、コンパイラは処理を中止して、値Abortを返却しなけれ
ばならない。別のインプリメンテーションでは、コンパイラはコンパイルを一時
中止し、返却されたコンポーネントをコンパイルしたあと再始動されるか、断念
されることになる。このためには、コンパイラを再入可能(リエントラント)に
する必要があるが、それ以外は、上述したプロシージャに基本的な変更を加える
必要はない。返却された値がCompiledであれば、コンパイラは処理を続行するこ
とができる。Declarationが使用されている場合は、これはSourceReference
従属関係を構成するので、コンパイラはその従属関係とその性質の両方を記録に
とっておく必要がある。返却された値がCirculardependencyまたはErrorであれ
ば、コンパイラは処理を中止し、コンポーネントに対してSetError関数をコール
し、値Errorを返却しなければならない。コンパイラは、別のエラーを見つける
ために任意的に処理を続行してから中止することもできる。
GetDeclarationへのコールからCompiledが返却されたときは、コンパイラは従
来と同じようにソース・テキストの処理を続けることになる。処理の途中でエラ
ーが見つかると、コンパイラはコンポーネントでSetError関数をコールし、値Er
rorを返却する。エラーが見つからなければ、コンパイラは値Doneを返却する。
コンパイラがインタフェースを処理していたときは、Declarationプロパティの
新しい値をストアする。
エラーを処理するメソッド
コンパイラがコールされてインタフェースまたはインプリメンテーションをコ
ンパイルする前に、エラーがあれば、そのエラーがクリアされる。これは、すべ
てのエラー・メッセージを最新のものにするために行なわれる。インタフェース
とインプリメンテーションの間には組み込まれた従属関係があり、エラーがプロ
パゲートされることから、インタフェースとインプリメンテーションの両方で同
じ構築を行なっているときコンパイラ・エラーが起こることはあり得ない。
コンパイラはエラーを出会うと、SetError関数をコールし、エラーの発生箇所
とエラーを記述したメッセージを含む、エラーに関する情報をエラーのあるコン
ポーネントへ送り返す。この情報はErrorsプロパティと、コンポーネントの該当
ソース・プロパティ(インタフェースまたはインプリメンテーション)とにスト
アされる。また、参照がProjectによって維持されているグローバル・エラー・
リストにストアされるので、すべてのエラーが都合よくアクセスできるようにな
っている。
エラーは従属するコンポーネントにプロパゲートされるので、これらのコンポ
ーネントをあとでコンパイルしないですむ。これらのコパイルは失敗すること
が分かっているからである。さらに、構築はエラーが見つかった後も続けられ、
それ自体にエラーがないことが明らかであるか、あるいはエラーのあるコンポー
ネントに従属しているコンポーネントを可能な限り多く、正しく構築することに
なる。
SetError関数は、コンパイラ42から送られてきたエラー・メッセージを受け
取ると、該当のプロパティ(インタフェースまたはインプリメンテーション)に
対応するErrorsプロパティの中にエントリを作成する。また、エラーに対応する
プロジェクトのErrorListプロパティの中にもエントリを作成する。このように
作成された2つのエントリは同じキーを共有するので、これらは「リンク」され
たままになっている。この関数は、プログラム・ソース内のエラーの位置も、「
スティッキ・マーカ(sticky marker)」を使用して記録しておくのが代表的であ
り、このマーカは、あとでユーザが編集を行なうとき同じ文字範囲に付着したま
まになっている。
コンパイラはソース・テキストの処理を正常に完了すると、オブジェクト・コ
ードを生成し、その結果のオブジェクト・コードをオブジェクト・コード・プロ
パティにストアする。オブジェクトをストアすると、そのオブジェクトは以下で
説明するように、増分的にリンクされていく。
ここで、コンパイラはコンポーネントのSourceReferenceおよび各SourceRefer
enceのClientsプロパティを更新する。例えば、コンポーネントAのSourceRefer
ence内の、例えば、コンポーネントBへの各参照ごとに、コンポーネントBのCl
ientsプロパティ内のコンポーネントAへの対応する参照(これは同じ従属関係
情報をもっている)が必要になる。
コンパイラは、デクラレーションがその以前の値からどのように変化したかを
記述した変更(change)を生成する。コンパイラはコンポーネントに対して関数Pr
opagateChangeをコールして、計算した値をその関数へ渡す。次に、コンパイラ
はデクラレーションの新しい値をセットする。関数PropagateChangeはその変更
を、コンポーネントのClient List内の各参照の従属関係と突き合わせる。参照
されたコンポーネントが変更によって影響を受けたことが、その突合わせで分か
り、そのBuildStateがCompileErrorまたはUncertainErrorでないと、その
BuildStateはNeedToCompileにセットされる。
コンパイラはSetError関数を使用して、種々のフォームの警告メッセージまた
は提案を出すことがある。その場合、警告メッセージだけが返されたときは、Co
mpile関数は、Doneを返却しているはずである。この警告メッセージはErrorプロ
パティに追加され、参照がプロジェクトのErrorListプロパティに追加される。
しかし、その他の場合は、コンパイラは正常に完了したものと扱われる。該当の
BuildStateはCompiledにセットされ、エラーはプロパゲートされない。警告また
は提案だけが出されたときは、プログラムは完全に、しかも正しく構築されるこ
とになる。
コンポーネントを条件付きでコンパイルするプロセス
関数ConditionallyCompileのフローチャートは図10Aと図10Bに示されて
いるが、以下、これらの図を参照して説明する。コンポーネントAのSourceRefe
rences内の各コンポーネントBはブロック1001で処理される。すべてのコン
ポーネントBがブロック1002に示すように処理されると、処理はコンポーネ
ントBに関して完了したことになり、プロセスは図10Bへ移ってコンポーネン
トAをコンパイルする。コンポーネントBのBuildStateがブロック1003に示
すようにBeingCompiledまたはNeedToCompileであれば、コンポーネントのBuildS
tateはBeingComipledにセットされ、コンポーネントは機能ブロック1004で
コンパイルされる。Compile関数からは、Done、AbortまたはErrorの値の1つが
返却され得る。値Doneがブロック1005で返却されると、処理はブロック10
01から続行される。
返却された値がブロック1006でAbortであれば、関数は中止され、Abortが
機能ブロック1007で返却される。返却された値がブロック1008でError
であれば、オリジナル・コンポーネントのBuildStateはUncertainErrorにセット
され、関数は中止され、Errorが機能ブロック1009で返却される。コンポー
ネントBのBuildStateがブロック1010に示すようにUncertainであれば、Bui
ldStateはBeingCompiledにセットされ、コンポーネントは機能ブロック
1011で条件付きでコンパイルされる。この場合も、ConditionallyCompile関
数からDone、AbortまたはErrorの値の1つが返却され得る。値Doneがブロック1
005で返却されたときは、処理はブロック1001から続行される。Errorが
ブロック1012で返却されたときは、コンポーネントのBuildStateはUncertai
nErrorにセットされ、コンポーネントAはInterfaceCompileListから除去され、
PropagateError関数が機能ブロック1014でコールされてから、関数は中止さ
れる。Abortがブロック1015で返却されたときは、Abortが機能ブロック10
07で返却されてから関数は中止される。
次に、図10Bを参照して説明する。すべての参照の処理を終えていれば、す
べてのBuildStateはCompiledになっている。しかし、Sourcereferencesの1つが
この時点までの処理の間に変更をコンポーネントにプロパゲートしている可能性
があるので、そのBuileStateがBeingCompiledまたはNeedToCompileのどちらかに
なっていることがある。従って、コンポーネントAのBuildStateがブロック10
16で判断される。BuildStateがブロック1017に示すようにNeedToCompile
であれば、BuildStateはBeingCompiledにセットされ、コンポーネントAは機能
ブロック1018でコンパイルされる。コンパイラからは、ErrorまたはDoneの
どちらかが返却される可能性がある。Abortが出されることがないのは、すべて
のSourceReferencesがこのステージでコンパイルされているからである。Error
がブロック1019で返却されると、BuildStateはCompileErrorにセットされ、
Errorが機能ブロック1020で返却される。Doneがブロック1021で返却さ
れると、BuildStateはCompiledにセットされ、Doneが機能ブロック1023で返
却される。コンポーネントAのBuildStateがブロック1024に示すようにBein
gCompiledであれば、BuildStateはCompiledにセットされ、Doneが機能ブロック
1023で返却される。
関数ConditionallyCompileの擬似コードは次のとおりである。
エラーを事後処理するメソッド
エラーを事後処理するメソッドは構築プロセスの第4ステージである。構築期
間にエラーが発生すると、構築の終了時に関数PostProcessErrorsがコールされ
る。InternalErrorList内の各参照ごとに、参照のBuidStateがCompileErrorであ
れば、BuildStateはNeedToCompileに変更される。参照のBuildStateがUncertain
Errorであれば、BuildStateはCompiledに変更される。
InternalErrorList上のすべての参照が処理されると、リストからすべてのエ
ントリがクリアされる。プログラマの便宜のために、プロジェクトのErrorList
がいずれかのエントリを含んでいると、ウィンドウまたはBrowser(ブラウザ)
がプロジェクトのErrorListに対してオープンされる。
PostProcessErrors関数の擬似コードは次のとおりである。
HOOPSの使用
本発明による人間指向オブジェクト・プログラミング・システム(Human Orien
ted Object Programming System‐HOOPS)は、新しいプログラムを構築するのか
、既存のプログラムを編集するのかに応じて、プロジェクト名または既存のプロ
ジェクト名を入れると、コンピュータ上で始動する。HOOPSが始動すると、
ウィンドウがオープンし、図11に示すものと類似する初期スクリーンが表示さ
れる。HOOPSがオープンする初期スクリーンは、プロジェクト・コンポーネ
ントのMembersプロパティとその直属メンバを表示する。初期には直属メンバだ
けが表示されるが、プロジェクト・コンポーネントから始まるすべてのコンポー
ネントを表示するために同じウィンドウが使用される。図11に示す例では、「
給与計算(Payroll)」と名づけたプロジェクトがインポートされている。
ビュワー
ビュワー(viewer)とは、コンポーネントの特定のプロパティを表示することを
目的としたグラフィカル表現である。しかし、そのプロパティを表示する過程で
は、ビュワーは、他のプロパティからのデータを含む、附属的情報を表示する必
要が起こる場合がある。ビュワーは入力と出力をもっている。入力は少なくとも
コンポーネントとプロパティを指定している。プロパティの情報のサブレンジを
指定することも可能である。出力は最低限でもコンポーネントを指定している。
プロパティと、プロパティのデータのサブレンジを指定することも可能である。
出力は、ユーザのアクションとシステム内のステート変化に応じて、時間の経過
と共に変化して行く。
ビュワー・リストはビュワー仕様の名前付きリストであり、そこでは各仕様は
ビュワー名とインプリメンテーション・クラスを定義している。空のビュワー・
リストと呼ばれる特殊なビュワー・リストがあり、このリストにはビュワー仕様
が入っていない。ビュワー・リスト名は各プロパティと関連づけられている。プ
ロパティは、リスト内で指定されたビュワーのいずれかによって表示することが
できる。プロパティが空のビュワー・リストと関連づけられているときは、その
プロパティにはビュワーがないので、そのプロパティは表示不能とみなされる。
好ましいビュワーは各プロパティと関連づけられている。好ましいビュワーは、
プロパティに関連づけられたビュワー・リストに指定されたビュワーの1つでな
ければならない。好ましいビュワーは、表示目的のために各コンポーネントと関
連づけられている。
ペイン
ビュワーはペイン(pane)内に表示される。ペインは入力と出力をもっている。
入力は最低限でもコンポーネントを指定している。コンポーネントのプロパティ
と、プロパティのデータのサブレンジを指定することも可能である。出力は最低
限でもコンポーネントを指定しており、任意的に、プロパティと、プロパティの
データのサブレンジを指定している。出力は、ユーザのアクションとシステム内
のステート変更に応じて、時間の経過と共に変化して行く。
ペインは、ビュワーの入力を定め、一般的にはペイン入力からビュワーの入力
を派生することによって行う。この派生は、動的にはシステムのステートに基づ
いて、静的にはペインのインプリメンテーションを変更することにより、ペイン
ごとに異なる。最も単純な派生では、ビュワーの入力はペインの入力と同じにな
っている。同様に、ペインの出力は、ビュワーのペインの出力から派生される。
この派生の性質は、動的にはシステムのステートに基づいて、静的にはペインの
インプリメンテーションを変更することにより、ペインごとに異なる。最も単純
な派生では、ペインの出力はそのビュワーの出力と同じになっている。
ウィンドウ
ペインはウィンドウに表示される。ウィンドウは1つまたは2つ以上のペイン
に細分化されている。ウィンドウ内のペインのレイアウトと数は、ユーザが動的
に制御することができる。好適実施例では、ペイン・スプリッタ・コントロール
(pane splitter control)が用意されているので、複数のペインの作成と管理が
容易になっている。コントロールは単一のペインを1つまたは複数のペインに分
割するために使用される。
図12は本発明によるブラウザ(browser)を示す図である。HOOPSでのす
べてのウィンドウはブラウザである。ブラウザは、プロジェクト内の情報を眺め
るための一時的表示および編集ツールである。これらは、ウィンドウのクローズ
(close)アイコン1210をクリックすると、いつでも削除することができる。
ブラウザに入っている間に、プロジェクトに行なった変更は自動的にセーブされ
る。ブラウザはプロジェクト・ルート・コンポーネント(project root componen
t)1200をもち、これはそのオープン時に指定される。コンテナ・コンポーネ
ントの例は1202に示されており、選択されたコンポーネントは1203に示
され、ペイン・プロパティ・ロック1211、ペイン・プロパティ・ポップアッ
プ・メニュー・コントロール1220および拡大(expand)または縮小(collapse)
コントロールは1204に示されている。このコントロールを使用すると、ユー
ザはペインを特定のプロパティにアンカ(anchor)することができる。入力コンポ
ーネントのプロパティ2130はペイン1260に表示され、各ペーン1260
は1260に示すように、1つのプロパティ・ビュワー1205を表示するか、
ブランクになっている。新しいペインは、ペインの右上隅のスプリット(split)
アイコン1250の1つを選択することでブラウザに追加される。ペイン・スプ
リッタ・コントロール1250を使用すると、ユーザはペインを2つのペインに
分割し、ペインの大きさを制御することができる。ペインとブラウザ・ズーム・
ボックス1242、1243があり、これを使用すると、ユーザはウィンドウ一
杯を埋めるようにペインを動的にズームすることができる。また、これを使用す
ると、ユーザはズームしたペインを元の寸法に戻すようにアンズームすることが
できる。水平方向と垂直方向のスクロール・コントロール1252も用意されて
いるので、ビュワーの内容をペイン内でスクロールすることができる。ペイン・
タイトル・バー1241には、ペインに表示されたコンポーネントとプロパティ
の名前が表示される。ビュワー・メニュー1251
も用意されているので、ユーザは選択したプロパティを表示するために使用され
るビュワーを選択することができる。ビュワー・メニューには、選択したプロパ
ティに関連するビュワー・リストの中で指定された各ビュワーのエントリがある
。
ペインと共に表示される特定のビュワーを組合わせて定める3つの要因として
、コンポーネント、そのコンポーネントのプロパティ、そのプロパティのビュワ
ーの3つがある。コンポーネントはペインの入力から派生される。プロパティも
ペインの入力から派生され、あるいはユーザによってオーバライドされる。ペイ
ン入力が入力コンポーネントの特定のプロパティを指定していれば、このプロパ
ティは、プロパティの関連ビュワー・リストによって定義された通りに、適格ビ
ュワーのセットを定める。ペイン入力がプロパティを指定していなければ、表示
されるプロパティはコンポーネントのデフォルト・プロパティである。
ユーザは、ペインを表示し、またはペインを特定のプロパティにアンカするた
めの別の入力コンポーネント・プロパティを選択することにより、選択したプロ
パティをオーバライドすることができる。アンカされたときは、ペインは入力コ
ンポーネントに関係なく、アンカされたプロパティを表示する。ペインのコンポ
ーネントまたはプロパティが変わると、新しいビュワーがペインに表示される。
このビュワーはプロパティのデフォルト・ビュワーであるが、ユーザは、表示さ
れたプロパティに関連するビュワー・リストにリストされたアイテムの1つに、
そのビュワーをあとで変更することが可能である。
新しいペインが作成されたときは、新しいペインに分割されているペインから
デフォルトのワイヤリング(wiring)が作成される。ワイヤリングは、ペイン間を
論理的に関係づけたものである。ペインはゼロ個または1個のワイヤ入力と、出
力としてゼロ個または1個以上のワイヤをもつことができるが、ワイヤリングは
ループを作ることができない。コンポーネントがペインで選択されると、その選
択はプロジェクト内のコンポーネントへの参照に変換され、そのペインから出た
ワイヤのデスティネーションへの新しい入力となる。ワイヤリングは、メニュー
・バーから選択されたBrowserメニューからTurning on Wiringを選択することに
よりオンにすることができ、オンになると、図13に示すように、上か
ら重ね合わされたグラフィック・ワイヤが表示されることになる。このディスプ
レイを使用すると、新しい入力ロケーションをマウスでクリックダウンしてター
ゲット・ペインまでドラッグすることにより、2ワイヤ間のワイヤリングを変更
することができる。
ワイヤはその入力を変換してからワイヤ出力を生成する。コネクションを確立
するために使用されるワイヤのインプリメンテーションは種々のものがあり、各
インプリメンテーションに異なるタイプの変換を組み込むことができる。最も単
純なインプリメンテーションでは、ワイヤの入力は未変更のままワイヤからその
出力へ渡される。ペインの出力を任意の数のワイヤに接続すると、単一のペイン
が任意の数の他のペインの入力を制御するメカニズムが得られる。ユーザはペイ
ン間のコネクションを動的に制御することができ、コネクションはウィンドウ間
を結合するように作ることができる。
Members(メンバ)、Clients(クライアント)およびReferences(参照)のように
、多くのビュワーでは、コンポーネントはその名前とアイコンで区別することが
できるが、これらがコンポーネントの種類別に異なっているからである。他のビ
ュワーでは、コンポーネントの名前は、Source(ソース)やImplementation(イ
ンプリメンテーション)などのテキストで現われるだけである。コンポーネント
階層は、Membersプロパティ・ビュワーでコンテナ・コンポーネントを拡大し、
縮小することによりブラウズしていくと、ツリー・ビューが得られる。その例を
示したのが図14である。コンポーネントのサブツリーの1レベルは、コンポー
ネントの円形トグル・スイッチをクリックすることにより拡大または縮小するこ
とができる。アイコンがあれば、そのアイコンをクリックすることにより、ある
いはその名前をテキスト・ディスプレイで選択することによってコンポーネント
がビュワーで選択されると、グローバル・メニュー・バー上のPropertyメニュー
は、そのタイプのコンポーネントのプロパティをリストするように調整される。
任意のコンポーネントの任意のプロパティは、ビュワーでそのコンポーネントを
選択し、次に、Propertyメニューからプロパティを選択することにより表示する
ことができる。これにより、単一のビュワーを収めている新しいブラウザがオー
プンし、選択したコンポーネントの選択したプロパティが表示される。
コンポーネントは、新しいコンポーネントをどこに作成し、どの種類のコンポ
ーネントにするかを指定することにより、MembersまたはInterfaceビュワー内か
ら作成される。新しいコンポーネントのロケーションは、既存のコンポーネント
を選択するか、あるいはコンポーネント間に挿入ポイントを置くことにより指定
される。どの種類のコンポーネントが作成されるかは、Newビュワー・メニュー
からどのメニュー・アイテムを選択したかによって決まる。すべての編集は自動
的にストアされる。変更されたコンポーネントと、その変更の影響を受けたクラ
イアントだけがコンパイルされる。再コンパイルされたコンポーネントは、Buil d
メニューからShowComponents Builtメニュー・アイテムを選択すると表示され
る。最後の構築以後に変更されたコンポーネントを見るには、Buildメニユーか
らShow Components Changedを選択する。BuildメニューからBuildを選択すると
、プログラムがコンパイルされ、リンクされる。Build & Runメニューはプログ
ラムの実行も行なう。
図15から図18までは、コンポーネントを編集している途中で表示されるス
クリーンの一部を示している。図15は、"main"と名づけた関数のインプリメン
テーションのソース・コードのディスプレイを示している。図16では、関数"m
ain"はnumberDisksを"7"から"9"に変更することにより編集されている。ここで
、プログラマが図17に示すBuildメニューからShow Components Changedを選択
すると、図18に示すものと似たブラウザが表示される。
"Implementation Changes"ビュワー(右側)では、関数"main"が表示され、それ
が変更されたことを示している。
オブジェクト指向リンキング
以下では、HOOPSリンキング・メカニズムの重要な特徴を列挙し、そのあ
とで、好適実施例の実行時環境の背景を説明し、リンキングが行なわれるコンテ
キストを提供するHOOPSデータベースについて説明する。最後に、コンポー
ネント・リンケージについて説明すると共に、コンポーネントがHOOPSコン
パイラ、HOOPSデータベース、およびシステム・ローダとどのようなやりと
り(インタアクション)をするかについて好適実施例を参照して説明する。
リンカの特徴
・ リンキングはコンパイル・プロセス期間に行なわれる。余分のリンキング・
パスはない。
・ 構築期間には、新しくコンパイルされた関数およびデータだけが再リンクさ
れる。
・ 増分開発期間には、一部の共有ライブラリ・スペースとスピードとの間にト
レードオフの関係がある。
・ コンパイラはコンポーネントおよびプロパティとやりとりして、すべてのオ
ブジェクト・コードとその他のリンキング情報を生成する。
・ プログラムがリリースの準備状態になったとき、"publish"ステップは、増
分開発期間に使用された余分のスペースと情報を除去し、アプリケーションをH
OOPSから切り離す。
・ リンカは、次のような理由で拡張可能である。
1)コンパイラは、リンカが通常では取り扱わない新しいフィックスアップ
(fixup)を指定できる。
2)loadModuleの新しいクラスが使用できる。
・ 一時中止(suspend)されたプログラムは修正したあとで、再ロードすること
なく実行を再開できる。(ある種の変更は再ロードが必要になる。)
背景
リンカはHOOPSの内部で動作して、ローダによって使用されるファイルを
作成する。リンカ・メカニズムを理解する上で重要なことは、実行時システムと
HOOPSの両方がもつ独特な側面を理解することである。
実行可能ファイル(executable file)は、他の実行時システムとはまったく異
なった仕方で実行時システムとやりとりする。通常は、ローダ・プログラムは実
行可能ファイルのフォーマットを理解していなければならない。実行可能ファイ
ルは、プログラムの様々な側面を記述した、公知のフィールドを有している。そ
のフィールドには、必要なメモリ量、mainのアドレス、再配置情報がロード時に
必要であればその情報、および実行可能ファイルにパッケージされているデバッ
ガ情報といったようなものがある。好適実施例の実行時では、ローダは抽象TLoa
dModuleクラス・インタフェースを通して実行可能ファイルとやりとりする。TLo
adModuleには、すべてのローディング・オペレーションに関するプロトコルが用
意されている。例えば、必要メモリ量の指定、メタデータ情報の作成、他の共有
ライブラリとのリンクといったオペレーションは、すべてTLoadModuleのメソッ
ドによって行なわれる。このアプローチによると、ロード・モジュールはローデ
ィング要求に様々な方法で応じることができる。
実行時定義は共有ライブラリを提供するので、クロスライブラリ・コールをロ
ード時に解決することができる。ライブラリはどのメモリ・ロケーションにもロ
ードされることがあるので、すべてのコードは位置から独立しているか、あるい
はロード時にパッチしなければならない。位置独立コードであるほかに、他の共
有ライブラリへのコールは、ロード時に解決しなければならない。これは、外部
ライブラリがメモリのどこに置かれるかを、つまり、相対オフセットをスタチッ
ク(静的)リンカが知らないからである。
各TLoadModuleクラスはクロスライブラリ・コールを様々な方法で実現できる
が、標準的メソッドでは、ロード時にパッチされるリンケージ・エリアを介して
ジャンプしている。このリンケージ・エリアは、ライブラリ間の間接的ジャンプ
・テーブルの働きをする。外部コールはリンケージ・エリアへJSRし、そのあ
と、リンケージ・エリアはコールされた関数へJMPする。内部コールはコール
された関数へ直接にJSRすることができる。内部コールとクロスライブラリ・
コールの例は図19に示されているが、これは下述する。
f1()1900へのコールは内部コールであるので、JSRはf1()1910へ直接に移る
。f2()1920へのコールはクロスライブラリ・コールであるので、コールはロード
時にパッチされて外部リンケージ・エリアへ移る。
HOOPS環境には、リンカのために独特なコンテキストも用意されている。
プログラムはコンポーネントのコレクション(集合)として表わされる。各コン
ポーネントは1組のプロパティが関連づけられている。各コンポーネントのコン
パイル期間に、コンパイラはそのコンポーネントに適用可能なプロパティを生成
し、ストアする。HOOPS構築プロセスは、すべてのインタフェース(デクラ
レーション)がインプリメンテーション(定義)の前にコンパイルされるように
コンポーネントの構築を順序づける。
HOOPSのプロジェクトは複数のライブラリ・コンポーネントで構成するこ
とができる。すべてのソース・メンバはこれらのライブラリ・コンポーネントの
1つのメンバである。各ライブラリ・コンポーネントは共有ライブラリの構築を
表わしている。
概要
増分リンキングをサポートし、最終的アプリケーションを可能な限り小さくし
、高速化するために、2種類の異なったロード・モジュールが作成される。開発
期間に、HOOPSはTIncrementalLoadModuleを生成し、それに修正を加える。
ロード・ファイルTStandardLoadModuleがあり、これはアプリケーションのパブ
リッシュ時に作成される。
好適実施例では、開発期間にコードを作成し、更新するためのアプローチが開
示されている。TIncrementalLoadModueをTStandardLoadModuleに変換するために
は、余分の"publish"(パブリッシュ)ステップが必要になる。このステップは
、各関数またはデータ・アイテムが再配置され、パッチされる点で、通常のリン
ク・ステップと非常によく似ている。しかし、外部参照はロード時までは解決さ
れない。
コンパイラとのやりとり
コンパイラはコンポーネントに対するコードを生成すると、そのコードを、オ
ブジェクト・コードをパッチするために使用される1組のフィックスアップと一
緒にオブジェクト・コード・プロパティに引き渡す。コンパイルされたコンポー
ネントはそのオブジェクト・コード・プロパティが埋め込まれている。コンパイ
ラは「オブジェクト・グループ」モデルを使用する。つまり、コンポーネントは
複数タイプのオブジェクト・コードで構成することができる。例えば、関数はそ
れと関連づけられた私有静的データ・エリアを、その静的データ・エリアのデス
トラクタ・シーケンス(destructor sequence)と一緒にもつことも可能である。
静的データ・アイテムはそれと関連づけられたコンストラクタ(constructor)と
デストラクタ・シーケンスをもつことにより、それを実行時に初期化することが
できる。
例えば、次のようなコンポーネントがコンパイルされたとする。
コンパイラはオブジェクト・コードの2つの断片を生成し、それらをコンポー
ネントTFoo::Printと関連づける。関数のオブジェクト・コードと、静的変数tim
esCalledの4バイト私有データが得られる。
これを示すと、次のようになる。
オブジェクト・コードと一緒に、コンパイラはコードが再配置されるとき適用
すべき異なるフィックスアップを指定する。これらを示すと、次のようになる。
timesCalled @ offset OxOcへの参照
cout @ offset Ox14への参照
ostream::operator<<(const char *)@ offset Ox18への参照
ostream::operator<<(int)@ offset Ox22への参照
ostream::operator<<(const char *)@ offset Ox2cへの参照
timesCalled @ offset Ox34への参照
上記に示すように、フィックスアップはこの同一コンポーネント(私有静的変
数timesCalled)に関連するオブジェクトの他の断片、または他のコンポーネン
ト(coutなど)への参照を指定することができる。
コンパイラがコンポーネントに関連する全セットのオブジェクトとフィックス
アップの指定を完了すると、オブジェクト・コード・プロパティはその断片のす
べてを再配置し、同時に自身をリンクする。すべてのコンポーネントがコンパイ
ルされたあと実行される第2リンク・パスはない。各コンポーネントがコンパイ
ルされると、コンポーネントも完全にリンクされる。
フィックスアップ・リスト
リンキングは、基本的には、フィックスアップ・リストを繰り返していき、コ
ードを適切な方法でパッチすることである。異種タイプのフィックスアップがク
ラス階層を通して指定され、各フィックスアップはパッチ値をどのように計算す
るかを知っている。例えば、pc相対フィックスアップは、そのロケーションの
アドレスと、それが参照するコンポーネントとの差を計算しなければならないこ
とを知っている。絶対フィックスアップは、計算をロード時まで延ばさなければ
ならないことを知っている。リンカは1組のフィックスアップ・クラスを指定し
ているのに対し、新しいコンパイラは新しいタイプのフィックスアップを指定す
ることができる。図20は、好適実施例によるフィックスアップ・クラスのセッ
トを示している。
アドレス計算
各コンポーネントをコンパイルと同時にリンクするとき起こる主要問題は、そ
れが参照する一部のコンポーネントがまだコンパイルされていない可能性がある
ことである。
各ソース・コンポーネントは正確に1つのライブラリ・コンポーネントのメン
バである。各ライブラリ・コンポーネントと関連づけられているのがロード・モ
ジュール・プロパティである。ロード・モジュール・プロパティは、共有ライブ
ラリに属するすべてのコンポーネントのクリアリング・ハウス(clearing house)
の働きをする。フィックスアップはパッチ値を計算する準備状態になると、コン
ポーネントのアドレスをロード・モジュール・プロパティに問い合わせる。ロー
ド・モジュール・プロパティは、コンポーネントがコンパイルされたかどうかを
調べる。コンパイルされていれば、コンポーネントのアドレスを返却する。しか
し、コンポーネントがまだコンパイルされていなければ、ロード・モジュール・
プロパティはコンポーネントのタイプに応じて2つのアクションを実行する。
コンポーネントのタイプがデータ・コンポーネントであれば、定数アドレスを
返却するだけである。コンポーネントのタイプが関数コンポーネントであれば、
その関数のためのリンケージ・エリアを作成し、そのリンケージ・エリアのアド
レスを返却する。
オブジェクトの配置
上述したように、各コンポーネントはコンパイルされるとき、共有ライブラリ
内の位置が割り当てられる。これが行なわれるとき、すべての参照が統一性を保
つようにある種の余分の作業が必要になる。
コンポーネントがデータ・コンポーネントであれば、その位置がすべてのクラ
イアントに通知される。いくつかのクライアントは初期状態で一時的アドレスと
リンクされている可能性があるので、このプロセスはすべてのクライアントをク
リーンアップして、クライアントに正しいアドレスを与える。コンポーネントが
関数コンポーネントであれば、その関数のためのリンケージ・エリアは新しいア
ドレスで更新される。以上から理解されるように、この2スタイル・アプローチ
によると、関数は間接的にアクセスされ、データは直接的にアクセスされる。
さらに、余分のスペースが割り振られるので、オブジェクト・コードの将来の
更新が同じエリアを使用できる確率が高くなっている。スペースと構築時間との
間のトレードオフは、特定の環境に見合うものにすることができる。
リンケージ・エリア
上述したように、ロード・モジュール・プロパティに関数のアドレスを要求す
ると、リンケージ・エリアのアドレスが返却される。このことは、すべての関数
参照が間接的であることを意味する。図21は好適実施例によるリンケージ・エ
リアを示している。
以上から理解されるように、内部ライブラリ・コールだけが間接的に内部リン
ケージ・エリアを通して受け渡しされるが、関数へのクロスライブラリ・コール
は間接的にライブラリ・リンケージ・エリアを介して行く(つまり、ライブラリ
B,2100,2110,2115,2120内のf2へのコール)。これは、f2がその内部クライアン
トと外部クライアントを共に更新しなくても位置を変更できるように行なう必要
があり、また、関数ポインタなどのアイテムが正しく働くように統一性を保つよ
うに行なう必要がある。さらに、すべてのバーチャル(仮想)テーブル関数ポイ
ンタは内部リンケージ・エリアも指している。
参照されたが、定義されていない関数は、いずれも共通のUnimplemented()関
数を指している。すべての未コンパイル関数がUnimplemented()関数を指すよう
にすると、プログラマにスタブ関数を作成させなくても、部分的なアプリケーシ
ョンのロードと実行が容易化される。
内部リンケージ・エリアをもつことのもう1つの利点は、このエリアがすべて
の関数に対してボトルネックとなることである。開発期間には、デバッグやパフ
ォーマンス・モニタリングなどの関数トレーシング(追跡)を必要とする作業で
内部リンケージ・エリアを使用すると、好都合である。
増分リンキング
これまでの説明は、増分リンキングの詳細説明の基礎となるものであった。コ
ンポーネントが再度コンパイルされるとき、新しいコンポーネント・サイズは旧
コンポーネント・サイズと比較され、新しいコンポーネントが現在のロケーショ
ンに収まるかどうかが判断される。収まれば、そこにストアされ、オブジェクト
に関連するフィックスアップ・リストが繰り返される。これで、リンキングが完
了する。
新しいコンポーネントのオブジェクト・コードを再配置する必要がある時は、
旧スペースにガベージ(garbage)のマークが付けられ、新しいオブジェクト・コ
ードは新しいエリアに再配置される。そのあと、フィックスアップ・リストが繰
り返される。コンポーネントが関数であれば、リンケージ・エントリが更新され
る。これで、リンキングが完了する。しかるに、コンポーネントがデータ・アイ
テムであるときは、コンポーネントはクライアント・リストを繰り返して、その
コンポーネントへの参照を更新しなければならない。これで、リンキングはデー
タについて完了する。
上記から理解されるように、初期リンクと増分リンクはまったく同じステップ
をたどって行く。増分更新で行なわれる余分のステップは、データ・アイテムが
ロケーションを変更しなければならないときそれを処理することだけである。
オブジェクト・コードのストア
オブジェクト・コード・プロパティとロード・モジュール・プロパティは通常
のコンポーネント・プロパティであるので、他のすべてのプロパティと同じよう
にHOOPSデータベースにストアされる。しかし、オブジェクト・コード・プ
ロパティはオブジェクト・コードを記述しているが、実際のビットを含んでいな
い。実際のビットはロード・モジュール・プロパティが所有するセグメントにス
トアされる。ロード・モジュール・プロパティは4つの異なるセグメントを維持
している。これらのセグメントとは、コード、未初期化データ、初期化データ、
およびリンケージである。
図22は好適実施例によるオブジェクト・コードのストレージを示している。
関数(ここでは、グラフィック・クラス・ボックスのメンバとして示されている
)2200の各々は関連のロード・モジュール・プロパティ2250をも
ち、そこにはグラフィック・オブジェクト2210、2220、2230および
2240と関連づけられた個々のオブジェクト・コードが収められている。すべ
てのコードはそのコンパイル時にリンクされ、変更と増分構築のためのサポート
が用意されているので、ロード・モジュール・プロパティは各セグメント内に割
り振られた、すべてのオブジェクトのマップを維持している。また、余分のスペ
ースを拡張に備えて残しておく。この余分のスペースは一部の仮想メモリ空間を
浪費することになるが、バッキング・ストア(backing store)または実メモリを
占有することはない。アプリケーションを繰返し変更し、構築する過程で、余分
のスペースが使用尽くされたときは、追加のスペースが割り振られるが、影響を
受けたセグメントを再配置する必要があり、そのセグメントから出入りするすべ
ての参照を更新する必要がある。さらに、未初期化データ・セグメントには、バ
ッキング・ストアまたは仮想メモリは割り振られない。このエリアはロードされ
たアプリケーション内で作成され、初期化される。
図23は、好適実施例によるロードされたライブラリを示している。白いセク
ション2300、2310、2320および2330は空きスペースを表わして
いる。4つのセクションは未初期化データ2340、初期化データ2350、コ
ード2360およびリンケージ・エリア2370用である。HOOPSでは、セ
グメントは空間的関係がない。リンキングで使用されるのは、ロードされた関係
となるものであって、HOOPS自体内でもつことができる関係ではない。
ローディング
プログラムを実行するには、ストリーム化TLoadModuleクラスをローダに渡さ
なければならない。プログラム構築期間に、ストリーム化TLoadModuleクラスが
作成される。これがロードされると、HOOPSで作成されたセグメントをロー
ドする。セグメントはロードされたアプリケーションとHOOPSの間で共有さ
れる。これには2つの利点がある。1つは、行なう必要のあるコピー量が大幅に
低減されることであり、もう1つは、プログラムのロード時に増分更新ができる
ことである。
ストリームは最初から最後まで書かなければならない。ローダはストリーム化
TLoadModuleクラスを必要とし、TIncrementalLoadModuleはストリーム化される
情報を減少することを試みるからである。このことは、プログラムの大部分の変
更では、TIncrementalLoadModuleを再ストリーム化する必要がないことを意味す
る。TIncrementalLoadModuleはクロスアプリケーション共有メモリ・ヒープの使
用を通してHOOPSからすべてのマッピング情報を受け取る。その他の場合は
、データ・ロケーション、または関数のサイズが変更されると、新しいTIncreme
ntalLoadModuleを構築し、ストリーム化することが必要になる。図24は、好適
実施例によるロード・モジュールのメモリ・マップを示す図である。ラベル24
00は未初期化データ・エリア、2410は初期化データ・エリア、2420は
リンケージ・エリア、2430はコード・エリアである。これらのエリアは、ロ
ードされたアプリケーション空間2460にマッピングされる。アプリケーショ
ンはストリーム化ロード・モジュール2440を使用して、マップ情報2450
を含んでいる共有メモリ・エリアをアクセスする。
増分更新
増分リンキングは、ロードされたライブラリを実行から除かなくても、その変
更が行なえるようにする。このためには、HOOPSで行なわれた変更を、実行
中のアプリケーションのアドレス空間に反映させる必要がある。これは、ライブ
ラリを共有セグメントとしてロードすることにより処理される。HOOPS側で
行われた変更は実行中のアプリケーション側に反映される。ここで注意すべきこ
とは、HOOPS側では、セグメントはHOOPSデータベースの一部と解釈さ
れるのに対して、アプリケーション側では、そのセグメントはオブジェクト・コ
ードを収めているセグメントとだけ解釈されることである。
アクティブ・プログラム変更のモデルは次の通りである。デバッガがまず実行
を中止し、変更された関数がコンパイルされ、現在のロケーションに収まる場合
であっても異なるロケーションにロードされ、内部リンケージ・エリアが更新さ
れ、プログラムが続行される。変更された関数がスタック上でアクティブになっ
ていれば、その関数の次回の呼出しまで旧バージョンが実行される。別の方法で
は、プログラムを中止するか、あるいはアクティブ関数が変更されていれば、変
更されたすべての関数の前にスタック・フレームの上位にあるプログラムを再始
動する。
プログラムのパブリッシング
アプリケーションがパブリッシュされるとき、リンカはすべてのオブジェクト
・コードを、データベースの外にあるファイルにコピーする。セグメントが外部
ファイルにコピーされると、リンカはすべての関数を再配置し、そのパッチを行
なう。さらに、すべての内部コールは直接コールになり、内部リンケージ・エリ
アが除去される。なお、このステップは基本的に再リンクであるので、コンパイ
ラは介入しない。
オブジェクト・コード・プロパティはフィックスアップ作業を個々のフィック
スアップ・オブジェクトに委任する。
TFixupから派生したクラスとして、TPCRelativeFixup、TAbsoluteFixup、およ
びTDataRelativeFixupがある。各フィックスアップ・クラスは、そのタイプに見
合うパッチをどのように行なうべきかを理解している。これは、リンカは異なる
ビットを解釈してどのアクションをとるべきかを判断しなければならない点で、
通常のコンパイラとリンカの相互作用とはまったく異なっている。このアプロー
チのもう1つの利点は、新しいアーキテクチャの新しいコンパイラは、リンカで
サポートされないフィックスアップ・タイプについて気にしないで済むことであ
る。
参照のタイプ
リンカは4タイプの参照を処理しなければならない。それは、コードからコー
ドへ(code-to-code)、コードからデータへ(code-to-data)、データからコードへ
(data-to-code)、およびデータからデータへ(data-to-data)である。各タイプの
参照がどのように処理されるかを(68Kの場合)以下で説明する。
コードからコードへ
例: Foo();
コンパイラは、コンテキストに応じてこのケースを2通りの方法で処理する。
コンパイラはpc相対(pc-relative)でFoo()へ移ることも、Foo()のアドレスを
ロードし、間接的にレジスタを介することもできる。内部コールはどちらのス
タイルも使用できる。リンカは常にリンケージ・エリアのアドレスを報告する。
クロスライブラリ・コールはアドレス・ロード・スタイルを使用しなければなら
ない。これらは、ロード時にパッチされる絶対アドレスを使用する。
コードからデータへ
例: gValue=1;
コンパイラはgValueへのpc相対アドレスを生成する。しかし、gValueが異な
る共有ライブラリにあるときは、コンパイラは自動的に間接アドレス(indirecti
on)を生成する。リンカは間接的参照をキャッチして、ローカル・アドレスを生
成し、これはロード時に外部アドレスでパッチされる。
データからコードへおよびデータからデータへ
例(データからコードへ): void(*pfn)()=&Foo;
例(データからデータへ): int& pi=i;
これらの参照はどちらも絶対アドレスを必要とするので、これらはローディング
時に処理される。ロード時のデータ参照のパッチは外部参照のパッチとまったく
同じように処理される。
図25は、各タイプの参照でなにが行なわれるかを示している。外部ライブラ
リがこれらの同じコンポーネントを参照していれば、このライブラリはロード時
に複数のGetExportAddress()を受け取る。GetExportAddress()に応答して、ライ
ブラリは関数の内部リンケージ・エリア・アドレスとデータの実アドレスを返却
する。これにより、ライブラリがロードされている間に関数を動き回すことがで
きる。
図26、図27、図28および図29は、好適実施例によるリンキングに関連
するロジックを示すフローチャートである。図26は全体的制御の流れを示して
いる。構築オペレーションが前述したように開始されると、処理が端子2602
から開始され、処理は機能ブロック2610へ移り、コンパイルが行なわれる。
コンパイルに続いて、コードが端子2620に示すように生成される。この処理
は機能ブロック2630から開始され、そこでオブジェクト・コードが受け取ら
れ、フィックスアップがコンポーネントのために収集される。次に、機能ブロッ
ク2640で、オブジェクト・コードがストアされ、機能ブロック2650で、
新たに変更された各々のオブジェクト・モジュールについてフィックスアップが
行なわれる。機能ブロック2640に関連する処理の詳細は図27に示され、機
能ブロック2650の詳細は図28と図29に示されている。
図27は、好適実施例によるオブジェクト・コードのストアに関連するロジッ
クを示すフローチャートである。処理は端子2700から開始され、即時に判定
ブロック2710へ移り、これが初期ストア・オペレーションであるかどうかが
判断される。そうであれば、ストレージが機能ブロック2740に示すように割
り振られ、エントリが機能ブロック2744に示すように、またその詳細を図2
9に示すようにマップに作成され、あるいは更新され、オブジェクトが機能ブロ
ック2750でストアされる。別のコンポーネントがこのオブジェクトを、その
コンパイル前に参照していれば、更新が行なわれる。これが更新オペレーション
であると判定ブロック2710で判断されていれば、テストが判定ブロック72
0で行なわれ、コードが既存のロケーションに収まるかどうかが判断される。コ
ードが収まれば、オブジェクトは機能ブロック2750でストアされる。コード
が収まらなければ、現在のストレージが機能ブロック2730で解放され、別の
テストが機能ブロック2760で行なわれ、データがオブジェクト・データであ
るかどうかが判断される。そうであれば、ストレージが機能ブロック2762で
割り振られ、エントリが機能ブロック2770に示すように、またその詳細を図
29に示すようにマップに作成され、あるいは更新され、オブジェクトに対する
すべてのクライアント・フィックスアップが機能ブロック2780に示すように
行なわれ、オブジェクトが機能ブロック2750に示すようにストアされる。デ
ータがオブジェクト・データでないと、判定ブロック2760で判断されていれ
ば、ストレージが機能ブロック2740で割り振られ、エントリが機能ブロック
2744に示すように、またその詳細を図29に示すようにマップに作成され、
あるいは更新され、オブジェクトが機能ブロック2750に示すようにストアさ
れる。
図28は、フィックスアップの処理および参照ブロックのアドレスの取得に関
連する処理の詳細ロジックを示す図である。フィックスアップを行なう処理は、
端子2800から開始され、即時に機能ブロック2810へ移り、参照ブロック
のアドレスが取得される。次に、判定ブロック2820で、テストが行なわれ、
絶対フィックスアップが必要であるかどうかが判断される。そうであれば、機能
ブロック2830で、絶対フィックアップがロード・オペレーションのために記
録される。そうでなければ、機能ブロック2840に示すように、相対位置を用
いてコードをパッチする。参照オブジェクトのアドレス取得処理は機能ブロック
2850から開始され、即時テストが判定ブロック2860で行なわれ、オブジ
ェクトがすでにマップにあるかどうかが判断される。そうであれば、アドレスが
機能ブロック2880で返却される。そうでなければ、エントリが機能ブロック
2744に示すように、またその詳細を図29に示すようにマップに作成され、
あるいは更新され、そのあとでアドレスが機能ブロック2880で返却される。
図29は、好適実施例に従いエントリをマップに作成し、あるいは更新する詳
細ロジックを示すフローチャートである。処理は端子2900から開始され、即
時に判定ブロック2910へ移り、オブジェクトがすでにマップにあるかどうか
が判断される。オブジェクトがあれば、テストが判定ブロック2930で行なわ
れ、オブジェクトがデータであるかどうかが判断される。オブジェクトがデータ
であれば、マップが機能ブロック2940に示すように新しいアドレスで更新さ
れる。そうでなければ、ジャンプ・ロケーションが機能ブロック2920に示す
ように新しいアドレスで更新される。オブジェクトがまだマップになければ、別
のテストが判定ブロック2950で行なわれ、オブジェクトがデータであるかど
うかが判断される。オブジェクトがデータであれば、マップが機能ブロック29
60に示すように該当のアドレスを使用して作成される。そうでなければ、ジャ
ンプ・ロケーションがあとで定義されるロケーションへジャンプするように、機
能ブロック2980に示すようにリンケージ・エリアに作成され、エントリがリ
ンケージ・エリア・アドレスをもつマップに入れられる。
以上、特定のプログラミング環境における好適実施例を参照して本発明を説明
してきたが、この分野の精通者ならば理解されるように、本発明は、請求の範囲
に記載の本発明の精神と範囲内で変更を加えて実施することが可能である。
─────────────────────────────────────────────────────
フロントページの続き
(81)指定国 EP(AT,BE,CH,DE,
DK,ES,FR,GB,GR,IE,IT,LU,M
C,NL,PT,SE),OA(BF,BJ,CF,CG
,CI,CM,GA,GN,ML,MR,NE,SN,
TD,TG),AT,AU,BB,BG,BR,BY,
CA,CH,CN,CZ,DE,DK,ES,FI,G
B,HU,JP,KP,KR,KZ,LK,LU,LV
,MG,MN,MW,NL,NO,NZ,PL,PT,
RO,RU,SD,SE,SK,UA,UZ,VN
Claims (1)
- 【特許請求の範囲】 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.請求項15に記載の方法において、オブジェクト・モジュールがストアさ れるときオブジェクトの自己リンキングを実行するステップを含むことを特徴と する方法。 18.コンピュータ・プログラムをリンクする方法であって、 (a)コンピュータ・プログラムをコンポーネントのコレクションとしてモデ ル化するステップと、 (b)コンポーネントをメモリにストアするステップと、 (c)ストアされたコンポーネントをアクセスし、各コンポーネントに関連す る従属関係を計算して従属関係のリストを作成するステップと、 (d)コンポーネントを前記従属関係リストに基づいてコンパイルして、更新 されたオブジェクト・モジュールを生成するステップと、 (e)既存の実行可能ファイルを更新することによって前記更新されたオブジ ェクト・モジュールをリンクするステップと、 (f)ロードされた実行可能ファイルを更新するステップとを含むことを特徴 とする方法。 19.請求項18に記載の方法において、オブジェクト・モジュールをオブジェ クトとしてストアし、実行可能ファイルの自己リンキングを容易にするステップ を含むことを特徴とする方法。 20.請求項18に記載の方法において、オブジェクト・モジュールがストアさ れるときオブジェクトの自己リンキングを実行するステップを含むことを特徴と する方法。
Applications Claiming Priority (3)
| 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 | ||
| PCT/US1994/000342 WO1995000904A1 (en) | 1993-06-28 | 1994-01-06 | Incremental linker system |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH08512154A true JPH08512154A (ja) | 1996-12-17 |
Family
ID=22191952
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP7502766A Pending JPH08512154A (ja) | 1993-06-28 | 1994-01-06 | 増分リンカ・システム |
Country Status (8)
| Country | Link |
|---|---|
| US (1) | US5519866A (ja) |
| EP (1) | EP0693193B1 (ja) |
| JP (1) | JPH08512154A (ja) |
| CN (1) | CN1102934A (ja) |
| AU (1) | AU6086294A (ja) |
| CA (1) | CA2144875A1 (ja) |
| DE (1) | DE69402539D1 (ja) |
| WO (1) | WO1995000904A1 (ja) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US9521209B2 (en) | 2002-11-06 | 2016-12-13 | Code Valley Corp Pty Ltd | Code generation |
Families Citing this family (133)
| 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 |
| NZ267700A (en) * | 1993-07-01 | 1998-02-26 | British Telecomm | Generating down loadable instructions for a speech application |
| JPH07104981A (ja) * | 1993-09-30 | 1995-04-21 | Hitachi Software Eng Co Ltd | オブジェクトリンク情報を用いたプログラム構築装置 |
| US6473860B1 (en) | 1994-04-07 | 2002-10-29 | Hark C. Chan | Information distribution and processing system |
| US6021307A (en) | 1994-04-07 | 2000-02-01 | Chan; Hark C. | Information distribution and processing system |
| US6188869B1 (en) | 1994-04-07 | 2001-02-13 | 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 |
| 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 |
| US6185597B1 (en) * | 1995-06-07 | 2001-02-06 | Microsoft Corporation | Method and system for expanding a buried stack frame |
| US5768582A (en) * | 1995-06-07 | 1998-06-16 | International Business Machines Corporation | Computer program product for domained incremental changes storage and retrieval |
| 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 |
| US5764989A (en) * | 1996-02-29 | 1998-06-09 | Supercede, Inc. | Interactive software development system |
| US5848274A (en) * | 1996-02-29 | 1998-12-08 | Supercede, Inc. | Incremental byte code compilation 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 |
| 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 |
| US5999972A (en) | 1996-07-01 | 1999-12-07 | Sun Microsystems, Inc. | System, method and article of manufacture for a distributed computer system 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| BR9713267A (pt) | 1996-10-25 | 2004-06-15 | Schlumberger Systems & Service | Cartão de circuito integrado para uso com um terminal, processo para uso com o mesmo, microcontrolador e processo para sua programação |
| US6205579B1 (en) | 1996-10-28 | 2001-03-20 | Altera Corporation | Method for providing 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 |
| US6199196B1 (en) * | 1998-03-20 | 2001-03-06 | Sun Microsystems, Inc. | Methods and apparatus for linking a program for remote execution |
| US6493870B1 (en) * | 1998-03-20 | 2002-12-10 | Sun Microsystems, Inc. | Methods and apparatus for packaging a program for remote execution |
| US6052531A (en) | 1998-03-25 | 2000-04-18 | Symantec Corporation | Multi-tiered incremental software updating |
| US7185332B1 (en) | 1998-03-25 | 2007-02-27 | Symantec Corporation | Multi-tiered incremental software updating |
| 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 |
| US6148437A (en) * | 1998-05-04 | 2000-11-14 | Hewlett-Packard Company | System and method for jump-evaluated trace designation |
| US6164841A (en) * | 1998-05-04 | 2000-12-26 | Hewlett-Packard Company | Method, apparatus, and product for dynamic software code translation system |
| 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 |
| US6802057B1 (en) | 2000-05-03 | 2004-10-05 | Sun Microsystems, Inc. | Automatic generation of fortran 90 interfaces to fortran 77 code |
| US6647546B1 (en) | 2000-05-03 | 2003-11-11 | Sun Microsystems, Inc. | Avoiding gather and scatter when calling Fortran 77 code from Fortran 90 code |
| 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 |
| US7415504B2 (en) | 2001-02-26 | 2008-08-19 | Symantec Corporation | System and method for controlling distribution of network communications |
| US7647411B1 (en) | 2001-02-26 | 2010-01-12 | Symantec Corporation | 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 |
| CA2441385A1 (en) * | 2001-04-06 | 2002-10-17 | British Telecommunications Public Limited Company | 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 |
| 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 |
| US8132148B2 (en) * | 2005-04-29 | 2012-03-06 | Microsoft Corporation | XML application framework |
| US7886269B2 (en) * | 2005-04-29 | 2011-02-08 | Microsoft Corporation | XML application framework |
| US20060245096A1 (en) * | 2005-04-29 | 2006-11-02 | Microsoft Corporation | Application framework phasing model |
| US8418132B2 (en) * | 2005-04-29 | 2013-04-09 | Microsoft Corporation | Application description language |
| US8275793B2 (en) * | 2005-04-29 | 2012-09-25 | Microsoft Corporation | Transaction transforms |
| US20070006166A1 (en) * | 2005-06-20 | 2007-01-04 | Seagate Technology Llc | Code coverage for an embedded processor system |
| 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 |
| 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 |
| WO2010019128A1 (en) * | 2008-08-09 | 2010-02-18 | 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)
| 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 |
| US5201050A (en) * | 1989-06-30 | 1993-04-06 | Digital Equipment Corporation | Line-skip compiler for source-code development system |
| US5170465A (en) * | 1989-06-30 | 1992-12-08 | Digital Equipment Corporation | Incremental-scanning compiler for source-code development system |
| CA2019603A1 (en) * | 1989-06-30 | 1990-12-31 | William M. Mckeeman | Incremental compiler for source-code development system |
| US5182806A (en) * | 1989-06-30 | 1993-01-26 | 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 |
| GB2242293A (en) * | 1990-01-05 | 1991-09-25 | Apple Computer | Apparatus and method for dynamic linking of computer software components |
| US5204960A (en) * | 1990-01-08 | 1993-04-20 | Microsoft Corporation | Incremental compiler |
| US5124989A (en) * | 1990-01-08 | 1992-06-23 | Microsoft Corporation | Method of debugging a computer program |
| US5140671A (en) * | 1990-01-26 | 1992-08-18 | International Business Machines Corporation | Expert system debugger |
| US5187789A (en) * | 1990-06-11 | 1993-02-16 | Supercomputer Systems Limited Partnership | Graphical display of compiler-generated intermediate database representation |
| US5175856A (en) * | 1990-06-11 | 1992-12-29 | Supercomputer Systems Limited Partnership | Computer with integrated hierarchical representation (ihr) of program wherein ihr file is available for debugging and optimizing during target execution |
| 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 |
-
1993
- 1993-06-28 US US08/085,490 patent/US5519866A/en not_active Expired - Lifetime
-
1994
- 1994-01-06 WO PCT/US1994/000342 patent/WO1995000904A1/en not_active Ceased
- 1994-01-06 EP EP94907187A patent/EP0693193B1/en not_active Expired - Lifetime
- 1994-01-06 CN CN94190010A patent/CN1102934A/zh active Pending
- 1994-01-06 CA CA002144875A patent/CA2144875A1/en not_active Abandoned
- 1994-01-06 JP JP7502766A patent/JPH08512154A/ja active Pending
- 1994-01-06 DE DE69402539T patent/DE69402539D1/de not_active Expired - Lifetime
- 1994-01-06 AU AU60862/94A patent/AU6086294A/en not_active Abandoned
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US9521209B2 (en) | 2002-11-06 | 2016-12-13 | Code Valley Corp Pty Ltd | Code generation |
| US10140098B2 (en) | 2002-11-06 | 2018-11-27 | Noel William Lovisa | Code generation |
Also Published As
| Publication number | Publication date |
|---|---|
| US5519866A (en) | 1996-05-21 |
| CN1102934A (zh) | 1995-05-24 |
| EP0693193B1 (en) | 1997-04-09 |
| CA2144875A1 (en) | 1995-01-05 |
| EP0693193A1 (en) | 1996-01-24 |
| AU6086294A (en) | 1995-01-17 |
| DE69402539D1 (de) | 1997-05-15 |
| WO1995000904A1 (en) | 1995-01-05 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JPH08512154A (ja) | 増分リンカ・システム | |
| EP0664027B1 (en) | Program modeling system | |
| US5956479A (en) | Demand based generation of symbolic information | |
| US5758160A (en) | Method and apparatus for building a software program using dependencies derived from software component interfaces | |
| US5850554A (en) | Compiler tool set for efficiently generating and easily managing multiple program versions of different types | |
| EP0786109B1 (en) | Object-oriented system for configuration history management | |
| US6993759B2 (en) | Diagrammatic control of software in a version control system | |
| US6807548B1 (en) | System and methodology providing automated selection adjustment for refactoring | |
| US6002867A (en) | Development system with methods providing visual form inheritance | |
| US20020083415A1 (en) | Frame component container | |
| AU638999B2 (en) | Incremental compiler for source-code development system | |
| Smith et al. | POPLOG's Two-level virtual machine support for interactive languages | |
| Noble et al. | Functional languages and graphical user interfaces: a review and a case study | |
| Bagge | Facts, Resources, and the IDE/Compiler Mind-Meld | |
| Myers et al. | The prototype-instance object systems in Amulet and Garnet | |
| Clement et al. | CENTAUR: Towards a “software tool box” for programming environments | |
| Wielemaker | SWI-Prolog 5.1 | |
| Wielemaker | SWI-Prolog 4.0 | |
| Gamma et al. | ET++ 2.2-Introduction and Installation | |
| Osenkov | Designing, implementing and integrating a structured C# code editor | |
| Ramos et al. | PyonR: A Python Implementation for Racket | |
| Biedermann et al. | Templator2 | |
| Marty | Integration of a Programming Environment into ET++ A Case Study | |
| Townsend et al. | Jcon: A Java-Based Implementation of Icon | |
| Allen | Self Handbook Documentation |