JP2000507373A - インタラクティブソフトウェア開発システム - Google Patents

インタラクティブソフトウェア開発システム

Info

Publication number
JP2000507373A
JP2000507373A JP9530969A JP53096997A JP2000507373A JP 2000507373 A JP2000507373 A JP 2000507373A JP 9530969 A JP9530969 A JP 9530969A JP 53096997 A JP53096997 A JP 53096997A JP 2000507373 A JP2000507373 A JP 2000507373A
Authority
JP
Japan
Prior art keywords
program
code
file
incremental
objects
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP9530969A
Other languages
English (en)
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 JP2000507373A publication Critical patent/JP2000507373A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

(57)【要約】 従来のソフトウェア開発に関して必要とされていたコンパイラ及びリンカ、デバッガを置き換えるインタラクティブプログラム開発システムである。本発明は、コードオブジェクト(4)と呼ばれる新規な形式の変換構造を作り出すための新しいプログラム編集システムを含み、コードオブジェクト及び持続シンボルテーブル(5)内に格納されるそれらのそれぞれの中間言語シンボルからプログラムメージを形作るインクリメンタルイメージ(6)を含む。この新しいプログラム編集システムは、CPU及びモニタ、メモリシステム、入力装置を有する従来のコンピュータ上で操作される。本発明は、開発下においてもしくはプログラム作成エラーを訂正する保守更新に際して、プログラムの実行を停止させる必要を回避する。

Description

【発明の詳細な説明】 インタラクティブソフトウェア開発システム著作権の告示 この特許出願の一部分は、著作権保護を受ける題材を含む。著作権の所有者は 、全ての著作権の権利を確保してはいるがしかしながら、それが特許及び商標庁 において特許の提出もしくは記録が明らかであるように、特許の文書もしくは特 許の開示の何れかによる複製の模造品に異議を唱えるものではない。発明の分野 本発明は、コンピュータ援助ソフトウェア技術に関し、より詳しくは従来技術 のコンパイラ及びリンカ、デバッガを単一プログラムに置き換えるインタラクテ ィブプログラム開発システムに関する。本発明は、特にオブジェクト指向プログ ラム作成に適用される。本発明のプログラム作成システムは、従来技術のコンパ イラよりもはるかに速い速度で操作するばかりではなく、より重要なことにはソ フトウェアの開発及び保守に際してプログラム上のエラーを訂正する目的でプ口 グラムの実行を停止する必要を排除する。換言すれば、本発明は、バッチ再編集 、再リンク、再ロードを必要とせず、又は開発者がエラー状態を再現する必要が なく、それが編集される(「組立てられる」)ようにプログラムのインタラクテ ィブ「リアルタイム」デバッグを可能とする。発明の背景 コンピュータソフトウェア製品(以降「ソフトウェア」)の開発は、ソフトウ ェア開発チーム(以降「開発者」)の方では著しい時間の消費を必要とする複雑 な循環プロセスである。この開発プロセスは、開発プロセスの主要なステッブの 一部を参照する、「エディット−コンパイル−リンク−ラン」もしくは「エディ ット−コンパイル−テスト」に基づいてしばしば参照される。実用上の優位及び プログラマーの生産性の理由で、相当な量の商用生産ソフトウェアが、最近オブ ジェクト指向プログラム作成言語(OOL)を利用して開発されている。一例と して、制限はしないが、このようなオブジェクト指向プログラム作成を支援する 言語としてC++及びスモールトークを挙げることができる。これらのオブジェク ト指向言語を利用して開発されるプログラムは、機械コードフォーマットで書か れてはおらず、したがってそれらが書かれているOOLソースコードから機械実 行可能なオブジェクトコードに変換されなければならない。このような機械コー ドプログラムは、効率良く、したがって与えられた計算プラットフォーム上で迅 速に機能する。これは典型的には、コンパイルもしくは翻訳のプロセスを介して なされる。コンパイラは、ハードウェアによって実行される機械レベルの命令に ソースコードを変換する。インタプリタは、ソースコードを擬似コード(以降P CODE)に変換し、これはPCODEインタプリタを利用して実行される。イ ンタプリタは、それが実行される際にプログラマがプログラムに効果的な変換を 可能とすると同時に、PCODEインタプリタは、プログラマとハードウェアの 間の特別なレベルを導入し、さらに性能を低下させる。 最も単純なプログラムを除いてセクション例えばモジュールで書かれているた めに、ソースコードモジュールの各々は、完全なプログラムのイメージ(以降「 イメージ」)を形成するのに関連付けられなければならない。この関連付けプロ セスは典型的には、他のものの中でモジュールの各々が正しくアドレスされるこ と及び正しくアドレス可能であることを確実とする、「フィックスアップ」を含 む。一度関連付けられると、イメージはロードされて実行されなければならない 。実行に際して、及び開発者がイメージ内のエラー(もしくは「バグ」)に遭遇 すると、プログラムは典型的には、実行を停止されもしくは不規則にふるまう。 伝統的には、分離したプログラム、デバッガ、が欠陥のある実行プログラムにエ ラーを決定するのに助けとなるように引き出される以前に、プログラムの実行が 停止されもしくは停止されなければならないことを意味する。開発者がデバッガ を利用してエラーの源を確認した後、開発者は、エラーを排除するようにソース コードを編集し、コードを再コンパイルし、それを再リンクし、さらにそれを再 ロードする。さらにプログラマーは、フィックスの効率を確かめるために破損を 結果として生じさせる正確なエラー状態を再現しなければならない。 結局従来技術のコンパイラは、有効な機械コード実行可能ファイルを作り出す 一方で、デバッグする際にこのようなファイルの使用は、扱いにくくもあり時間 の浪費ともなった。これは、実際には、他のソースコードファイルによって引き 出されるソースコードファイルに変更することであり、この他のソースコードフ ァイルは最小限、影響を受けたファイルの各々の再コンパイル及びプログラムイ メージ内に全ての結果オブジェクトコードファイルの再リンクを予め必要とする 。 前述のソフトウェア開発のステップの各々が、有能な演算の専門家によって処 理されなければならないために、ステップの各々に対するコストは高い。それに よって、開発サイクルの効率を増すような方法及びシステムを開発することが、 長い間のそして依然としてソフトウェア開発業界の主目的である。このために、 改良が多くの開発ステッブに対してなされている。 McKeemanらに対する一連の米国特許(Nos.5,170,465;5,182,806;5,201,050 ;とりわけ5,325,531)は、「RCASE」と呼ばれるコンピュータ支援ソフト ウェア技術システムを教示する。RCASEシステムは、インクリメンタルスキ ャナ及びインクリメンタルリンカ、インクリメンタル構造ファシリティ、スラッ シングを減少させる仮想メモリマネージャーを含む細粒度インクリメンタルコン パイラを使用する。この技法はソフトウェア開発サイクルに際して実施の経済性 を提供するが一方で、いくつかのそれの持つサイクルを加えると同時に、従来の 開発サイクルの多くのステップを持ち続ける。したがってRCASEは、新しい 開発システムよりはむしろ従来の開発サイクルに対するインクリメンタル改良を 意味するようである。米国特許第5,193,191号においてMcKeemanらは、先に議論 したインクリメンタルリンカを教示する。 他のインクリメンタルコンパイラは、Smithらによって米国特許第5,204,960号 において教示される。この米国特許第5,204,960号のコンパイラはシステムを教 示し、それによってソース及びオブジェクトファイルが論理ブロックに組織化さ れて格納される。中間ファイルは、これら論理ブロックに関しては情報を含んで 作り上げられ、同様に格納される。変更がソースファイルの一部分に対してなさ れるならば、単に複雑にされた論理ブロックが、再コンパイルされてオブジェク トファイルにパッチされる。再度、Smithは従来のソフトウェア開発サイクルの 1段階に対してインクリメンタル改良を示した。 Taligent,Inc.に対するWO95/00901及びWO95/00904は、インクリメンタル構造 システム及びリンカシステムを教示する。要するにこれらの参照は、従来のバッ チモードプログラム作成システムを置き換えることを試みる。代表的なコンパイ ラ シンボルテーブルにおいて、他のデータに対する参照は、データアイテムの内容 の半分よりも多くしばしば作り上げられる。したがって参照変換は、計算のオー バーヘッドの有効なソースを示す。変換の問題に対する1つの解決は、参照WO95 /00901に教示されるように、Idを使用することである。参照WO95/00901によっ て教示されるインクリメンタルビルダーは、プロジェクトコンポーネント及び形 成コンポーネントの収集のようなコンピュータプログラムのモデル化を教示し、 それぞれ単一のコンパイル可能な言語要素を示す。コンピュータプログラムにモ デルを提供するこれらのコンポーネントは、形成プロセスの際のアクセスのため に格納される。 格納されたコンポーネントは、決まった手順により、クライアントの開発に適 合するコンポーネント及び参照リストに関連した従属物である、コンパイラを使 用して、アクセスされる。最後にコンポーネントは、コンパイラの従属物と一緒 にコンポーネントのプロパティーを使用してコンピュータプログラムを形成する ようにコンパイルされる。したがって参照WO95/00901は、プログラムがファイル 内に画定されるのではなく、Idの手段によってアドレス可能に、コンポーネン トのアイテム内に画定されるシステム上を読む。このように、参照WO95/00901は 、先に議論された変換問題を有さずに、多くの独立したアドレス可能な(及び妥 当な複雑さの)コンポーネントにそれを置き換えるシステムを教示し、これらは 計算の経費の主要な原因である形成すること及び利用することである。これらは このシステムの計算の効率の不足に一因となる。 参照WO95/00904は、開発サイクルのエディット段階に際して修正されるこれら のコンポーネントにのみリンクする、参照WO95/00901のインクリメンタルビルダ ーによって作り上げられる独立したアドレス可能なコンポーネントを利用するイ ンクリメンタルリンカを教示する。要するに、参照WO95/00901及び参照WO95/009 04によって教示されるシステムが、従来のソフトウェア開発サイクルのステップ に対してインクリメンタル改良を再度示す、そのことが評価される。これらのス テップを実行する必要は変わらずに残る。 前述の議論から、相当な努力がソフトウェア開発サイクルのいくつかのステッ プの効率のために費やされてきていることが評価される。現在までに、実現され ていないものは、開発サイクルのステップ数を減らすことにより起こらなければ ならない、プログラマーの効率における相当な増加である。 さらに、前述の発明のいくつかは、それらのどれもが少なくともそれらのステ ップのいくつかを別々に;すなわちバッチモードにおいてある程度までは、実行 するための必要を完全に排除していないが、従来のソフトウェア開発サイクルの 「バッチ処理メンタリティー」のいくつかを克服していることが評価されるであ ろう。よって1つの根源的な状態は:一度エラーが発見されると、プログラムの 実行が停止されなければならず、さらにデバッグに際して何らかの発見された実 際のエラー及び、その後エディットに際して何らかの訂正される実際のエラーが 取り除かれるであろうことを克服する。ファイルのエディット(すなわちフィッ クスがバグを取り除くのに有効である)に際してエラーが実際に訂正されること を確実にする目的で、プログラムの正確な状態、そのエラー状態が再現されなけ ればならない。プログラムの実行が停止されていると、開発者は再度走らせるプ ログラムを再ロードしなければならず、破損におけるそのエラー状態を正確に再 現して各々の及び全ての変数がエラーの発生したその時の以前の値に設定される ことを確実にしなければならない。したがって開発者が複雑なソフトウェアシス テムの再現に取り組んでいるときに、エラー状態は非トリビアルタスクである。 さらにこのステップは、エラー状態が実際に繰り返されているならば、画定する のが困難であるより一層の問題のあることを示し、さらに後置の妥当性検査は時 間を消費し、高価であり、エラーしがちであるようにする。 サイクルの各繰り返しの際、開発者を示すことにより開発サイクルを少数のス テップに再画定する開発システムは、従来技術のスキーマを越えて時間及び価格 において相当に経済的であることを示すであろう。さらにこのシステムが従来の 編集スキームよりも一層効果的であり、一層高速の実行速度を示すならば、経済 性は実現可能である。プログラムの実行を停止することなく、開発者がソーステ キストを相互に作用し合ってデバッグ及びエディットすることが可能であること をただある方法論が見出すのであれば、その方法論は一度にエラー状態を再現す ること必要性を回避し、フィックスの効果を実証するであろう。したがって開発 者の生産性の深く今まで達成できないレベルが実現される。発明の開示 本発明の一局面によれば、インタラクティブコンピュータプログラム開発シス テムが提供され、このシステムは、バッチ再コンパイルもしくは再リンク、再ロ ード、開発者がエラー状態を再現する必要性を必要とせずにコンパイルされるよ うな、プログラムのリアルタイムデバッグが可能である。本発明の原則に従えば 、このインタラクティブシステムは、デバッガレジデントを備え、ソースコード ファイルの所定のセットを有する、コンピュータシステムを含む。開発者は最初 にソースコードファイルの所定のセットをデバッガに呼び出し、システム内のイ ンクリメンタルビルダーレジデントは、ソースコードファイルをコードオブジェ クトに変換するものを呼び出され、それらは中間言語(IL)シンボルに対応す る。コードオブジェクト及びILは、常駐の持続するシンボルテーブル内に格納 される。常駐インクリメンタルイメージャはコードオブジェクト及びILシンボ ルを利用してランタイムコードオブジェクトを形成する。さらにインクリメンタ ルイメージャは、実行可能なプログラムイメージを形成するランタイムコードオ ブジェクトにリンクする。プログラムイメージ及びコンピュータプログラムの動 作は、プローブ及びランナを介して調整される。プローブはインクリメンタルイ メージャプロセス内で実行し、ランナは構成プログラムのプロセス内で実行する 。よってイメージは実行され、イメージは、メモリマップデータを利用する実行 の2つの分離したスレッド内で同時にプログラムを具象化する。 本発明の原理によれば、新しいコンパイラシステムの手段(以降インクリメン タルビルダーと称される)によって遂行され、これは変換構造の新しい型、コー ドオブジェクト;及びインクリメンタルイメージャを作り出し、インクリメンタ ルイメージャはコードオブジェクトからブログラムイメージを形成し、それぞれ の中間言語(IL)は持続するシンボルテーブル内に格納される。イメージが形 成された後、プログラムは分離して保護されるアドレス空間の実行分離スレッド 内で実行される。プロプラエタリデバッガは、形成されたイメージ及び実行可能 なプログラムを利用する仮想リアルタイムにおける開発下で、プログラムをデバ ッグすることにおいて、相互に作用して開発者を助ける。最終的に所定のプログ ラムが構成され、完全にデバッグされた後、開発者は実行可能ファイル(例えば 「EXE」ファイル)に転換するエクストラクタを引き出す。 「実行のスレッド」は、以降プログラムの論理構造と称され、実行の各スレッ ドは、実行される命令のそれ自身の決まった手順を有する。「アドレス空間」は 、スレッドの空間設定に対して独特であるメモリアドレスのマップである。各ア ドレス空間及びスレッドのそれに関連した設定は「プロセス」を画定する。 コードオブジェクトは、Idに対比されるような直接メモリ参照の手段によっ て他のコードオブジェクトを示すILシンボルを参照する、機能定義もしくは可 変の初期値の完全に変換された機械語実施である。コードオブジェクト及びIL シンボルは、イメージすなわち「プログラム」を作り出すのに使用される低いレ ベルのデータ構造である。コードオブジェクトは、機能が参照するそれらのシン ボルの記述を含む。ILシンボルは、機能を参照するそれらのコードオブジェク トの記述を含む。コードオブジェクト及びそれらそれぞれのILシンボルは、言 語シンボルテーブルオブジェクトと同様に、持続するシンボルテーブル内に格納 される。 本発明のシステムの動作の概観は次の通りである:所定の実行可能ファイル( 例えば全てのプログラム)もしくは未解決な外部参照(例えばダイナミックリン クライブラリィ)を備えないプログラムの独立部分を確定するソースコードファ イルを作り出した後、開発者はソースファイルをデバッグするようにデバッガー を引き出す。さらにデバッガーは本発明のインクリメンタルビルダーをプログラ ムに基づいて引き出し、インクリメンタルビルダーは、ソースコードが持続する シンボルテーブル内に予めコンパイルされセーブされているならば、最初に決定 する。ソースコードが予めインクリメンタルにコンパイルされていない(以降「 コンパイルされた」なる用語は「形成された」という語に置き換えられ、後者の 語は実際のプロセスを一層説明するものである)限りにおいては、インクリメン タルビルダーは、持続するシンボルテーブル内に予め形成されたバージョンが存 在しないということを決定し、全体としてファイルを変換するであろう。ソース コードがエディットされ、したがって予めインクリメンタルに形成されている限 りにおいては、インクリメンタルビルダーは、持続するシンボルテーブル内に予 め形成されたバージョンが存在するということを決定して、オリジナルソース コードのエディットされた部分によって影響を受けたコードオブジェクトのソー スコードのそれらの部分を変換するのみであろう。 持続するシンボルテーブルは、オブジェクト指向データベースの形態を取る。 この前後関係から、持続するということは持続するデータ格納装置に格納するこ とが可能であるということを意味し、このような格納が実際に起こる必要がない ということが注目される。もちろん、例えば作業日の終わりにおいて、開発者が 開発下にあるプロジェクトの作業を中止するとき、持続するシンボルテーブルは 、持続する格納装置のようなものの中にうまく格納されるであろう。慎重な計算 の実施は常にそのように指示されるであろう。 オブジェクト指向データベースの使用は、ファイル内の正確な同様の構造を利 用して、インクリメンタルビルダーがデータ構造を形成することを可能とし、こ の構造はそれが実行される際にインクリメンタルビルダーによってシステムメモ リ内で使用される。これはファイルフォーマットとメモリフォーマットの間の変 換において時間の浪費がないという結果を生じ、したがって冗長を排除して以前 のコンパイラを越えて実行速度を相当に増加させる。データベースはシステム動 作が終了しても破棄されない。 インクリメンタルビルダーによってそれらが形成された後、コードオブジェク トに対応するILシンボル及びそれらはメモリ内に格納される。イメージ形成の 際、コードオブジェクトは、インクリメンタルイメージャによって複製されてラ ンタイムコードオブジェクトとしてイメージを形成される。イメージが形成され た後、プログラムは分離して保護されるアドレス空間の実行分離スレッドの下で 実行される。プローブ及びランナは、開発システム及びイメージ(プログラム開 発を具体化する)の動作を調整する。プローブはイメージャプロセスにおいて実 行し、ランナは形成されたプログラムのプロセスにおいて実行する。 プログラムが実行されているときにエラーが検出されると、ランナの下のプ口 グラムの実行は停止される。オペレーティングシステムは、プログラム破損に関 するデータをデバッガに伝達し、デバッガはソースコードのラインが破損の原因 となるそれに関する情報にこのデータを伝達する。デバッガが開発者に破損を知 らせると、この情報は彼又は彼女に伝えられる。 開発者がソースコードファイルをエディットしてプログラムの破損を得た後に 、彼はシステムにインクリメンタルにコンパイルしてプログラムの変更部分を更 新するように指示することができ、この変更部分は、これらの修正を実行する新 しいILシンボル及びコードオブジェクト内に結果として生じる。ビルダーは、 エディットされたソースコードに関連するこれらのプログラムユニットのみをイ ンクリメンタルにコンパイルする。新しいコードオブジェクト及びILシンボル から、インクリメンタルイメージャは、プログラムの更新されたイメージを形成 して、プログラムの実行を続ける。従来の技術によって必要とされるステップが 最初に.EXEファイルを更新してソースコードにリンクしてロードし、さらに 破損が排除されることを生じる正確なエラー状態を再現するということであるこ とが注目される。 所定のプログラムが形成されて完全にデバッグされた後、プログラマーは、分 離したモジュールの手段、エクストラクタによって実行可能ファイル(例えば「 .EXE」ファイル)内にそれを転換する。この.EXEファイルは、従来の開発 システムによって及びアプリケーションプロセスを開始させる基本的な動作シス テムによって利用されるイメージである。.EXEファイルは、ソフトウェアの 製造レベルの分配にとって大変に有効であり:独立のソフトウェア製品を製造す る目的において以前としてこれらは確かに必要である。それらがほとんど変化し ない性質であるためにうまく適合しないので、ソフトウェア開発プロセスにおい て.EXEファイルの使用の必要性は、長くは必要とされない。 持続するテーブル内に常駐するコードオブジェクトは持続し、システム終了も しくはデバッグ、他のプログラマーの動作の結果変更されない。機能(もしくは データ)定義が再コンパイルされると、新しい定義を示す新しいコードオブジェ クトが持続するシンボルテーブルに格納され、機能(もしくはデータ)のILシ ンボルが新しいコードオブジェクトにポイントに更新される。 本発明のシステムは、従来技術の翻訳プログラムを超えるいくつかの生産性の 利点を示す。主な利点は、プログラムプロセスが依然として「ライブ」である時 、発明のシステムはプログラマーがプログラムの変更することを可能とする。こ れは、プログラムを停止すること及びそれのデバッグ、ソースコードのエディッ ト、 バッチコンパイル、フィックスの有効性を実証するために「バグ」を生じるエラ ー状態を再現することの必要性を回避する。さらにこれは、プログラムの再リン ク及び再ロードに対する必要性を完全に回避する。 ここに詳細に記載されるイメージ形成スキームの第2の主要な利点は、プログ ラムがクラッシュして、クラッシュの結果生じるこれらのラインを修正するまで 、プログラム開発者はプログラムを実行し、続けることが可能であることである 。一度プログラムのクラッシュの結果生じるソースコードラインが変更されて修 正されると、次にクラッシュするまで開発者がさらに入力することなく、システ ムは動作を続ける。この方法により、一度開発者がソースコードエラーを修正す ると、クラッシュは実質的に起こらなかったと言えるであろう。 少なくとも2つの重要な概念が本発明のシステムの画定を助ける。第1に、イ ンクリメンタルビルダーが、オブジェクトファイルと対比するようにコードオブ ジェクトを発生する。この事実は、ファイルの断片をコンパイル可能とする本発 明のシステムの中心であり、コードオブジェクトは新しい宣言もしくは変更され たこれらのソースコードラインに対してのみ生み出される。 本発明のインクリメンタルビルダーの動作に対する第2の概念の中心は、ソー スファイル内に示される構造を引き出すことであり、さらに有効にインクリメン タルに再コンパイルすることができるプログラムユニットにソースファイルを分 割することである。メモリの要件が現在のコンピュータシステムに対して十分に 実用的であるほど小さく、非常に速い応答に対して十分に細かい、そのためにプ ログラムユニットへの分割は十分に粗い。 デバッグすることに関しては、従来のデバッガは通常、開発者によって要求さ れる、プログラムの実行に際して表現式を評価する、インタプリタを含む。ある 特殊な場合の表現式(例えば機能呼び出し)は、機械指示の実行によって実際の アプリケーションプロセス内で実際上評価される。 比較すると、本発明のデバッガは、実際のコンパイラを使用してインクリメン タルイメージに力学的に挿入され、直接実行される、小さなコードオブジェクト を作り出す。これはプログラマーが単純な表現式の単なるインタラクティブな評 価を越えることを可能にし、表現式評価を備える彼のプログラム及び彼のプログ ラム内で統合されるステートメント実行を変更する可能性を彼に与える。これは プログラムの他の部分と同じ速度で実行される。例としては: 条件付のブレークポイントの実行のために(「状況が真であればここで止まる 」のような)、全ての他の公知のデバッガは、要求される場所でブレークポイン トを設定し、そこでそれを得るまでプログラムを実行し、表現式(複雑過ぎるこ とはでない)を説明する。状況が偽であるならば、プログラムのポイントが再度 到達するまで、実行が再度続けられる。さらに状況は再度テスト等される。これ らのテストはプログラマーから隠されているので、それにもかかわらず実行する のに長い実行時間が必要である。 比較すると、本発明のデバッガはコンパイラを使用して、状況に対するコード オブジェクトを形成し、イメージをインクリメンタルに更新し、フルスピードで アプリケーションプロセス内の状況を直接評価するように、デバッガがブレーク を仮定するプログラムのポイントにコードを挿入する。状況が真であるときにの みアプリケーションは実際に止まり、デバッガを必要とする。ユーザから隠れて いるものは何もなく、デバッガは「彼の後ろに隠れて」何ごとかを行うのではな い。さらに状況は任意の複雑さとすることができる。 従来のソフトウェア開発サイクルにおいてアプリケーションとデバッガの間の 前後のスイッチの切り替えは、多くの時間を必要としてシステムの性能を相当に 低下させる。また伝統的に状況の翻訳は状況の実行よりもかなり遅い。比較する と、本発明のデバッガは状況をアプリケーションの一部としてテストし、このい くつかの性能の不利益を被ることはない。これは条件付のブレークポイントに対 してかなり良好なターンアラウンド時間をもたらし、この時間はさらにその低い 性能のためにまた利用できる状況がしばしばそれを使用するには平凡であるとい う事実のためにプログラマーにより通常回避される。 本発明のデバッガの特徴は、システム設計に固有であり、分離したモジュール ではない。そのためにコンパイラとデバッガは、何らかの理由で一致しないこと がある。その上にこのデバッグするスキーマは従来技術のデバッガのスキーマよ りもかなり速い。本発明のデバッグするスキーマの他の特徴は、効果的なデバッ グのためにプログラムの実行の終了を必要とせず、すなわち一度デバッグが完了 すると再始動が必要とされない。本発明のシステムは、プログラム開発に際して あらゆるポイントにおいて開始及び停止のためのデバッグを可能とする。例えば 、プログラムが不明確な機能を実行することを試みられると、システムは、開発 者に機会を与える対話を発生させて、機能を画定する。開発者は機能に入り込み 、システムは、それをコンパイルし、イメージを更新し、全プログラムではなく 、機能コール指示のみを再始動させることにより実行を続ける。 前述から、コンパイルし、リンクし、デバッグすることが本発明のシステムに よって全て実行されるということが評価される。さらに、開発下においてシステ ムの「バグ」の発生に関して、コンパイルプロセスを中止して、ソースコードを エディットし、オブジェクトコードにソースコードを再コンパイルし、実行可能 なイメージを形成するようにオブジェクトコードを再リンクし、実行可能イメー ジをロードし、バグを結果として生じさせたエラー状態を再現するということが 、プログラムの実行がそのメモリ状態を修復できないだめなものとするまで、全 て完全に回避されるということが評価される。その上に、フィックスの効率を実 証するのに必要な時間が著しく減少する。なぜならばとりわけ、プログラム実行 は決して中止されず、エラーの始まりにおけるプログラムの正確な状態が保持さ れるからである。 本発明の他の特徴は、「本発明を実行する最良の形熊」と呼ばれる欄において 開示されて明らかにされる。図面の簡単な説明 本発明のより完全な理解のために、以下の発明を実行する最良の形態の詳細な 説明に関連して添付の図面が参照される。図面は: 図1は、本発明に従うソフトウェア開発サイクルの時間的な比較を図解する図 であり、このようなサイクルの従来の視点とインクリメンタル技術のみを使用し て獲得できる従来技術の改良とをともに比較する。 図2Aは、本発明のソフトウェア開発システムが動作するコンピュータシステ ムのブロック図である。 図2Bは、本発明のソフトウェア開発システムの流れ図である。 図3は、本発明の原理に従う総称プログラムオブジェクトのプロパティを図解 する図である。 図4は、総称プログラムユニットのプロパティを図解する図である。 図5は、宣言プログラムユニットのプロパティを図解する図である。 図6は、ソースファイルプログラムユニットのプロパティの図である。 図7は、典型的な第1ソースファイルAのタビュレーション表である。 図8は、典型的な第2ソースファイルBのタビュレーション表である。 図9は、典型的なソースファイルAの変更バージョンのタビュレーションであ る。 図10は、プログラムユニット及びプログラムオブジェクト、ソースファイルA に応答するILシンボルのインクリメンタル形成を図解する図である。 図11は、プログラムユニット及びプログラムオブジェクト、ILシンボル、ソ ースファイルAのインクリメンタル形成に続いて起こるソースファイルBに応答 するコードオブジェクトのインクリメンタル形成を図解する図である。 図12は、影響を受けたプログラムユニット及びプログラムオブジェクト、IL シンボル、ソースファイルAの変更に応答するコードオブジェクトのインクリメ ント再形成を図解する図である。 図13、プログラムイメージを形成することにおけるコードオブジェクト及びI Lシンボルの使用を図解する図である。 図14は、コードオブジェクト及び再ロケーションアレイ、ILシンボルに応答 するランタイムコードオブジェクトの決まった手順の形を線図で示すものである 。 図15は、プローブ及びランナを使用する共用記憶域割当てを線図で示すもので ある。 図16は、プログラムのランタイムイメージの作成を線図で示すものである。 図17は、変更がランタイムコードオブジェクトの従属によって適切にアドレス 可能であるコードオブジェクトを作ることを確実にするための機構を線図で示す ものである。 参照番号は、図面の複数の図を通して、発明の同様もしくは等しい部分に当て はめられる。本発明を実行する最良の形態 定義 本発明のシステムのより完全な理解を提供することを目的として、他の仕事か ら何らかの概念及び構造の違いを区別するために、以下の定義が提供される:ファイル ここで使用される限りでは、最も幅の広い意味において、ファイルは、プログ ラムテキスト例えばソーステキストの流れを具体化する。これは、当業界の通常 の技術者に直ちに識別され、この定義は従来のファイル指向構造を含むが、さら に例えば画一的なデータの流れも含む。プログラム 本発明のシステムの詳細な説明で使用される限りでは、プログラムは、その中 に宣言が含まれるファイルの集合を含み、プログラムファイル間の関係を開発者 によって提供される記述を含む。宣言 C+ +もしくは何らかの宣言するプログラム言語における宣言は、全ファイル よりもプログラム記述ユニットは一層小さい。典型的にはプログラム記述は、各 々他を参照し、ここで従属グラフと呼ばれる従属ネットワークを形成する。この 語は、コンパイラ最適化理論において通常使用される用語「従属グラフ」とは完 全に違う意味を有するということに注目されなければならない。 宣言は、2つの根本的に異なる形式を持ち:これらの宣言は単にコンパイルタ イムの表現を有し、またランタイムの表現を有する。所定の宣言の形式は、言語 の従属するが、C++プログラム言語において、前者の例はタイプデフ及び列挙型 規則子、機能宣言である。同様の言語において、後者は可変定義及び機能定義、 ある程度はクラス定義形式によって例示される。プログラムユニット 一度にコンパイルされる最も小さな実体である。しかしながらプログラムユニ ットは単純な宣言以上である。各プログラムユニットは1以上の宣言を含む。プ ログラムユニットは、ソースファイルの一部を示すが、独立プログラム実体では ない。プログラムユニットは、前述のWO95/00901及びWO95/00904参照の「コンポ ーネント」に類似するが、等しくはない。等しくないこれらの「コンポーネント 」、 プログラムユニットは独立アーティクルではなく、この独立アーティクルは、何 らかの理由により他のプログラムユニットからは違った名称をつけられもしくは 称される。したがってプログラムユニットは、コンポーネントがなすよりもはる かに少数のプロパティを有し、それゆえにより高い形成効率及び利用効率である 。さらにプログラムユニットは、コンポーネントが主体ではないのに反して、フ ァイル内の厳密に決まった手順の順序のための主体である。 WO95/00901参照のコンポーネント間のもう1つの相違は、プログラムユニット がIDによって参照されないということである。その代わりにプログラムユニッ トは、ダイレクトメモリ参照によって参照される。この相違は、電話帳の電話番 号を検索するのに似ており、WO95/00901参照が所定の状況において呼び出すため にある人物の名前のノートを作り、したがって電話番号はある人物を呼び出すの にそれが必要とされるときにはいつも検索されなければならないのに対して、本 発明はある人物の電話番号を書きとめ、正しい番号が呼び出されることがわかる ので、誰が呼びされるか注意しない。シンボルテーブル シンボルテーブルは、コンパイラがファイル間の関連用語のプログラム構造か ら集める、もしくはそのプログラムユニットをコンパイルする際にプログラムテ キストそれ自体から推定するプログラムに関する情報の中心をなし基礎となるリ ポジトリである。全ての公知のコンパイルシステムがシンボルテーブルを持って いる一方で、本発明のシステムはシンボルテーブルを利用して如何なる公知の従 来のコンパイラよりもその中により多くの情報を格納する。 用語「テーブル」は、例えばリレーショナルデータベース理論における、それ の持つ従来の意味ではここで使用されないということが注目される。テーブルは 普通は、同次記録のベクトルであり、各記録は他と同様の的確なフィールドを備 える。しかしながらコンパイラシンボルテーブルは、単に異質のデータオブジェ クトの大きな集合であり、記述された関係に対するものである。これらの関係は 、ダイレクトメモリ参照によって画定される。持続的な有効性 ランダムアクセスコンピュータメモリ(例えばRAM)のような主メモリは普 通、一度第1プログラムが終了するとメモリは、例えば第2のプログラムに割り 当てられ、メモリの内容が失われるというような方式で、実行プログラムに割り 当てられて利用される。しかし第1のプログラムが再始動され、同一のメモリが もはやそのプログラムに利用されないのであれば、再割り当てされねばならない 。しかしながらメモリは、おそらくもはや同一内容を有さないであろう。事実、 多くのオペレーティングシステムは、そうならないことを確かめるように注意し 、それによってコンピュータ上のいくつかのプログラムは、呼び出しの間のその 内容を持ち続けるメモリを誤って信頼されないであろう。しかしながらハードデ ィスクもしくはテープのような大容量記憶装置を含む多くの第2のメモリ装置は 、このプロパティを有さない。 第2のメモリ装置(例えば「大容量記憶装置」)は、しばしば持続するメモリ と称され、ほとんどの多くの取るに足らないプログラムによって一貫して利用さ れ、呼び出しから呼び出しへのデータを格納する。本発明のシステムはこのよう な取るに足らないプログラムではなく;多くのコンパイルシステムである。最近 のコンパイルシステムは典型的には、リンク可能なオブジェクトファイル及び他 の呼びファイルの形での大容量記憶装置内のコンパイルの最終結果のみを格納す る。本発明のシステムは、ILシンボルの形及びコードオブジェクトの形でコン パイルプロセスの最終結果のみを格納するのではなく、その上に多くの中間のデ ータ構造を格納する。中間の言語 本発明のシステムは、同時に1つのプログラムユニットをコンパイルすること によってプログラムの定義を内部で処理し、この結果ここで「中間の言語(IL )」と称される異質のデータ構造を作り出す。この言語は、最適化及び機会コー ドの発生のような内部操作に対してソーステキストよりも一層適する。 本発明によれば、ILデータ構造の2つの主要なグループ:シンボル及び演算 子がある。後者は記述機能定義及び変数の初期値として使用される。前者は機能 及び変数双方の記述宣言として使用される。コードオブジェクト コードオブジェクトは、機能及びデータ定義をターゲットプロセッサのCPU アーキテクチャによって要求される形の決まった手順のバイトとして示す。コー ドオブジェクトは再配置の集合を含み、各再配置の集合は、実行可能プログラム の一部であるコードオブジェクトをロードする目的で、コードオブジェクト内の ポインタ値が明確なILシンボルの定義であるコードオブジェクトに向けられな ければならないということを指定する。 本発明のシステムにおいて、コードオブジェクト及び中間の言語シンボルは、 持続するシンボルテーブルとして持続するメモリ内に格納される。全体のプログ ラムに対して1つの持続するシンボルテーブルが存在する。コードオブジェクト は、ILシンボルを名称もしくはIdによるのとはとは対照的にダイレクトメモ リ参照によって参照する。再度これは、従来のシステム及び前述のインクリメン タル技術の双方を超えて、相当な性能上の利点を有する。本発明のシステムは、 コードオブジェクトが形成されるようなダイレクトメモリ参照を利用するので、 リンクプロセスの必要がない。その結果本発明のシステムは、コンパイルの副産 物としてリンクを実行し、それによってリンカを完全に排除する。実行可能ファイル 実行可能ファイルは、決定されたコードオブジェクト間の全ての参照を備える 変換されたプログラムの完全な表現であり、基本的なCPUアーキテクチャ及び オペレーティングシステムによって予想される形である。換言すれば、実行可能 ファイルは、そのデータであるよりはむしろプログラムそれ自体の持続する表現 である。典型的には従来のリンカもしくはインクリメンタルリンカが作り出すと いうことである。本発明のシステムにおいて、一度プログラムのエディットが完 了すると、開発者は実行可能ファイルを作り出すエクストラクタの実行を結果と して生じさせる。したがってエクストラクタは、従来技術が教える分離したリン カと同様の機能のいくつかを実行する。エクストラクタ 従来のリンカは、内部データ構造の中にオブジェクトファイルを収集する。そ の後リンカは、データ構造をトラバースして実行ファイルを発生する。比較する と、本発明のエクストラクタは、エクストラクタへの入力がオブジェクトファイ ルに対してコードオブジェクト及びILシンボルである点を除いては、従来のリ ンカの第2のフェーズと本質的に同じように本質的に同じ機能及び動作を実行す る。プログラムローダ プログラムローダは、主メモリに実行可能ファイルを取り入れる多くのオペレ ーションシステムの特別な機能性であり、開発下でプログラムを開始する。この 機能性は典型的には、オペレーションシステムによって提供され、他のコンパイ ルシステムと同様に本発明のシステムによってレバレージされる。 本発明のシステムは、開発下においてプロプラエタリ実行可能フォーマット内 でプログラムを具象化し、後に明らかにされるであろう理由でファイル内で具象 化するのではない。このプロプラエタリフォーマット内でプログラムをロードす るために、さらに本発明のシステムはランナと称されるプログラム要素を含み、 これはロードする機能を実行するようにここで教示されるイメージャと共同して 動作する。ここで、プロプラエタリ実行可能フォーマット及び対応するローダは 、プログラムが開発されているときにのみ使用される。完成したプログラムを配 置するように望まれると、ターゲットアーキテクテャ(例えば「.EXE」ファ イル)に適した予め画定した実行可能フォーマット及び対応するオペレートシス テムに供給されるプログラムローダが使用される。プロセス 本発明のシステムが適用する全てのオペレーションシステムを含む、最も最近 のオペテーションシステムでは、各プログラムは、通例それの持つ「プロセス」 と称されるものの中で実行する。プロセスは、3つの主なプロパティを有する: プログラムイメージ、これはプログラムの実行のパスを画定する:エントリポイ ント、これは実行が開始されるプログラムイメージの位置である:アドレス空間 、これはプロセスに対して固有であるメモリ位置の範囲であり、他のプロセスに 使用されない。同じ時にもしくは決まった手順内のどちらかで実行される異なる プロセスが共有のあるデータを必要とするならば、これは通常、先に議論したよ うにファイルを使用して行われる。持続する格納ファイルは、1つのプログラム に対して固有である必要はない。2つの同時に起こるプロセスは、同時に同じ持 続する格納ファイルにアクセスすることができ、そこに格納されるデータを操作 し て情報を共有する。共有メモリ 例示であって限定するものではないが、ユニックスやウインドウズNT/ウイ ンドウズ95を含む、近頃のオペレーションシステムは、共有される主メモリに よる共有されるデータのもう1つの手段を有する。この概念は、通例「共有メモ リ」と称される。本発明のシステムは、ファイル内よりはむしろ共有メモリ内に 実行可能イメージを配置する。ここに教示されるプロプラエタリプログラムロー ダは、コンパイラシステムを備える共有メモリとしてそれ自体設定されるのみで はなく、イメージファイル内の代わりに共有メモリ内の指定された位置にプロセ スエントリポイントを位置させることが可能である。ランタイムコードオブジェクト 依然に議論したように、コードオブジェクトは持続して格納され、プログラム ファイルを形成するように使用される。コードオブジェクト間の参照はコンピュ ータハードウェアで実行するのに都合の良い形ではない。したがってこれらの参 照は再度変換されなければならない。実行されるプログラムイメージを形成する ためのコードオブジェクトの変更の必要がないようにすることを目的として、及 びさらにそれらの元の内容をコードオブジェクトに再格納する必要がないように することを目的として、この発明はそれらの複製をプログラムイメージが形成さ れる、非持続メモリ内に作る。これらの非持続コードオブジェクトは、ランタイ ムコードオブジェクトと呼ばれる。 機能定義に対する各ランタイムコードオブジェクトは、1つの命令それ以上の 対応するコードオブジェクトを有し、命令はプログラムそれ自体に欠くことので きないものでなく、インクリメンタル形成プロセスに大変に欠くことのできない ものである。このようなランタイムコードオブジェクトの開始において、分岐命 令が、機能自体の最初の命令である、始めに次の命令に分岐するということをそ こに書かれる。したがって命令はプログラム論理に全く影響を及ぼさない。ラン タイムオブジェクトがコンパイルによって対応する機能に対する新しい定義に更 新されると、新しいコードオブジェクトは、それが適合しないのであれば、最初 と同じランタイムコードオブジェクトに複写されるか、もしくは最初のランタイ ムコードオブジェクトの活動が存在するのであれば、他のランタイムコードオブ ジェクトに複写されるかである。後者の場合には、最初のランタイムコードオブ ジェクトの分岐命令は、新しいランタイムコードオブジェクトの最初の命令(や はり分岐命令)に分岐するように変更される。そこで分岐がされて以降、古いラ ンタイムコードオブジェクトに対する全てのセーブされた参照が依然有効であり 、プログラムは直ちに新しいランタイムコードオブジェクトに分岐するであろう 。インクリメンタルイメージャ 共有メモリ内でプログラムイメージを形成するために、本発明のシステムは、 ここでインクリメンタルイメージャと称されるあるものを使用する。これはコー ドオブジェクトを取り、それらを共有メモリ内に配置されるランタイムコードオ ブジェクトに複写し、それらにリンクして実行の準備がされるプログラムイメー ジを形成する。イメージの完了に対して受動的に待ちそしてそれをロードするプ ログラムローダを有するよりはむしろ、本発明のプログラムローダはイメージ形 成プロセスにおいて能動的に機能する。デバッガ 用語「デバッガ」は伝統的に、それ自体のプロセスにおいて、他のプログラム の実行を制御するのに使用されるプログラムに関連する。これはこの名称をえら ーもしくは「バグ」のプログラムを取り除くに使用されたという事実から引き出 される。従来のコンパイルシステムでは、コンパイラはソーステキストを、リン カによって実行可能イメージファイルに共にリンクされるオブジェクトファイル に変換する。コンパイラ及びリンカは、独立したプログラムであり、各々異なる プロセスで実行する。さらにプログラムは、プログラムローダもしくはデバッガ の制御下のプログラムローダのどちらかによって直接実行される。一度バグが見 つけられると、プログラムはデバッガによって停止され、さらにソーステキスト は開発者によって変更もしくはエディットされることができ、プロセスがすっか り開始する。プログラムが停止されなければならない理由は、プロセスによって 使用されている際に通常のプログラムローダがイメージファイルを変更すること ができないからである。 本発明のシステムにおいて、インクリメンタルビルダーは、コンパイラの役割 及びリンカの役割の多くを実行する。インクリメンタルビルダー、インクリメン タルイメージャ、デバッガは全て同じプロセス内で実行し、本発明のプログラム ローダは、ファイル内ではなくイメージを、プログラムを停止させることなく変 更することを可能とする。 このように本発明のインクリメンタルビルダーは、コンパイル時間を減少させ ることによってプログラム破損をフィックスするのに必要とされる時間を相当に 減少させ、リンクすること及びロードすること(イメージが共有メモリ内に形成 されてから)、エラー状態の再現時間(プログラムが再始動されてはならないと きから、適所にフィックスされるまでエラー状態で置かれる)を実行する時間を 排除する。一度フィックスが達成されると、プログラムの実行はあたかもエラー が起きなかったかのように続けられる。 本発明のシステムによって示される利点のタイムラインの比較が図1に示され る。従来技術のシステムは、プログラムプロセスが依然として「ライブ」である 際に、実行可能イメージが変更(更新)できないファイル内に保持されることが 必要である。その結果、システムに何らかの変更を有効とする目的で、プログラ ムは停止され、プログラムの更新を有効とするために再始動することが必要であ る。一方で本発明のシステムは、ファイル内に実行可能なイメージを配置させず 、共有マップメモリ内に配置する。このようにイメージは、同時の操作(イメー ジャによる)及び実行(ランナによる)を利用可能とする。 図2Aを参照すると、本発明のシステムはCPU50及び表示モニタ52、メモリ システム54、入力装置56上で動作する。好ましくはCPU50はインテルペンティ アムであり、好ましくはディスプレイ52はスーパーVGAモニタであり、好まし くはメモリ54はDRAM及び磁気ディスク記憶装置を含み、入力装置56はキーボ ード及びマウスと関連インターフェースサブシステムを含む。 さらに図2Bを参照すると、本発明のプログラムの概略が示される。開発者が 始めてソースコードファイル3の所定の集合に対してデバッガ1を呼び出すと、 インクリメンタルビルダー4は、ソースコードファイル3をコードオブジェクト 及びそれらに対応するILシンボルに変換するものを呼び出される。コードオブ ジェクト及びILシンボルは持続するシンボルテーブル5に格納される。持続す るシンボルテーブル5は、メモリ装置のあらゆる形式のもので実行される。イン クリメンタルマネージャ6は、コードオブジェクト及びILシンボルをランタイ ムコードオブジェクトに形成するのに使用される。さらにインクリメンタルイメ ージャ6は、実行可能なプログラムイメージを形成するランタイムコードオブジ ェクトにリンクする。イメージャ及びプログラムの動作は、プローブ7及びラン ナ8を介して調整される。プローブ7はインクリメンタルイメージャプロセス内 で実行し、ランナ8は形成プログラムのプロセス内で実行する。このようにして イメージ及びプログラムは、同時にメモリマップデータを利用する実行の2つの 分離したスレッド内で実行される。 本発明のインクリメンタルビルダーの主要な目的は、プログラムソースの特殊 な表現(例えばデータベースオブジェクトとして実行されるプログラムソーステ キスト)もしくは初期のコンパイルにおいて過度の経費を必要とせずに、編集努 力及びプログラムのソーステキストに対する変更の後コンピュータプログラムの 完全にコンパイルされた表現を構築するのに要する時間を最小とすることである 。これらの欠点は、例えばWO95/00901及びWO95/00904によって教示される発明に 明らかである。それらにひとまとめにして教示されるシステムは、プログラムソ ーステキストがデータベースオブジェクトとして実行されることが必要である。 その上、これらの及び他の先に開発されたインクリメンタルコンパイラは再コン パイルにおいて利点を提供するが、一方で全プログラムの形成が非常に複雑な内 部構造を使用しているため遅く、ソースファイルを操作するのに多くの必要なツ ールの使用を制限する。比較して、本発明のインクリメンタルビルダーは、再小 量の再コンパイルとしてこれ以降称されるプロセスによりその主要な目的を達成 する。本発明のインクリメンタルビルダーは、データベースオブジェクトとして 実行されるソーステキストを使用しないために、先のインクリメンタルコンパイ ラよりもかなり高速の初期形成を可能とする。その上さらにプログラムの再形成 において、データベースオブジェクトのIdとは対照的にポインタの使用が結果 としてインクリメンタル再形成をより高速とする。 典型的にはプログラムソーステキストが、インターフェース、実施、もしくは 両方を指定する。インターフェースはプログラムの1つの部分の作用を指定し、 それによって他のものに使用されることが可能となる。実施は指定された作用を 提供する。多くのプログラム言語は、分離したコンパイルソースに使用されるイ ンターフェースを作る方法を提供する。本発明の原理は、1つのコンパイルにお いて他に中に指定されるインターフェースを必然的に含むための機能を備える、 すべてのコンピュータプログラム言語のコンパイルに適応できる。この機能は名 前付きの変換取り込みと呼ばれ、多くのプログラム言語内に含まれている。例示 を目的として、制限はしない、このような言語はAda及びModula−3、 Javaを含む。本発明の1つの特徴は、名前付き変換取り込みにC++プログラ ム言語を加えることである。 標準のC+ +は辞書ファイル取り込みを使用する。これは、1より多いコンパ イルに含まれるソースコードが各そのようなコンパイルの部分としてコンパイル されることを意味する。独創的なC++の実施は、いくつかのコンパイルにおいて 辞書取り込みファイルの集合をコンパイルする結果を再使用することが可能であ り、しかし何らかの1つの辞書取り込みファイルが変更されるならば全ての集合 を完全に再コンパイルしなければならない。 ここに教えられるように、最小量の再コンパイルは以下の原則を含んで幅広く 言うことができる: (a)ここではプログラムユニットと称される、ソースファイルを比較的 小さな断片に分割する。この小さなファイルの断片が、単純で速い再コ ンパイルを可能とする。 (b)ここではプログラムオブジェクトと称される、プログラムユニット が同等の小ささのコンポーネントの断片を有する、従属状態のトラック を保有する。プログラムユニットは、それらが参照するプログラムオブ ジェクトに従属していると言われる。 (c)プログラムの部分の再コンパイルの後、プログラムオブジェクトが 論理的な変更をして、その結果従属プログラムユニットが再コンパイル を必要とすることをすばやく決定する。 部分的な順序付けは、グループ内の如何なる順序も認める実体のグループを順 序付ける。本発明の好適な実施例は、ソースファイルに対する部分的なコンパイ ル順序が具象化され、典型的にはいくつかのファイルが同時にコンパイル可能で あり、そして多重処理コンピュータにおいて全ての使用可能なプロセスを有効に 使用する。 プログラムオブジェクトの選択されたプロパティが図3に示される。各プログ ラムオブジェクトPは、以下のプロパティを有する: プログラムオブジェクトに従属するコンパイルのプログラムユニット を含む、従属集合。 ここでサインと称される、プログラムオブジェクトの意味の記号化。 本発明の好適な実施例では、サインはプログラムオブジェクトの論理的 なプロパティを列表示の64ビットハッシングである。同様のサインに対する2つ の異なる列ハッシングの可能性は、統計上取るに足らないように十分に起こりそ うもない。1つのサイン作成技法の擬似コード表示は以下のようである: サイン作成: 重要な論理的なプロパティの記号化を表示するテキ スト列を構築する; テキスト列の細分化; エンド。 例えば:フィギュアXに対応するソースファイルAに宣言されるデータメンバ Xに関して作り出されるプログラムオブジェクトを考察する。フィギュアXはこ こに宣言される: classC{ intX }: Xの論理的なプロパティは「X」と名付けられ、クラス「C」のデータメンバで あり、割り込み符号付の形式であり、ゼロのオフセットを有し、専用の保護を有 する。これらのプロパティの1つの可能な符号化は列であり:「X専用符号付割 り込みCデータ0」である。より多くのコンパクトな表示は可能でもあり望まし くもある。実例として、しかし制限せずに、本発明の好適な実施例として、この データメンバのプロパティの符号化が「XpSICD0」として表示可能である 。 実例として、しかし制限せずに、C++プログラム言語に対して、以下の各々が プログラムオブジェクトを構成する: すべての(辞書取り込み)ソースファイル; マクロ; タグ、機能、タイプデフ、テンプレートもしくはネーム空間適用範囲 で宣言される変数; エヌメレータ;さらに タグ、機能、タイプデフもしくはクラスのデータメンバ。 各プログラムオブジェクトは、プログラムユニットによって含まれる。前述の ようにプログラムユニットは、本発明の好適な実施例によって一度に完了する最 小の実体である。異なるプログラム言語は、プログラムユニットの形成を必要と する異なる構造を強いる。 一般的な場合、以下のものがプログラムユニットを構成する: 全てのファイル;さらに 他の構文宣言内に含まれない構文宣言。 実例として、しかし制限せずに、C++プログラム言語において以下の各々がプ ログラムユニットを構成する: 全てのファイル; ファイル適用範囲宣言;もしくは ネーム空間適用範囲宣言。 本発明のインクリメンタルビルダーの必要条件の1つは、全プログラムオブジ ェクトを認識することである。各プログラムオブジェクトに関して、ビルダーは 、プログラムオブジェクトと呼ばれるプログラムオブジェクトの内部表示を作り だし、収容されるプログラムユニットのプログラムユニットオブジェクトと呼ば れる収容されるプログラムユニットの内部表示にそれを関連付ける。 総称プログラムユニットの選択されたプロパティが図4に示される。本発明の 好適な実施例において、さらにプログラムユニットが、宣言プログラムユニット もしくはソースファイルプログラムユニットの何れかとして分類されるであろう ことが注目される。各プログラムユニットは以下のプロパティを有する: 要求コンパイルフラッグ、これは真もしくは偽を有することができる 。 依存集合、これはプログラムユニットのコンパイルで使用されるプロ グラムオブジェクトを含む。 さらに図5を参照すると、宣言プログラムユニットの付加的なプロパティが、 宣言プログラムユニット内に含まれるプログラムオブジェクトのリストを含む。 図6を参照することにより、ソースファイルプログラムユニットの付加的なプ ロパティが次のものを含む: ソースファイルプログラムユニット内に含まれるマクロのリスト;さらに それが含まれる宣言プログラムユニットのリスト。 プログラムソーステキストは、何らかのテキストエディタによってエディット され得る分離したコンパイル可能テキストファイル(ソースファイル)からなる 。他のソースファイルによって使用可能なインタフェースを指定するソースファ イルは、名前付き変換を画定する。他のソースファイルによって指定されるイン タフェースを使用するソースファイルは、そのコンパイルに関連した名前付き変 換(名前によって)を含む。各コンパイルされたソースファイルに関して、本発 明の好適な実施例のインクリメンタルビルダーは変換を作り出す。この変換は適 宜名前を付けられもしくは名前を付けられない。 コンパイルに再帰的に含まれる変換は、変換のコンパイルに含まれる全ての変 換を含む。変換AAを画定するソースファイルAは、BのコンパイルがAAを含 むのであれば、ソースファイルB以前に、コンパイルされなければならない。こ の規則は、プログラムのソースファイルに対して部分的なコンパイルの順序を画 定する。この規則によって順序付けされないコンパイルのソースファイルの如何 なる集合も、何らかの順序もしくは同時にコンパイルされ得る。 ソースファイル内で、構文要素はプログラム言語定義によって指定される順序 付けで形成される。C++プラグラム言語に関しては、これはソーステキストの語 彙順序に一致する。 ソースコードファイルの初期形成に関しては、全てのソースファイルプログラ ムユニットが形成を要求する。インクリメンタルビルダーは、部分的な形成の順 序に応じる順序で、形成されない名前付き変換が含まれない形成されないソース ファイルが維持されないと、停止する、各ソースファイルプログラムユニットに よって示されるソースファイルを形成する。エラーなしに形成される各ソースフ ァイルに関して、プログラムビルダーは、対応するソースファイルプログラムユ ニットをビルダーを要求しないで作る。各このようなソースファイルプログラム ユニット内の全ての宣言プログラムユニットは、ビルダーを要求しないように作 られる。 ソースファイルが変更されると、例えばデバッグプロセスの際に続きエディッ トされると、本発明の好適な実施例のインクリメンタルビルダーは、ソーステキ ストがエディットされる、もしくは論理的なプロパティが変更される1以上のプ ログラムユニットに依存する、それらプログラムユニットのみを再形成する。こ れは、テキストがコンパイルを要求されるように変更する(もしくテキストが変 更されるソースファイルを辞書的に含む)各ソースファイルのソースファイルプ ログラムユニットを作ることによってなされる。これは、要求コンパイルフラッ グを真に設定することによってなされる。さらにインクリメンタルビルダーは、 コンパイル順序で全てのソースファイルプログラムユニットをトラバースする。 各ソースファイルプログラムユニットに関して: 1.ソースファイルプログラムユニットが形成を必要とするならば、全体とし て再形成される。 2.さもなければ、コンパイラが語彙順序でソースファイルプログラムユニッ ト内の全ての宣言プログラムユニットをトラバースする。コンパイルを必要とす る各宣言プログラムユニットは再コンパイルされる。 ソースファイルプログラムユニットを再形成する際に以下のステップが実行さ れる: 1.ソースファイルプロラムユニットSF1内の各宣言プログラムユニットに 関して、その依存集合の各要素の従属集合から宣言プログラムユニットを削除し 、さらに依存集合を放棄する。 2.新しいソースファイルプログラムユニットSF2(及び新しい変換)を作 り出すようにソースファイルのテキストをコンパイルする。 3.SF2内の全てのプログラムユニット内のシグネチャによって指標を付け られたプログラムオブジェクトの全てを含むテーブルTを構築する。 4.SF1内のプログラムオブジェクトをトラバースする。(これは宣言プロ グラムユニットのリストをトラバースすることを要求する。)各プログラムオブ ジェクトOに関して、T内のOのシグネチャを探し出す。エントリO1が存在す れば、Oの従属集合の各要素をO1の従属集合に複写し、TからO1を削除する 。エントリが存在しなければ、Oの従属集合の各要素に、真に要求コンパイルフ ラッグを設定することにより再形成する必要があると、印を付ける。 5.ステッブ2が、奇形のソースコードを含み、宣言の何らかの部分が決定さ れないのであれば、形成が不必要であると宣言プログラムユニットに印をつける 。 宣言プログラムユニットの再形成は以下のように達成される: 1.宣言プログラムユニットをそれの依存集合の各要素の従属集合から削除し 、さらに依存集合をクリアする。 2.宣言プログラムユニットのテキストをコンパイルしてプログラムオブジェ クトのリストを作り出す。 3.シグネチャによって指標を付けられた、新しいプログラムオブジェクトの 全てを含むテーブルTを構築する。 4.古いプログラムオブジェクトのリストをトラバースする。各プログラムオ ブジェクトOに関して、T内のOのシグネチャを探し出す。エントリO1が存在 すれば、Oの従属集合をO1に複写し、TからO1を削除する。エントリが存在 しなければ、Oの従属集合の各要素に、真に再コンパイルが必要であると、印を 付ける。 5.プログラムオブジェクトの古いリストを新しいものと置き換える。 6.ステップ2が、奇形のソースコードを含み、宣言の何らかの部分が決定さ れないのであれば、形成が不必要であると宣言プログラムユニットに印をつける 。プログラムオブジェクト及びILシンボル、コードオブジェクト、プログラム ユニットの作成のためのプロセスは、以下のような擬似コード形態で示すことが できる: パーズプログラムテキスト、ファイル適用範囲もしくはネーム空間適用範囲構文 宣言の確認すること、各このような宣言のための抽象構文ツリー(AST)を発 生すること; 各ASTに対して行う: プログラムユニットUの生成; 以下のようにASTの意味解析の実行; U内の実体を示すプログラムオブジェクトを含む、 再コンパイル従属物が意味あるように、シンボルテー ブルノードの生成; 実在プログラムオブジェクト上の従属物の認定; 各依存プログラムPOに対する実行; POをUの依存集合に付加; End do; U内で宣言される各機能(もしくは静的記憶装置デ ータ)FDに対する実行; FDがILシンボルを持たないのであれば、 それに対して1つ生成。 ASTがFDを画定するならば、定義を示し てILを発生; そしてさらにコードオブジェクト作り出すよ うにIL上のコード生成の実行; End do; End perform: End do; End。 さらに図7から12を参照すると、本発明のインクリメンタルビルダーの原理を 代表例の例示が、先に議論されたように示される。これらのソーステキスト例は 、C++プログラム言語で書かれている。図10及び11、12に明らかなシグネチャ値 は任意であり、何らかのアルゴリズムを利用して引き出されない。 図7を参照すると、最初のソースファイルA、1098はクラスCを宣言してデー タメンバXを宣言して、整数型であり、メンバ機能フレッド及びバニイを宣言し て、引数を取らずに整数を返す。 図8を参照すると、第2のソースファイルBが示される。ソースファイルBは 、機能フレッド及びバニイを画定する。機能フレッドは、フレッドが引き出され ることに対して、CオブジェクトのXメンバの値を返して画定される。機能バニ イは、バニイが引き出されることに対して、Cオブジェクトに対して引き出され るフレッドの結果を返して画定される。 図9は、エディットの際にソースファイルがそこで変更される、図7に先に示 されたソースファイルAに変更を加えることを示す。この例では、型がこれまで は整数であった、Xの宣言された型が、浮動小数点に変更される。フレッド及び バニイの原文の定義は変更されないままである。 さらに図10を参照すると、ソースA、1098のコンパイルが示される。ソースフ ァイルA、1098、の形成は、最初のプログラムユニット1100を発生する。プログ ラムユニット1100は、ソースファイルA、1098内に含まれる最小の各々にコンパ イル可能な要素を示す。プログラムユニット1100の生成は、結果としてプログラ ムオブジェクト1110及び1120、1130の生成する。プログラムオブジェクト1110は 、データメンバXの宣言を示してシグネチャを含み、この例101では、初期状態 が空である従属集合を含む。機能フレッドに関する宣言は、またシグネチャを有 し、この例37では、初期状態が空である従属集合を含む、プログラムオブジェク ト1120内で具象化される。プログラムオブジェクト1120が機能宣言を示されるの で、これは結果としてILシンボルを生成する。それゆえに、プログラムオブジ ェクト1120内のILシンボルフィールドのポインタはILシンボル1140に向ける ように設定される。ILシンボル1140は、古い定義に対するポインタ及び同時に ヌルに設定される新しい定義に対するポインタを含む。 類似した方法で、機能バニイに対する機能宣言は、この例のように、シグネチ ャ値483を有し、初期値が空である従属集合を有する、プログラムオブジェクト1 130を結果として生成する。 要約すると、ソースファイルAの形成は、3つのプログラムオブジェクトの生 成を結果として生じる、1つのプログラムユニットの生成に終わる。機能を宣言 するプログラムオブジェクトはILシンボルの生成を結果として生じる。データ メンバの宣言であるプログラムオブジェクトは、結果としてILシンボルの形成 を生じない。 さらに図11を参照すると、ソースファイルB、1099の形成は、2つのプログラ ムユニット1160及び1170の生成を結果として生じる。プログラムユニット1160は 、図8に先に示した、機能フレッドの構文定義を示す。またプログラムユニット 1170は、ソースファイルB内に示される機能バニイの構文定義を示す。 例として、続けて図11を参照すると、プログラムユニット1160及び1170は、そ れぞれ1つのプログラムオブジェクト1180及び1190を生成し、プログラムユニッ トの1160及び1170のプログラムオブジェクトフィールドで画定されるポインタは プログラムオブジェクト1180及び1190に向けられる。プログラムオブジェクト11 80は、プログラムオブジェクト1120により先に宣言される機能フレッドの定義を 示すプログラムオブジェクトであり、またそのような機能として、プログラムオ ブジェクト1120によって機能フレッドの宣言に応答して生成された、再度呼び出 されるであろう、ILシンボル1140に向ける。類似した方法で、プログラムオブ ジェクト1190は、プログラムオブジェクト1130によって先に宣言された機能バニ イの定義を示し、再度プログラムオブジェクト1130及び1190は機能バニイに関し てILシンボル1150に対するポインタをそれぞれ含む。このような機構が、それ によって本発明がコンパイルに際してリンクを達成するということが十分に注意 される。この特徴は、多くのコンパイルシステムで見出される共通の機能の利点 を獲得し、1つの機能もしくは静的データの断片を示すための独自の中間言語シ ンボルを生成する利点を獲得する。しかしながら本発明はコンパイルユニットを 横切ってシンボルテーブルをトラックすることができるために、全てのコンパイ ルユニット内の所定の機能に関する1つのILシンボルを有することが可能であ り、したがって分離したリンカは必要ではない。 プログラムユニット1160の形成において、インクリメンタルビルダーはプログ ラムオブジェクト1110及び1120の従属物を検知する。したがってプログラムユニ ット1160の依存集合は、プログラムオブジェクト1110及び1120(ポインタ線Dに 沿って示されるように)に対するポインタを含み、各1110及び1120の従属集合は 、 プログラムユニット1160に対するポインタが含まれるのを増大させる。類似の方 法で、プログラムユニット1170はプログラムオブジェクト1120及び1130に依存す る。したがってプログラムユニット1170の依存集合は、プログラムオブジェクト 1120及び1130(ポインタ線Cに沿って示されるように)に対するポインタを含み 、各1120及び1130の従属集合は、プログラムユニット1170に対するポインタが含 まれるのを増大させる。 システム実行におけるこの点に対する動作の要点は、データメンバXが宣言さ れて、機能フレッド及びバニイが宣言されて画定される。したがって先にヌルで ある、ILシンボル1140及び1150の定義フィールドが、さらにそれぞれコードオ ブジェクト1200及び1210に対して向けられることを設定する。コードオブジェク ト1200及び1210は、それぞれフレッド及びバニイの定義として生成される。 この点で、本発明のインクリメンタルビルダーは、ソースファイルA及びBか ら、ILシンボル及びコードオブジェクト形成して、このプログラムのプログラ ムイメージを形成する。ILシンボル及びコードオブジェクトは持続するシンボ ルテーブルに格納される。 さらに図12を参照すると、プログラムのソースファイルの1つをエディットす る結果が示される。再度図9を参照すると、ソースファイルAはここで修正され て、データメンバXの型を整数から浮動小数点に変更される。従来のコンピュー タ技術では、この変更は、ソースファイルA及びBを含む、プログラム内の全て のコードの再コンパイルを必要とする。しかしながら本発明の利点の1つは、エ ディットされる、もしくは変更手段を有するプログラムオブジェクトに依存する 、これらのプログラムユニットの再形成のみが必要であるということである。 図12には、図9で形成されたエディットの結果が示される。データメンバXを 小数点浮動型とする変更は、図7に含まれるデータメンバ宣言が図9に示される ように更新されることを必要とする。これは、プログラムユニット1100の再形成 及びプログラムオブジェクト1110、1120、1130の再形成の結果生じる。したがっ てこれらの要素は同時に再形成される。プログラムオブジェクト1120及び1130と 同様にプログラムユニット1100それ自体は、データメンバXの型の変更の結果と して変更されないままである。したがって、しかし新しいプログラムユニット11 00及びプログラムオブジェクト1120が再形成プロセスの際に形成されるので、そ れらはそれらの以前の値と同一である。しかしながらプログラムオブジェクト11 10は変更されて、データメンバXの新しい型を反映する。したがってプログラム オブジェクト1110は、さらに値409として示される新しいシグネチャを発生する 。ILシンボル1150は変更されないままである。プログラムオブジェクト1110が 同一のシグネチャに再形成されないので、その従属集合内の各プログラムユニッ トは再形成されねばならない。それゆえにプログラムユニット1160は、プログラ ムオブジェクト1180を結果として再形成してコードオブジェクト1220を結果とし て生成する、再形成が行われる。 ILシンボル1140は次のように更新される:その古い定義フィールドがその定 義フィールドの前の値(すなわちコードオブジェクト1200に向けられる)に設定 され、この定義フィールドがコードオブジェクト1200に向けられて設定される。 プログラムユニット1170及びプログラムオブジェクト1190は再形成されない。プ ログラムオブジェクト1180が再形成された後、ILシンボル1140が次のように更 新される:定義ポインタが、コードオブジェクト1200の再配置フィールドから新 しいコードオブジェクト1220の、更新されたオブジェクトコードを含む、再配置 フィールドに変更される。同時にILシンボル1140の古い定義フィールドは、ヌ ルの値から先に画定されたコードオブジェクト1200の再配置値に再設定される。 全プログラムオブジェクト及びプログラムユニット、ILシンボル、コードオブ ジェクトは、データベース内で実行されるさらにメモリ装置内で実行される、先 に議論された持続するシンボルテーブルに格納される。システム効率の結果、オ ブジェクト指向データベースは本発明の好適な実施例で利用される。 図10〜12に関しては、プログラムオブジェクト(例えば1110)の従属フィール ド及びプログラムユニット(例えば1160)の依存フィールドが、好適な実施例で は、効率的なソートを準備するポインタの2本木として実行される。これらの図 で明瞭とするために、ポインタの実際のリスト及びこれらの中で参照されるいく つかのポインタは、プログラムユニットを示す図の要素から向けられている。ポ インタの2本木を含むフィールドの概念は、当業の通常の技術を持つ者にとって は十分に公知である。 先に議論されたエディットプロセスの正味の結果は、ILシンボル1140及び11 50がそれぞれコードオブジェクト1220及び1210に向けられ、これらのILシンボ ル及びコードオブジェクト対がさらに、本発明のインクリメンタルイメージャに よって使用されるように、持続するシンボルテーブル内で利用されてそれによっ て画定されるプログラムイメージを形成して実行するということである。 従来のコンパイルシステムでは、リンカは引き出されて、オブジェクトファイ ルの形成及びオブジェクトコード内のオブジェクト間の全ての参照を決定におい てオブジェクトコードを獲得して、異なるイメージがオブジェクトファイルを使 用する新しいものを作り出す。この新しいイメージは、全てのプログラム(例え ば実行可能ファイル)もしくはプログラムの自己収容部分を示すであろう。この ような自己収容部分は、解決されない外部参照を有さず、しばしばダイナミック リンクライブラリもしくはDLLとして参照される。 本発明のシステムにおいては、インクリメンタルイメージャは、リンカによっ て実行される通常のこれらタスクのいくつかを実行する。インクリメンタルイメ ージャは、オブジェクトファイル上でこれらタスクを実行せず、予め画定される コードオブジェクト上で実行する。 オブジェクトコード要素は、それらが元の型であるように、同じ順序でもしく は起こり得るイメージ内の同じアドレスで配置される必要はない。これは、機能 及びデータ定義(例えばコードオブジェクト)のアドレスが単にファイルの開始 に関連したそれらの位置である、オブジェクトファイルの場合において、明らか に起こり得る。それゆえに定義がついに、それがオブジェクトファイル内に有す るように、実行ファイル内の同じ位置を占めるという機会はない。ファイルのヘ ッダ情報のサイズが典型的に実行可能イメージとオブジェクトファイル間で大変 に異なるゆえに、リンカが単に1つのオブジェクトファイルを必要として実効可 能イメージを作り出す場合においてもあてはまる。 本発明のシステムにおいては、コードオブジェクトは、イメージャによってラ ンタイムコードオブジェクト内に複写され、元のコードオブジェクトが行ったよ うに全く確かに同じアドレスを有することはない。コードオブジェクト及びラン タイムコードオブジェクトは同じアドレス空間に同時に存在し、したがって異な るアドレス有さねばならない。 また実行可能ファイルの開始に関してコードオブジェクトが有するアドレスと 、プログラムローダによってメモリ内にロードされる際にコードオブジェクトが 有するであろうアドレスとの間に、相当な差異がある。イメージャプロセス内の ランタイムコードオブジェクトのアドレスと、ランナプロセス内のアドレスとの 間にここに教示するシステムのさらなる差異が存在する。これは、物理的メモリ のある断片が、それが占有される全てのプロセス内の同じ論理的なアドレスを有 する必要のない、共有記憶域の本来的なプロパティである。いくつかの、しかし 全てではない、オペレションシステムは、共有記憶域ブロックのアドレスの同一 を保証する。しかしながら、これは典型的にはアプリケーションプログラマーに 関して関係なく行われるものではなく、それがオペレーションシステムの単純な 実行であるためである。 さらにまとめると、イメージを形成する際に取り扱われるオブジェクトの2つ の種類がある: A.コードオブジェクト、これはこれらの非再配置形における変換プログラム アイテムを示す。 B.ランタイムコードオブジェクト、これはこれらの再配置形における変換プ ログラムアイテムを示す。 また先の議論から、オブジェクトアドレスの3つのカテゴリーが存在し、それ らは次のように記載されねばならない: a.イメージャ/デバッガのアドレス空間内のコードオブジェクトのアドレス 。 b.イメージャ/デバッガのアドレス空間内のランタイムコードオブジェクト のアドレス。 c.ランナのアドレス空間内のランタイムコードオブジェクトのアドレス。 換言すれば、各コードオブジェクトTはアドレスTaに位置し、それに対応す るランタイムコードオブジェクトRは、イメージャによってアドレスRb及びラ ンナによってアドレスRcで見出されるメモリ内に位置する。 アドレスは、通例ポインタ(この用語はC及びPascal、C+ +のような プログラム言語において使用される)の手段によるソフトウェアによって使用さ れ る、もしくは参照(Pascal及びC+ +のようなプログラム言語において使 用される)される。どちらの形もオブジェクトの十分な絶対アドレスを容易に持 ち続ける。またハードウェア(例えばコンピュータのCPU)がアドレスを使用 すると、これは典型的にはソフトウェアがなすよりも一層複雑になる。所定のハ ードウェアのアーキテクチャを実行するトランジスタの論理を単純にする目的で 、ハードウェアによって利用されるアドレスは、無数の異なるスキームによって 形成され、そのスキームの各々はハードウェアそれ自体に依存する。例示するこ とを目的として、しかし制限せずに、これらのハードウェアアドレスは、異なる 構造に位置するもしくはアドレスを利用する命令のアドレスに関連して作られる 、2つの部分に分離できる。 したがって、アドレスの3つの消費物があると考えられる: I.オブジェクト(コードオブジェクト及びランタイムコードオブジェクト) 内でデータを読み書きする際にカテゴリーa及びbからのアドレスを使用するこ とが必要なイメージャ/デバッガ。 II.オブジェクト(まさにランタイムコードオブジェクト及びそれらの支持構 造)内でデータを読み書きする際にカテゴリーcからのアドレスを使用すること が必要なランナ。 III.データにアクセスする際にカテゴリーcからのアドレスを使用するのに 必要であって、しかししばしばランナソフトウェアであるのと同じ形(ポインタ )でそれらを使用することが可能ではない、CPUすなわちハードウェア。 この点をさらに複雑にすると、CPUは、ランタイムコードオブジェクトそれ 自体のアドレスにおいて関与しておらず、あるオフセットでその中に含まれてい る変換オブジェクトコードのアドレスにおいて関与している。 この発明におけるコードオブジェクト横断及び再配置のプロセスの目的は、ラ ンタイムコードオブジェクトの必要ような集合を確立することであり、それらの アドレスRb及びRcを確立することであり、消費物II及びIII(ランナ及びCP U)にそれらを使用することであり、CPUがRc+kに事実上関与するという ことが注目され、ここでkは、ランタイムコードオブジェクト内で変換コードオ ブジェクトをオフセットする定数(すなわち全てのランタイムコードオブジェク トに対 して同じ)である。 本発明では、多くのリンカ技術においてそうであるように、再生成レコードは 、プログラム内の所定の点で獲得されなければいけないアドレスを形成すること を記述する、データの断片である。形は参照アドレスを変更せずに、参照の発生 する場所を変更する。例えば、機能のアドレスを含むデータアイテムは通常、ア ドレスがソフトウェアによって使用されるのに適当(確実ではない)であるため に、機能に対する確実なポインタを保持する必要がある。 CPUは、ブランチテーブルと呼ばれるものを使用すると、もしくはプログラ ムによってダイナミックに(ランタイムで)確立されるアドレスを呼び出すと、 確実なアドレスが使用される。参照されるアドレスが最初に参照されなければな らないデータのある断片に含まれるために、これは間接アドレスと称される。ま たハードウェアはデータを参照すると直接アドレスをするのが適当であって、他 の機能から機能への直接参照を作る際により複雑な形を通常使用することは適当 でない。例はサブルーチンを実行する際のものである。 手順によると、本発明における再配置のプロセスは、参照の各点において形が 必要である、ランタイムコードオブジェクトの変換される完全なアドレスの1つ である。 コードオブジェクトが、本発明のシステムにおいて、プログラムイメージとし て実際に実行されるものではないので、再配置はランタイムコードオブジェクト 上にのみ再形成される。しかしながら再配置レコードは、コードオブジェクトに 結び付けられ、ランタイムコードオブジェクトには結び付けられない。再配置レ コードがイメージを形成(始めにもしくはインクリメンタルに)すると完全なラ ンタイムコードオブジェクトを形成するのに使用されるために、これは形式的で ある。 再配置を実行するには、イメージャが対応するランタイムコードオブジェクト が生成されるように全コードオブジェクトにわたって、反復適用する。各コード オブジェクトに関して、これは以下のように各再配置レコードを処理する: 1.再配置Lの型(CPUによって使用される際に獲得されるアドレスを形成 する)に注目する。 2.参照が発生するT内のオフセットOLに注目する。 3.Tに対応するコードオブジェクトのアドレスRb及びRcに注目する。 4.OLにおいて参照されるコードオブジェクトのScのアドレスに注目する。 5.アドレスRb空間において、Sc+kに対するポインタを配置する、ここで kはランタイムコードオブジェクト内の変換コードオブジェクトのオフセット定 数である。このポインタが最新の配地に関係するのであれば、最新の配置として Rc+OL+kを使用する。 イメージャ/デバッガは、ハードウェアに対して情報を作り出すのみ出なく、 またこれは、ランナに対しても情報を作り出す。そのプロセスにおいて、全ての イメージャ/デバッガが、ランナと連絡する時にはいつも、カテゴリーcからの アドレスを使用することを確実とする必要があるために、再配置の形及び他の複 雑性に関して心配する必要がない。空間が関わる、情報の重複を回避する必要の ある、ある事情において、ランナは事実カテゴリーbからのアドレスを受け入れ 、さらにカテゴリーcにそれらをそれ自体変換するであろう。 図13〜17は、本発明の原理に従うインクリメンタルイメージ形成の好適な実施 例を図解する。さらに図13を参照すると、プログラムイメージを形成する際のコ ードオブジェクト及びILシンボルの使用が示されている。持続するシンボルテ ーブル内に予め格納されたILシンボルが2000に示される。各ILシンボル2000 は、定義フィールド2001を含み、これは直接メモリアドレスの手段によって対応 するコードオブジェクト2010に向けて指示するコードオブジェクトポインタ2004 を含む。定義フィールド2001は、IL命令ストリーム1999によって画定される。 さらにILシンボル2000は、従属フィールド2002及び古い定義フィールド2003を 含む。随意に、さらにILシンボル2000はIL名前2005を画定する。名前2005が 、プログラマーに対して例えばデバッグモードにおいて情報を表示することのみ に使用され、イメージ生成に際して画定される、ということが特に注目される。 各ILシンボル2000は、本発明のインクリメンタルビルダーによってILストリ ーム1999の部分から形成される。 コードオブジェクトポインタ2004は、ILシンボル2000に対応するコードオブ ジェクト2010に向けて指示する。各コードオブジェクト2010は、サイズフィール ド2011及び再配置フィールド2012、コード区域2013を含む。コード区域2013は、 機能の定義及び変数の初期値の先に議論された完全に変換された機械語の実施を 含む。再配置フィールド2012は、再配置領域2020に向けて指示する、再配置ポイ ンタ2014を画定する。再配置領域2020は、再配置オフセットのベクトル及びIL シンボル参照を含む。 再配置ポインタ2014が指示するILシンボルは、帰納的なプロセスの場合には 、コードオブジェクト2010の機能を引き出した同じILシンボルであり、もしく は全く異なるILシンボルに向けて指示するであろう。 更新テーブルは、イメージャに関するビルダーによって状態を維持され、それ によって変更されているコードオブジェクトをイメージャが配置可能なエディッ トもしくはソースファイルに対する他の変更が以下に続く。 さらに図14を参照すると、ランタイムコードオブジェクトの形成が議論される 。各ILシンボル1000は、結果としてランタイムコードオブジェクト1010の形成 を生じる。本発明のインクリメンタルイメージャ200が解析コードオブジェクト1 010を含むので、付加ILシンボル1000がイメージに加えられる。これらのコー ドオブジェクトの各々が、先に議論したように、再配置テーブル1020に対するポ インタを含み、これは順番にILシンボル1000を指示し、細かい細分性の典型と しては、これは順番にそのコードオブジェクト1010その他を指示する。さらなる ILシンボル1000が付加されない点では、プログラムを画定する全てのコードオ ブジェクト1020が形成される。イメージ内の全てのコードオブジェクトが形成さ れると、推移閉包の状態が存在することが命じられる。 ランタイムコードオブジェクトは、それらの構造の中に含まれる付加作業用記 憶領域を有し、再配置に際して機械依存形に変更される参照を備える、コードオ ブジェクトの複写である。コードオブジェクトの複写が作られる以前に、プロー ブ及びランナを始動することが必要である。ランタイムローダは、ランタイムコ ードオブジェクトにコードオブジェクトを複写する前に、始動する。共有メモリ の使用が2つのプロセスが、すなわちプローブ及びランナが、2つのプロセス間 にメモリ上で割り当てられることに適台しなければならないからである。各ラン タイムコードオブジェクトは、各プロセスに対して1つの、2つのアドレスに対 する参照を含む。 さらに図15を参照すると、持続するアドレス例えば100、を有する各コードオ ブジェクト1020に対して、インクリメンタルイメージャ200がプローブ300に指令 しメモリを割り当てる。さらにプローブ300はランナ400に指令してメモリを割り 当てる。プローブ300及びランナ400が、2つの別個のプロセスにおける実行の2 つの分離したスレッド下で操作され、プロセス境界399によって論理的に分離さ れるということが重要であり、思い出される。コマンドに応答してメモリを割り 当てる、ランナ400は、機械アドレス例えば550を割り当てて、このアドレス横断 プロセス境界399をプローブ300に返す。プローブ300は、それをランタイムコー ドオブジェクトに関連付けるインクリメンタルイメージャ200にアドレスを渡す 。 本発明の好適な実施例において、プローブは以下の擬似コード表現にしたがっ て実行される: while(真)do イメージャ、ランナからのコマンドを受け入れる イメージャ=> コミュニケーションパイプ内にデータを流す ランナにデータを送る ランナ=> ストリームデータランナを集める イメージャにデータを送る end while 本発明の好適な実施例において、ランナは以下の擬似コード表現にしたがって 実行される: Startup Thread: コミュニケーションスレッドを始動する アプリケーションスレッドを始動する プログラム終了を待つ Application Thread: アプリケーション始動を待つ プログラムエントリポイントを探す プログラムエントリポイントから実行する スタートアップスレッドにプログラム終了を送る アプリケーションスレッドを終了する Communication Thread: terminate-false while(not terminate)loop プローブからのコマンドを受け入れる=> SUICIDE=> terminate=true DEFINE ENTRY=> プログラムエントリポイントを設定する ALLOCATE=> 共有メモリのブロックを割り当てる DEALLOCATE=> 共有メモリブロックの割り当てを解除する REMAP=> 再度メモリ内にすでに割り当てられたブロックをマ ップする ACTIVATE=> フィックスアップを実行して、プログラム内の静的 データを初期化する アプリケーションスレッドに始動アプリケーション を送る READ MEMORY=> デバッガにランナメモリからのデータを送る WRITE MEMORY=> ランナメモリ内にデバッガからのデータを書き込む end accept プローブに応答データを送る end while コミュニケーションスレッドの終了 プログラムのランタイムイメージを生成するために、各コードオブジェクトに 関して、図16に示されるように、このプロセスが繰り返される。その図を参照す ると、プログラムイメージを生成するために、開発者がデバッガ600に指令して 、ステップ1において指導される。デバッガ600はイメージャ200をステップ2に おいて順序付けて、先に議論したように形成する。各コードオブジェクト(図示 せず)に関して、イメージャ200はプローブ300に指令して、ステップ4において メモリを割り当てる。プローブ300は、ランナ400を順序付け、ステップ5におい てメモリを割り当てる。ランナ400は、機械メモリを割り当てて、プローブ300に アドレスを返す。プローブ300は、イメージャ200にアドレスを返す。これは、結 果として、次のコードオブジェクトを要求して生じさせる。ステップ2〜5は、 ファイル内の各コードオブジェクトに関して繰り返される。ランナが、最終のコ ードオブジェクトに対して機械メモリの割り当てを終了すると、それが6におい てメモリの割り当てが終了しているということをプローブ300に知らせる。応答 して、プローブ300は、全てのメモリが割り当てられたことをステップ7におい てイメージャ200に知らせる。イメージャはステップ8において形成が完了した ことをデバッガに知らせる。この点で、イメージがメモリ内に完全に形成され、 プログラムが実行され得る。 続いて図16を参照すると、イメージが形成される、ステップ8におけるデバッ ガ600による受け取りに応答して、デバッガ600はステップ9においてプローブ30 0に直接指令して、アプリケーションを始動する。この指令は、ステップ10にお いて順にランナ400に伝達される。これはイメージが実行されるときに、メモリ マップデータを利用する実行の2つの分離したスレッドにおいて、プログラムを 同時に具象化するイメージを結果として生じる。 このプロセスの際に、アプリケーションが機能しなくなると、コンピュータの オペレーションシステムが、機能の停止の機械アドレス及び機能の停止の本質に 関連する他の情報に加えて、随意にオペレーションシステムに依存するデバッガ に機能の停止を報告する。デバッガは、機械アドレスをコードアドレスに変換し て、他の機能の停止情報に加えて、開発者に機能の停止及びそのコードアドレス 、機能停止のデータを知らせる。 開発者は、この情報を使用して、ソースコードファイルのエディットを行う。 一度ソースファイルがエディットされると、開発者はデバッガに指令して、プロ グラムの実行を再開する。 デバッガは、ステップ11において、イメージャ200に指令して、図17に示され るようにエディットによって影響を及ぼされたコードオブジェクトを更新する。 その図を参照すると、ILシンボル901は、順にランタイムコードオブジェクト9 03の生成を引き出すコードオブジェクト902の生成を結果として生じる。説明の 目的で、この例では、ランタイムコードオブジェクト903は第2のランタイムコ ードオブジェクト904によって参照される。開発者が、プログラムの機能の停止 例えば不適当に画定された機能901を結果として生じるソースコードの部分をエ ディットした後、機能を表すILシンボル901からのポインタは、古いコードオ ブジェクト902から修正機能を具象化する新しいコードオブジェクト905へと再設 定される。この機能をもたらすために、古いランタイムコードオブジェクト903 のポインタ910は、それの収容されるコードのライン0から新しいランタイムコ ードオブジェクト906の収容されるコードのライン0へ再設定される。 本発明は、当業の通常の技術者にとって公知である、如何なるデータの格納及 び変換手段においても実行され得る。例示を目的として、しかし制限せずに、こ のような手段は、制限される必要はないが、磁気ディスク及びテープ、ハードド ライブ等を含む磁気手段;RAM及びフラッシュメモリ等を含む電子式メモリ手 段;パンチテープ及びホリレスカードを含む機械的なデータ格納材料;さらにC D−ROM及び「floptical」装置等の光学手段を含む。その上、本発明の原理 は、インターネットに制限されず、電話回線もしくは狭い範囲及び広い範囲での ネットを含む他の電子式ネットワークを含む何らかの手段にわたってそれの転送 を特に意図する。さらに本発明の原理は、格納もしくは使用、搬送、売り出し、 リース、貸し出し、何らかの及び全てのそれの他の処理に関してこのような実行 を特に意図する。 本発明は、その特徴のある好適な実施例を考慮して詳細に示され、記述された 。しかしながら、添付される特許請求の範囲に述べられるような本発明の精神及 び範囲を逸脱することなく、原型及び細部において様々な変化及び変更をなすこ とが、当業の通常の熟練した者にとっては明白なことである。ここに開示される 発明は、特にここに開示されていない何らかの要素なしに実践され得る。
───────────────────────────────────────────────────── フロントページの続き (81)指定国 EP(AT,BE,CH,DE, DK,ES,FI,FR,GB,GR,IE,IT,L U,MC,NL,PT,SE),OA(BF,BJ,CF ,CG,CI,CM,GA,GN,ML,MR,NE, SN,TD,TG),AP(GH,KE,LS,MW,S D,SZ,UG),UA(AM,AZ,BY,KG,KZ ,MD,RU,TJ,TM),AL,AM,AT,AU ,AZ,BA,BB,BG,BR,BY,CA,CH, CN,CU,CZ,DE,DK,EE,ES,FI,G B,GE,HU,IL,IS,JP,KE,KG,KP ,KR,KZ,LC,LK,LR,LS,LT,LU, LV,MD,MG,MK,MN,MW,MX,NO,N Z,PL,PT,RO,RU,SD,SE,SG,SI ,SK,TJ,TM,TR,TT,UA,UG,UZ, VN (72)発明者 ハンビー,ジョン アメリカ合衆国ワシントン州98077,イサ クォー,サウス・イースト・42・プレイ ス・18151 (72)発明者 ロウ,パトリック アメリカ合衆国ワシントン州98058,レン トン,サウス・イースト・170・コート・ 16045

Claims (1)

  1. 【特許請求の範囲】 1.バッチ再コンパイル、再リンク、再ロードの必要もしくは開発者がエラー状 態を再現する必要がない、プログラムのリアルタイムデバッグをコンパイルとし て可能とする、インタラクティブコンピュータプログラム開発システムであって 、このシステムは: コンピュータシステムが、ソースコードファイルの所定の集合を有し、第1及 び第2の内部プロセスを有し; デバッガが、ソースコードファイルの前記所定の集合をデバッグするために前 記コンピュータシステム内に内在し; インクリメンタルビルダーが、引き出されると、前記ソースコードファイル及 びそれらの対応する中間言語(IL)シンボルをコードオブジェクト内に変換す る前記コンピュータシステム内に内在し、前記インクリメンタルビルダーは前記 コードオブジェクト及びプログラムユニットを実行可能である形成プログラム内 に形成するように、前記第1の内部プロセスに結び付けられ; 持続するシンボルテーブルが、前記コードオブジェクト及びILシンボルを格 納するように前記コンピュータシステム内に内在し; インクリメンタルイメージャが、前記コードオブジェクト及びILシンボルを 利用してランタイムコードオブジェクト形成する前記コンピュータシステム内に 内在し、前記インクリメンタルイメージャは、実行可能なプログラムイメージを 形成して前記ランタイムコードオブジェクトと結合するように、前記第1の内部 プロセスと結び付けられ、前記インクリメンタルイメージャは、前記ランタイム コードオブジェクトの各エー々の開始に当たり分岐命令を導入し; ランナが、前記形成プログラムを前記第2の内部プロセス内で実行する前記コ ンピュータシステム内に内在し、前記ランナは、前記第2の内部プロセス内で、 前記プログラムイメージを仕上げて、前記プログラムイメージを実行し; プローブモジュールが、前記インクリメンタルイメージャ及び前記ランナの動 作を調整するように、前記コンピュータシステム内及び前記第1の内部プロセス 内に内在し; それによって前記プログラムを画定して共有メモリデータを使用する前記プロ グラムイメージが、同時に実行されて前記プログラムを画定する前記ソースコー ド内の変更を反映するようにインクリメンタルに操作される、 ことを特徴とするシステム。 2.前記コードオブジェクト及び前記ILシンボルが、オブジェクトコードファ イルを置き換え、前記ランタイムコードオブジェクトが実効可能ファイルを置き 換える、請求項1記載のシステム。 3.前記ランナが、前記イメージャと共同してロードする機能を実行するように 動作する、請求項2記載のシステム。 4.オブジェクトファイルもしくは何らかの実行可能ファイルを作り出すことな く、結果として生じるプログラムの実行後に、記憶のためのメモリ内にコードを 形成する方法。 5.前記コードがコードオブジェクトであり、前記メモリが持続するメモリであ る、請求項4記載の方法。 6.少なくともコードオブジェクト及び中間言語シンボルを持続するシンボルテ ーブル内に格納するステップをさらに含む、請求項5記載の方法。 7.プログラムユニット及びプログラムオブジェクト、他のデータ構造を前記持 続するシンボルテーブル内に格納するステップをさらに含む、請求項6記載の方 法。 8.前記実行するプログラムが更新することを目的として同時に操作されること が可能で、前記プログラムが前記操作の際に終了もしくは再始動しない、請求項 7記載の方法。 9.同時に操作される前記ステッブが、イメージの更新を容易にするようにラン タイムコードオブジェクトの開始に当たり、ジャンプ命令を使用する、請求項8 記載の方法。 10.同じ内部データ構造が、インクリメンタルイメージが使用されるように実 行可能ファイルを作り出すために使用される、請求項1記載のシステム。 11.前記コードオブジェクト及び中間言語シンボルから実行可能ファイルを作 り出すようにエクストラクタをさらに含み、それによってソースファイルに返す 必要が排除される、請求項10記載のシステム。 12.コードオブジェクトに表現式もしくは命令文を変換するステップ; ランタイムコードオブジェクトに対応する実行するイメージを更新するステッ プ;さらに インタラクティブ表現式評価もしくは命令文実行の目的で、デバッグにおいて 、ランタイムコードオブジェクトを実行するステッブ; とをさらに含む、請求項6記載の方法。 13.条件付ブレークポイントに関して使用される変換及び更新、実行のステッ プをさらに含む、請求項12記載の方法。
JP9530969A 1996-02-29 1997-02-26 インタラクティブソフトウェア開発システム Pending JP2000507373A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/608,820 1996-02-29
US08/608,820 US5764989A (en) 1996-02-29 1996-02-29 Interactive software development system
PCT/US1997/002177 WO1997032250A1 (en) 1996-02-29 1997-02-26 Interactive software development system

Publications (1)

Publication Number Publication Date
JP2000507373A true JP2000507373A (ja) 2000-06-13

Family

ID=24438154

Family Applications (1)

Application Number Title Priority Date Filing Date
JP9530969A Pending JP2000507373A (ja) 1996-02-29 1997-02-26 インタラクティブソフトウェア開発システム

Country Status (6)

Country Link
US (1) US5764989A (ja)
EP (1) EP0883844A1 (ja)
JP (1) JP2000507373A (ja)
AU (1) AU1956897A (ja)
CA (1) CA2248181A1 (ja)
WO (1) WO1997032250A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013123295A1 (en) * 2012-02-16 2013-08-22 Microsoft Corporation Rasterization of compute shaders

Families Citing this family (72)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2795244B2 (ja) * 1996-01-17 1998-09-10 日本電気株式会社 プログラムデバッグシステム
GB2312973B (en) * 1996-05-08 2000-05-03 Ibm Programming aid
US5991535A (en) * 1996-07-03 1999-11-23 Sun Microsystems, Inc. Visual composition tool for constructing application programs using distributed objects on a distributed object network
MY126363A (en) 1996-10-25 2006-09-29 Gemalto Sa Using a high level programming language with a microcontroller
US5937191A (en) * 1997-06-03 1999-08-10 Ncr Corporation Determining and reporting data accessing activity of a program
US5901315A (en) * 1997-06-13 1999-05-04 International Business Machines Corporation Method for debugging a Java application having native method dynamic load libraries
CA2211505C (en) * 1997-07-25 2002-02-05 Ibm Canada Limited-Ibm Canada Limitee Setting instance breakpoints in object oriented computer programs
US7434172B1 (en) 1997-10-21 2008-10-07 International Business Machines Corporation Color and symbol coded visual cues for relating screen items to each other
US5953526A (en) * 1997-11-10 1999-09-14 Internatinal Business Machines Corp. Object oriented programming system with displayable natural language documentation through dual translation of program source code
US5995975A (en) * 1997-11-25 1999-11-30 International Business Machines Corporation Dictionary based process for object containment
US6230318B1 (en) * 1998-02-24 2001-05-08 Microsoft Corporation Application programs constructed entirely from autonomous component objects
US6704927B1 (en) * 1998-03-24 2004-03-09 Sun Microsystems, Inc. Static binding of dynamically-dispatched calls in the presence of dynamic linking and loading
US6113645A (en) * 1998-04-22 2000-09-05 Scientific Learning Corp. Simulated play of interactive multimedia applications for error detection
US6681280B1 (en) 1998-10-29 2004-01-20 Fujitsu Limited Interrupt control apparatus and method separately holding respective operation information of a processor preceding a normal or a break interrupt
GB9825102D0 (en) 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
US6637020B1 (en) * 1998-12-03 2003-10-21 International Business Machines Corporation Creating applications within data processing systems by combining program components dynamically
US7526468B2 (en) * 1999-01-08 2009-04-28 Computer Associates Think, Inc. System and method for recursive path analysis of DBMS procedures
US6446257B1 (en) * 1999-02-04 2002-09-03 Hewlett-Packard Company Method and apparatus for pre-allocation of system resources to facilitate garbage collection
US6357021B1 (en) * 1999-04-14 2002-03-12 Mitsumi Electric Co., Ltd. Method and apparatus for updating firmware
JP4118456B2 (ja) * 1999-06-29 2008-07-16 株式会社東芝 プログラム言語処理システム、コード最適化方法、及び機械読み出し可能な記憶媒体
US7152228B2 (en) * 1999-07-08 2006-12-19 Science Applications International Corporation Automatically generated objects within extensible object frameworks and links to enterprise resources
US6970844B1 (en) 1999-08-27 2005-11-29 Computer Sciences Corporation Flow designer for establishing and maintaining assignment and strategy process maps
US6961708B1 (en) 1999-08-27 2005-11-01 Computer Sciences Corporation External interface for requesting data from remote systems in a generic fashion
GB9921720D0 (en) * 1999-09-14 1999-11-17 Tao Group Ltd Loading object-oriented computer programs
US6463578B1 (en) * 1999-11-23 2002-10-08 International Business Machines Corporation Systems, methods and computer program products for debugging java server page files using compiled java class file modifications
US6757893B1 (en) 1999-12-17 2004-06-29 Canon Kabushiki Kaisha Version control system for software code
US6986128B2 (en) * 2000-01-07 2006-01-10 Sony Computer Entertainment Inc. Multiple stage program recompiler and method
GB0004090D0 (en) * 2000-02-22 2000-04-12 Innovation Venture Ltd Application programming system and method of operation thereof
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
US6915509B1 (en) * 2000-06-28 2005-07-05 Microsoft Corporation Method and system for debugging a program
US6941353B1 (en) * 2000-06-29 2005-09-06 Auran Holdings Pty Ltd E-commerce system and method relating to program objects
AU2002226901A1 (en) * 2000-11-17 2002-05-27 Proceler, Inc. An instruction set architecture to aid code generation for hardware platforms multiple heterogeneous functional units
US20030023950A1 (en) * 2001-01-10 2003-01-30 Wei Ma Methods and apparatus for deep embedded software development
US7392515B2 (en) * 2001-02-09 2008-06-24 International Business Machines Corporation Program components having multiple selectable implementations
US20030177140A1 (en) * 2001-02-28 2003-09-18 Answer Financial, Inc. Method for developing application programs using program constructs
US7426717B1 (en) * 2001-11-27 2008-09-16 Adobe Systems Incorporated System and method for debugging files in a runtime environment
US6976254B2 (en) * 2001-11-28 2005-12-13 Esmertec Ag Inter-method control transfer for execution engines with memory constraints
US20030145309A1 (en) * 2002-01-18 2003-07-31 Rajendra Inamdar Probe description language
US8769517B2 (en) * 2002-03-15 2014-07-01 International Business Machines Corporation Generating a common symbol table for symbols of independent applications
US7174547B2 (en) * 2002-03-25 2007-02-06 Ciena Corporation Method for updating and restoring operating software in an active region of a network element
US7844734B2 (en) * 2002-11-18 2010-11-30 Innopath Software, Inc. Dynamic addressing (DA) using a centralized DA manager
EP1465069B1 (en) * 2003-04-01 2017-01-25 Sap Se Method and computer system for activation of source files
US20050038832A1 (en) * 2003-08-14 2005-02-17 International Business Machines Corporation Application error recovery using solution database
US7383539B2 (en) * 2003-09-18 2008-06-03 International Business Machines Corporation Managing breakpoints in a multi-threaded environment
US7150006B2 (en) * 2003-11-03 2006-12-12 Microsoft Corporation Techniques for managed code debugging
US7437712B1 (en) * 2004-01-22 2008-10-14 Sprint Communications Company L.P. Software build tool with revised code version based on description of revisions and authorizing build based on change report that has been approved
US7523277B1 (en) * 2005-03-30 2009-04-21 Symantec Operating Corporation Transient point-in-time images for continuous data protection
US8407206B2 (en) * 2005-05-16 2013-03-26 Microsoft Corporation Storing results related to requests for software development services
US7770152B1 (en) * 2005-05-20 2010-08-03 Oracle America, Inc. Method and apparatus for coordinating state and execution context of interpreted languages
US7644396B2 (en) * 2005-11-29 2010-01-05 Microsoft Corporation Optimal program execution replay and breakpoints
US20070168975A1 (en) * 2005-12-13 2007-07-19 Thomas Kessler Debugger and test tool
US8458661B2 (en) * 2006-03-31 2013-06-04 Ebay Inc. Distributed parallel build system
US20080209401A1 (en) * 2007-02-22 2008-08-28 Microsoft Corporation Techniques for integrating debugging with decompilation
TWI416410B (zh) * 2008-04-11 2013-11-21 Hon Hai Prec Ind Co Ltd 可執行文件版本更新系統及方法
US8266597B2 (en) * 2008-06-16 2012-09-11 International Business Machines Corporation Dynamically patching computer code using breakpoints
US8874928B2 (en) * 2008-10-31 2014-10-28 Apple Inc. System and method for obfuscating constants in a computer program
US8276021B2 (en) * 2009-12-18 2012-09-25 Microsoft Corporation Concurrency test effectiveness via mutation testing and dynamic lock elision
US20110202384A1 (en) * 2010-02-17 2011-08-18 Rabstejnek Wayne S Enterprise Rendering Platform
US20110271257A1 (en) * 2010-04-29 2011-11-03 International Business Machines Corporation Defect management in integrated development environments
US8997049B1 (en) 2010-05-21 2015-03-31 Cadence Design Systems, Inc. Method and system for debugging of compiled code using an interpreter
US8856724B2 (en) * 2011-06-20 2014-10-07 Ebay Inc. Systems and methods for incremental software development
US8898628B2 (en) 2011-09-23 2014-11-25 Ahmad RAZA Method and an apparatus for developing software
US8914778B2 (en) 2012-11-05 2014-12-16 International Business Machines Corporation Data placement for execution of an executable
US8863099B2 (en) * 2012-11-05 2014-10-14 International Business Machines Corporation Compilation and placement of instructions in a memory system
US9134962B1 (en) * 2013-03-15 2015-09-15 Sanctum Solutions, Inc. Interactive content development
US9262300B1 (en) * 2014-06-24 2016-02-16 Google Inc. Debugging computer programming code in a cloud debugger environment
US10169192B2 (en) * 2015-11-11 2019-01-01 International Business Machines Corporation Automatic collection and presentation of runtime data semantics
US9760349B1 (en) * 2016-11-09 2017-09-12 Red Hat, Inc. Managing different software dependencies associated with source code
US10877743B2 (en) * 2016-11-29 2020-12-29 Mitsubishi Electric Corporation Control apparatus for updating stored program and method for updating program stored in control apparatus
US10762211B2 (en) * 2018-04-12 2020-09-01 United States Of America, As Represented By The Secretary Of The Navy Source code diagnostic instrument
US11263308B2 (en) 2019-03-25 2022-03-01 Micron Technology, Inc. Run-time code execution validation
US11275580B2 (en) * 2020-08-12 2022-03-15 Servicenow, Inc. Representing source code as implicit configuration items

Family Cites Families (37)

* 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
US4802165A (en) * 1986-10-08 1989-01-31 Enteleki, Inc. Method and apparatus of debugging computer programs
US4809170A (en) * 1987-04-22 1989-02-28 Apollo Computer, Inc. Computer device for aiding in the development of software system
US4953084A (en) * 1987-11-16 1990-08-28 Hewlett-Packard Company Method and apparatus using variable ranges to support symbolic debugging of optimized code
US5201050A (en) * 1989-06-30 1993-04-06 Digital Equipment Corporation Line-skip compiler for source-code development system
US5193191A (en) * 1989-06-30 1993-03-09 Digital Equipment Corporation Incremental linking in 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
AU638999B2 (en) * 1989-06-30 1993-07-15 Digital Equipment Corporation 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
EP0423989A3 (en) * 1989-10-16 1992-09-23 Hewlett-Packard Company Software compiler and linker with improved line number table
US5204960A (en) * 1990-01-08 1993-04-20 Microsoft Corporation Incremental compiler
US5247651A (en) * 1990-04-17 1993-09-21 At&T Bell Laboratories Interactive computer program specification and simulation system
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
US5560009A (en) * 1990-09-21 1996-09-24 Hewlett-Packard Company Generating symbolic debug information by merging translation and compiler debug information
US5459868A (en) * 1990-11-30 1995-10-17 St Computer Systems & Services Interpretive object-oriented facility which can access pre-compiled classes
US5307499A (en) * 1990-11-30 1994-04-26 Singapore Computer Systems Limited Interpretive object-oriented facility which can access pre-compiled classes
US5291583A (en) * 1990-12-14 1994-03-01 Racal-Datacom, Inc. Automatic storage of persistent ASN.1 objects in a relational schema
US5432795A (en) * 1991-03-07 1995-07-11 Digital Equipment Corporation System for reporting errors of a translated program and using a boundry instruction bitmap to determine the corresponding instruction address in a source program
US5265254A (en) * 1991-08-14 1993-11-23 Hewlett-Packard Company System of debugging software through use of code markers inserted into spaces in the source code during and after compilation
US5355494A (en) * 1991-12-12 1994-10-11 Thinking Machines Corporation Compiler for performing incremental live variable analysis for data-parallel programs
CA2061298C (en) * 1992-02-17 1996-12-03 Douglas J. Mortson Method for detecting critical failures during the building of complex computer programs from source code parts
US5357628A (en) * 1992-03-25 1994-10-18 Intel Corporation Computer system having integrated source level debugging functions that provide hardware information using transparent system interrupt
JPH06103048A (ja) * 1992-04-24 1994-04-15 Nec Corp プログラム開発支援システム
US5327562A (en) * 1992-05-06 1994-07-05 Microsoft Corporation Method for implementing virtual function tables in a compiler for an object-oriented programming language
US5371747A (en) * 1992-06-05 1994-12-06 Convex Computer Corporation Debugger program which includes correlation of computer program source code with optimized object code
WO1993025964A1 (en) * 1992-06-05 1993-12-23 Convex Computer Corporation Computer program debugging in the presence of compiler synthesized variables
JPH0683597A (ja) * 1992-09-02 1994-03-25 Matsushita Electric Ind Co Ltd オブジェクト指向プログラム開発装置およびオブジェクト指向プログラム開発方法
US5404525A (en) * 1992-09-30 1995-04-04 International Business Machines Corporation Efficient method router that supports multiple simultaneous object versions
US5339433A (en) * 1992-11-19 1994-08-16 Borland International, Inc. Symbol browsing in an object-oriented development system
JPH06161726A (ja) * 1992-11-20 1994-06-10 Toshiba Corp ツールデータ再利用装置
FR2701580B1 (fr) * 1993-02-10 1995-03-24 Bull Sa Procédé d'administration d'applications avec des protocoles standards.
JP3178151B2 (ja) * 1993-03-19 2001-06-18 富士ゼロックス株式会社 オブジェクト指向言語のメッセージコンパイル装置
US5561800A (en) * 1993-05-19 1996-10-01 Hewlett-Packard Company Method and apparatus for incrementally linking modified routines into software
US5519866A (en) * 1993-06-28 1996-05-21 Taligent, Inc. Method and apparatus of incrementally linking components of a modeled computer program
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
US5581696A (en) * 1995-05-09 1996-12-03 Parasoft Corporation Method using a computer for automatically instrumenting a computer program for dynamic debugging

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013123295A1 (en) * 2012-02-16 2013-08-22 Microsoft Corporation Rasterization of compute shaders
US9529575B2 (en) 2012-02-16 2016-12-27 Microsoft Technology Licensing, Llc Rasterization of compute shaders

Also Published As

Publication number Publication date
WO1997032250A1 (en) 1997-09-04
US5764989A (en) 1998-06-09
AU1956897A (en) 1997-09-16
EP0883844A1 (en) 1998-12-16
CA2248181A1 (en) 1997-09-04

Similar Documents

Publication Publication Date Title
JP2000507373A (ja) インタラクティブソフトウェア開発システム
US5848274A (en) Incremental byte code compilation system
US5313387A (en) Re-execution of edit-compile-run cycles for changed lines of source code, with storage of associated data in buffers
US5325531A (en) Compiler using clean lines table with entries indicating unchanged text lines for incrementally compiling only changed source text lines
US5182806A (en) Incremental compiler for source-code development system
US5170465A (en) Incremental-scanning compiler for source-code development system
US5201050A (en) Line-skip compiler for source-code development system
US5193191A (en) Incremental linking in source-code development system
US8607208B1 (en) System and methods for object code hot updates
US6067641A (en) Demand-based generation of symbolic information
US7992141B2 (en) Method and apparatus for building executable computer programs using compiled program libraries
US6795963B1 (en) Method and system for optimizing systems with enhanced debugging information
US6018628A (en) Method of implementing parameterized types to be compatible with existing unparameterized libraries
US7367015B2 (en) Method and system for software program editing in common language runtime environment (CLRE)
US7516441B2 (en) Method and system for program editing and debugging in a common language runtime environment
EP2359247B1 (en) Transforming user script code for debugging
JP4833206B2 (ja) 最適化されたプログラムのためのアンワインド情報の生成
US20060200806A1 (en) Apparatus, system, and method for trace insertion
Felber et al. Transactifying applications using an open compiler framework
US20090319554A1 (en) Unified metadata for external components
JPH09506722A (ja) モデリング・システム
Bailey et al. A formal model and specification language for procedure calling conventions
US20090320007A1 (en) Local metadata for external components
US5301327A (en) Virtual memory management for source-code development system
US7624381B1 (en) Portable detection of start and completion of object construction