(57)【特許請求の範囲】
【請求項１】
コンパイラを備えるコンピュータ・システムであって、前記コンパイラにより、第１のコード・モジュールから第１のコンパイル・モジュールを生成する機能が実現され、前記機能は、
前記第１のコード・モジュールに存在しない名称に対してコールするコーラ・ルーチンを識別する機能と、
前記名称のファンクションとして別の名称を生成し、前記別の名称の弱いバージョンを生成する機能と、
第１のインタフェースを介して１つ又は複数のパラメータ・セットを転送し、前記別の名称に対してコールする旨の前記コーラ・ルーチンをコンパイルする機能と、
前記別の名称の前記弱いバージョンで識別され、前記第１のインタフェースから第２のインタフェースを介して前記パラメータ・セットを転送し、前記名称に対してコールするよう構成されたスタブ・ルーチンを含める旨の前記第１のコード・モジュールをコンパイルする機能と
を含むシステム。
【請求項２】
請求項１記載のコンピュータ・システムであって、前記コンピュータ・システムはリンカを更に備え、前記リンカにより、
前記名称で識別された第１のエントリ・ポイントを有するコーリー・ルーチンを含む第２のコンパイル・モジュールと前記第１のコンパイル・モジュールをリンクする
機能が実現され、該機能は、
前記コーリー・ルーチンが別のエントリ・ポイントを含む場合に、前記別の名称を有する前記コーリー・ルーチンの別のエントリ・ポイントに前記コーラ・ルーチンをリンクする機能と、
前記コーリー・ルーチンが前記別のエントリ・ポイントを含まない場合、前記コーラ・ルーチンを前記スタブ・ルーチンのエントリ・ポイントにリンクし、前記スタブ・ルーチンを前記コーリー・ルーチンの前記第１のエントリ・ポイントにリンクする
機能と
を含むコンピュータ・システム。
【請求項３】
請求項１記載のコンピュータ・システムであって、前記コンパイラにより、
前記第１のコード・モジュール内のコーリー・ルーチンを識別する機能と、
前記識別されたコーリー・ルーチンの名称のファンクションとして別のエントリ・ポイント名称を生成する機能と、
前記コーリー・ルーチンの前記名称を有し、前記第２のインタフェースを介して前記パラメータ・セットを受け取るよう構成された第１のエントリ・ポイントを含め、別のエントリ・ポイント名称を有し、前記第１のインタフェースを介して前記パラメータ・セットを受け取るよう構成された別のエントリ・ポイントを含める旨の前記識別されたコーリー・ルーチンをコンパイルする機能が更に実現されるコンピュータ・システム。
【請求項４】
請求項１記載のコンピュータ・システムであって、前記第２のインタフェースは規則に対応し、前記第１のインタフェースは規則に対応しないコンピュータ・システム。
【請求項５】
請求項１記載のコンピュータ・システムであって、前記第１のインタフェースはレジスタに対応し、前記第２のインタフェースはコール・スタックに対応するコンピュータ・システム。
【請求項６】
請求項１記載のコンピュータ・システムであって、前記コンパイラにより、前記別の名称を、前記名称のファンクション、前記第１のインタフェースの表示、及び前記パラメータ・セットにおけるパラメータの数を生成する機能が更に実現されるコンピュータ・システム。
【請求項７】
適切にプログラムされたコンピュータ・システムにおいて行われる方法であって、
第１のコンパイル・モジュールを生成する旨の第１のコード・モジュールをコンパイルする工程を含み、該工程は、
前記第１のコード・モジュールに存在しない名称に対してコールするコーラ・ルーチンを識別する工程と、
前記名称のファンクションとして別の名称を生成する工程と、
前記別の名称の弱いバージョンを生成する工程と、
第１のインタフェースを介して１つ又は複数のパラメータ・セットを転送し、前記別の名称に対してコールする旨の前記コーラ・ルーチンをコンパイルする工程と、
前記別の名称の前記弱いバージョンで識別され、前記第１のインタフェースから第２のインタフェースを介して前記パラメータ・セットを転送し、前記名称に対してコールするよう構成されたスタブ・ルーチンを含める旨の前記第１のコード・モジュールをコンパイルする工程とを含む方法。
【請求項８】
請求項７記載の方法であって、前記名称で識別された第１のエントリ・ポイントを有するコーリー・ルーチンを含む第２のコンパイル・モジュールと前記第１のコンパイル・モジュールをリンクする工程を更に含み、該工程は、
コーリー・ルーチンが別のエントリ・ポイントを含む場合に、前記別の名称を有するコーリー・ルーチンの別のエントリ・ポイントに前記コーラ・ルーチンをリンクする工程と、
前記コーリー・ルーチンが前記別のエントリ・ポイントを含まない場合に、前記コーラ・ルーチンを前記スタブ・ルーチンの前記エントリ・ポイントにリンクし、前記スタブ・ルーチンを前記コーリー・ルーチンの第１のエントリ・ポイントにリンクする工程と
を含む方法。
【請求項９】
請求項７記載の方法であって、前記コンパイルする工程は更に、
前記第１のコード・モジュール内のコーリー・ルーチンを識別する工程と、
前記識別されたコーリー・ルーチンの名称のファンクションとして別のエントリ・ポイント名称を生成する工程と、
前記コーリー・ルーチンの前記名称を有し、前記第２のインタフェースを介して前記パラメータ・セットを受け取るよう構成された第１のエントリ・ポイントを含め、別のエントリ・ポイント名称を有し、前記第１のインタフェースを介して前記パラメータ・セットを受け取るよう構成された別のエントリ・ポイントを含める旨の前記識別されたコーリー・ルーチンをコンパイルする工程と
を含む方法。
【請求項１０】
請求項７記載の方法であって、前記コンパイルする工程は、複数のインタフェースのうちの選択された１つのインタフェースを介して前記パラメータ・セットを転送する旨の前記コーラ・ルーチンをコンパイルする工程を更に含む方法。
【請求項１１】
請求項１０記載の方法であって、前記コンパイルする工程は、前記パラメータ・セットのパラメータの値に基づいて前記複数のインタフェースのうちの選択された１つのインタフェースを介して前記パラメータ・セットを転送する旨の前記コーラ・ルーチンをコンパイルする工程を更に含む方法。
【請求項１２】
請求項７記載の方法であって、前記コンパイルする工程は、複数の場所からの複数のパラメータを合成し、前記第１のインタフェースを介して複数のパラメータを転送する旨の前記コーラ・ルーチンをコンパイルする工程を更に含む方法。
【請求項１３】
第１のコンパイル・モジュールを生成する旨の第１のコード・モジュールをコンパイルする機能をコンピュータ・システムに実現させるためのコンパイラを記録させたコンピュータ読み取り可能な記録媒体であって、前記機能は、
第１のコード・モジュールに存在しない名称に対してコールするコーラ・ルーチンを識別する機能と、
前記名称のファンクションとして別の名称を生成し、前記別の名称の弱いバージョンを生成する機能と、
第１のインタフェースを介して１つ又は複数のパラメータ・セットを転送させ、前記別の名称に対してコールする旨の前記コーラ・ルーチンをコンパイルする機能と、
前記別の名称の前記弱いバージョンで識別され、前記第１のインタフェースから第２のインタフェースを介して前記パラメータ・セットを転送し、前記名称に対してコールするよう構成されたスタブ・ルーチンを含める旨の前記第１のコード・モジュールをコンパイルする機能と
を含むコンピュータ読み取り可能な記録媒体。
【請求項１４】
請求項１３記載のコンピュータ読み取り可能な記録媒体であって、前記名称で識別されたエントリ・ポイントを有するコーリー・ルーチンを含む第２のコンパイル・モジュールと前記第１のコンパイル・モジュールをリンクする機能をコンピュータ・システムに実現させるためのリンカを更に記録させており、該機能は、
前記コーリー・ルーチンが別のエントリ・ポイントを含む場合に、前記別の名称を有する前記コーリー・ルーチンの前記別のエントリ・ポイントに前記コーラ・ルーチンをリンクする機能と、
前記コーリー・ルーチンが前記別のエントリ・ポイントを含まない場合、前記コーラ・ルーチンを前記スタブ・ルーチンのエントリ・ポイントにリンクし、前記スタブ・ルーチンを前記コーリー・ルーチンの第１のエントリ・ポイントにリンクする機能とを含むコンピュータ読み取り可能な記録媒体。
【請求項１５】
請求項１３記載のコンピュータ読み取り可能な記録媒体であって、前記コンパイラは、前記コンピュータ・システムに
前記第１のコード・モジュール内のコーリー・ルーチンを識別する機能と、
前記識別されたコーリー・ルーチンの名称のファンクションとして別のエントリ・ポイント名称を生成する機能と、
前記コーリー・ルーチンの前記名称を有し、前記第２のインタフェースを介してパラメータ・セットを受け取るよう構成された第１のエントリ・ポイントを含め、別のエントリ・ポイント名称を有し、第１のインタフェースを介して前記パラメータ・セットを受け取るよう構成された別のエントリ・ポイントを含める旨の前記識別されたコーリー・ルーチンをコンパイルする機能と
を更に実現させるコンピュータ読み取り可能な記録媒体。
【請求項１６】
請求項１３記載のコンピュータ読み取り可能な記録媒体であって、前記第１のインタフェースはレジスタに対応し、前記第２のインタフェースはコール・スタックに対応するコンピュータ読み取り可能な記録媒体。
【請求項１７】
請求項１３記載のコンピュータ読み取り可能な記録媒体であって、前記コンパイラは、前記別の名称を、前記名称、前記第１のインタフェースの表示、及び前記パラメータ・セットにおけるパラメータの数のファンクションとして、生成する機能を前記コンピュータ・システムに実現させるコンピュータ読み取り可能な記録媒体。
【請求項１８】
請求項１３記載のコンピュータ読み取り可能な記録媒体であって、前記コンパイラは、複数のインタフェースのうちの選択された１つのインタフェースを介して前記パラメータ・セットを転送する旨の前記コーラ・ルーチンをコンパイルする機能をコンピュータ・システムに実現させるコンピュータ読み取り可能な記録媒体。
【請求項１９】
請求項１８記載のコンピュータ読み取り可能な記録媒体であって、前記コンパイラは、前記パラメータ・セットのうちのパラメータの値に基づいて、複数のインタフェースのうちの選択された１つのインタフェースを介して前記パラメータ・セットを転送する旨の前記コーラ・ルーチンをコンパイルする機能を前記コンピュータ・システムに実現させるコンピュータ読み取り可能な記録媒体。
【請求項２０】
請求項１３記載のコンピュータ読み取り可能な記録媒体であって、前記コンパイラは、複数の場所からの複数のパラメータを合成し、前記第１のインタフェースを介して前記複数のパラメータを転送する旨の前記コーラ・ルーチンをコンパイルする機能を前記コンピュータ・システムに実現させるコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、一般に、インタフェースに関し、特に、非ａｂｉ準拠機能を初見のインタフェースにわたって実現するための方法及びシステムに関する。
【背景技術】
【０００２】
コンピュータ・プログラムでは、第１のコンパイル・モジュールのコーラ・ルーチンは、インタフェースを介して、別個にコンパイルされた第２のコンパイル・モジュールのコーリー・ルーチンに１つ又は複数のパラメータ・セットを転送し得、コンパイル・モジュールは、コンピュータ・システム内で実行するよう後にリンクし得る。
【０００３】
インタフェースは、アプリケーション・バイナリ・インタフェース（ＡＢＩ）などの認められた規則又は標準に対応し得る。ＡＢＩは、コンピュータ・プログラム間の低レベル・インタフェースを表し得、ファンクション・アーギュメント又はパラメータの転送及び返送を制御するための、データ・タイプ、サイズ及びアラインメントなどのコーリング規則の詳細を扱い得る。例えば、ウィンドウズ（登録商標）ＩＡ−３２及びリナックス（登録商標）・コーリング規則を使用して、ファンクション・パラメータがコール・スタック上に転送される。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
通常、修正器（プログラミング器又はコンパイラ）がコーリー、及び上記コーリーのコーラ全てに対するアクセスを有する場合の規則に反してインタフェースを構成又は修正し得る。使用可能であるのが、コーラの全てでない場合、修正されたインタフェース及び規則によるインタフェースにともに対応するようコーリーが構成されるように使用可能なコーラのインタフェースを修正し得る。これらは、他のコーラによって使用し得る。すなわち、コーリー・ルーチン、及びコーラ・ルーチンの少なくとも１つが修正される。
【課題を解決するための手段】
【０００５】
本明細書及び特許請求の範囲には、別個にコンパイルされるコーリー・ルーチンにパラメータ・セットを転送する旨のコーラ・ルーチンを複数のインタフェースで構成し、コーリー・ルーチンの構成に基づいて複数のインタフェースのうちの１つ又は複数を介して、コンパイルされたコーラ・ルーチン及びコンパイルされたコーリー・ルーチンをリンクするための方法及びシステムを開示している。
【０００６】
複数のインタフェースは、規則によるインタフェースを含み、かつ、別のインタフェースを含み得る。更に、本明細書及び特許請求の範囲には、対応する複数のインタフェースのうちの１つを介して別のコンパイル・モジュールからパラメータ・セットを受け取る旨のコーリー・ルーチンを複数のエントリ・ポイントで構成するために方法及びシステムを開示している。
【図面の簡単な説明】
【０００７】
【図１】第１のコード・モジュール及び第２のコード・モジュール、並びに、対応する第１のコンパイル・モジュール及び第２のコンパイル・モジュールを含む計算環境のグラフィック描写である。
【図２】コーラ・ルーチン及びスタブ・ルーチンを含むコンパイル・モジュールのグラフィック描写である。
【図３】コーリー・ルーチンを含むコンパイル・モジュールのグラフィック描写である。
【図４】コーラ・ルーチン及び／又はコーリー・ルーチンを含み得るコード・モジュールをコンパイルする方法のフローチャートである。
【図５】複数のインタフェースのうちの１つを介して別のコンパイル・モジュールのコーリー・ルーチンにコーラ・ルーチンからパラメータ・セットを転送する旨のコードのモジュールをコンパイルする方法のフローチャートである。
【図６】対応する複数のインタフェースのうちの１つを介してパラメータ・セットを受け取るためにコーリー・ルーチンに複数のエントリ・ポイントを供給する旨のコードのモジュールをコンパイルする方法のフローチャートである。
【図７】第２のコンパイル・モジュールのコーリー・ルーチンに第１のコンパイル・モジュールのコーラ・ルーチンをリンクする方法のフローチャートである。
【図８】図２及び図３のコンパイル・モジュールを含むコンピュータ・プログラムのグラフィック描写である（コーラ・ルーチンのコールは、コーリー・ルーチンの代替的なエントリ・ポイントにリンクされる）。
【図９】図２のコンパイル・モジュール及び図１のコンパイル・モジュールを含む別のコンピュータ・プログラムのグラフィック描写である（コーラ・ルーチンのコールはスタブ・ルーチンにリンクされ、スタブ・ルーチンのコールはコーリー・ルーチンのエントリ・ポイントにリンクされる）。
【図１０】単一のインタフェースを介して、複数のパラメータを、対応する複数の場所から転送する旨のコーラ・ルーチンを含むコンパイル・モジュールのグラフィック描写である。
【図１１】複数のインタフェースのうちの１つを介してパラメータ・セットを選択的に転送する旨のコーラ・ルーチンを含む別のコンパイル・モジュールのグラフィック描写である。
【図１２】コード・モジュールをコンパイルし、コンパイル・モジュールをリンクするよう構成されたコンピュータ・システムのブロック図である。
【発明を実施するための形態】
【０００８】
図面中、参照符号の最も左の桁は、参照符号が最初に現れる図面を識別する。
【０００９】
明細書及び特許請求の範囲には、別個にコンパイルされるコーリー・ルーチンにパラメータ・セットを転送する旨のコーラ・ルーチンを複数のインタフェースで構成し、コーリー・ルーチンの構成に基づいて複数のインタフェースのうちの１つ又は複数を介して、コンパイルされたコーラ・ルーチン及びコンパイルされたコーリー・ルーチンをリンクするための方法及びシステムを開示している。複数のインタフェースは、規則によるインタフェースを含み、かつ、別のインタフェースを含み得る。更に、本明細書及び特許請求の範囲には、対応する複数のインタフェースのうちの１つを介して別のコンパイル・モジュールからパラメータ・セットを受け取る旨のコーリー・ルーチンを複数のエントリ点で構成するための方法及びシステムを開示している。
【実施例】
【００１０】
図１は、第１のコード・モジュール１０２及び第２のコード・モジュール１０４それぞれを含む計算環境１００のグラフィック描写である。コード・モジュール１０２及び１０４は、ソース・レベル・コード及び／又は中間レベル・コードを含み得る。
【００１１】
コード・モジュール１０２は、コード・モジュール１０４のコーリー・ルーチン１１０に対するコール１０８を有するコーラ・ルーチン１０６を含む。
【００１２】
コール１０８は、ランタイム中にコーリー・ルーチン１１０に転送する対象の１つ又は複数のパラメータ１１４（例えば、ＰＡＲＭ１及びＰＡＲＭ２）のセットの表示又は識別、及び名称１１２を含み得る。
【００１３】
コーリー・ルーチン１１０は、パラメータ・セットに対して１つ又は複数のファンクションを行う旨のファンクション・コード１１１を含み得る。
【００１４】
環境１００は、対応する第１のコンパイル・モジュール１１８及び対応する第２のコンパイル・モジュール１２０にコード・モジュール１０２及び１０４をコンパイルするためのコンパイラ１１６を含み得る。あるいは、コード・モジュール１０２及び１０４のうちの１つは、別のコンパイラによってコンパイルし得る。コンパイル・モジュール１１８及び１２０は、マシン判読可能なコードを含み得る。
【００１５】
コンパイル・モジュール１１８はコーラ・ルーチン１０６に対応するコーラ・ルーチン１２２を含む。コーラ・ルーチン１２２は、コーラ・ルーチン１０６のコール１０８に対応するコール１２６を含む。
【００１６】
コンパイル・モジュール１２０は、コーリー・ルーチン１１０に対応する、名称１１２で識別されるエントリ・ポイント１２５を有するコーリー・ルーチン１２４を含む。コーリー・ルーチン１２４は、ファンクション・コード１１１に対応するファンクション・コード１２８を更に含む。
【００１７】
コード・モジュール１０２及び１０４が互いに別個にコンパイルされると、コーラ・ルーチン１２２及びコーリー・ルーチン１２４は、限定なしで、コール・スタック上でパラメータを転送することを含み得る規則及び／又は標準に応じてパラメータ・セット１１４を転送するよう構成し得る。
【００１８】
図１の例では、コーラ・ルーチン１２２は、コール・スタックを介してパラメータ・セット１１４を転送する旨のインタフェース・コード１３０を含み、コーリー・ルーチン１２４は、エントリ・ポイント１２５におけるエントリにより、コール・スタックを介してパラメータ・セット１１４を受け取る旨のインタフェース・コード１３２を含む。コール・スタック、及び何れかのフォーマッティング要件はインタフェースとして表し得る。
【００１９】
コンパイラ１１６は、規則に応じてエントリ・ポイント１２５及び対応するインタフェース・コード１３２を構成するために規則構成器１４４によるエントリ・ポイントを含み、規則に応じてインタフェース・コード１３０を構成するために規則構成器１４２によるインタフェースを含み得る。
【００２０】
あるいは、コンパイル・モジュール１１８又はコンパイル・モジュール１２０がもう１つのコンパイラによって生成される場合、対応するインタフェース・コードが、別のコンパイラによって生成され得る。
【００２１】
環境１００は、一体化されたコンピュータ・プログラム１３７としてコンパイル・モジュール１１８及び１２０をコンピュータ・システムが実行することを可能にするために、コンパイル・モジュール１１８及び１２０をリンクするためのリンク・システム１３６を含み得る。
【００２２】
一部の状況では、規則に準拠しないことがあり得る別のインタフェースを介してパラメータを転送することが望ましいことがあり得る。例えば、図１では、コーリー・ルーチン１２４のインタフェース・コード１３２は、レジスタＲ１及びレジスタＲ２それぞれにコール・スタックからのパラメータ・セット１１４をロードするよう構成される。ファンクション・コード１２８は、レジスタＲ１及びＲ２におけるパラメータにアクセスするよう構成し得る。前述の状況では、コーラ・ルーチン１２２及びコーリー・ルーチン１２４がレジスタＲ１及びＲ２を介してパラメータ・セット１１４を転送するよう構成することが望ましいことがあり得る。
【００２３】
コンパイラ１１６は、図３に関して後述するように、コーリー・ルーチン内の代替エントリ・ポイントを構成するための代替エントリ・ポイント構成器１４５を含み得る。
【００２４】
コンパイラ１１６は、図２に関して後述するように、コーリー・ルーチン内の別のエントリ・ポイントへの対応する別のコール、及び代替インタフェースを構成するための代替インタフェース構成器１４６を更に含み得る。
【００２５】
コンパイラ１１６は、規則によるインタフェース、及び、適切に修正されたコーリー・ルーチン、又は修正されていないコーリー・ルーチンにコーラ・ルーチンがコールすることを可能にし得るコーラ・ルーチンに対する別のインタフェースを構成するよう構成され得る。
【００２６】
同様に、コンピュータ１１６は、規則によるエントリ・ポイント、規則による対応するインタフェース、及び別のエントリ・ポイントをコーリー・ルーチンに関して構成するよう構成し得る。これにより、コーリー・ルーチンが、適切に修正されたコーラ・ルーチン、及び修正されていないコーラ・ルーチンによってコールされることが可能になり得る。
【００２７】
リンク・システム１３６は、図８に関して後述するものなどの、コーラ・ルーチン及びコーリー・ルーチンが適切に構成される別のインタフェースを介して、さもなければ、図９に関して後述するものなどの、規則によるインタフェースを介して、コーラ・ルーチンをコーリー・ルーチンに選択的にリンクするよう構成し得る。
【００２８】
上記例では、別のインタフェース、別のコール、及び別のエントリ・ポイントが、コンパイラ１１６によって構成されたとして説明している。あるいは、別のインタフェース及び対応する別のコール、又は別のエントリ・ポイントは、ユーザ入力に応じてマシン・コード・エディタによるなどで、コンパイルに後続して構成し得る。
【００２９】
図２は、コーラ・ルーチン２０２及びスタブ・ルーチン２０４を含むコンパイル・モジュール２００のグラフィック描写である。
【００３０】
コンパイル・モジュール２００は、図１におけるコード・モジュール１０２からコンパイラ１１６によって生成することができる。あるいは、図１のコンパイル・モジュール１１８が別のコンパイラによって生成される場合、図２のコンパイル・モジュール２００は、ユーザ入力に応じてマシン・コード・エディタによるなどで、コンパイル・モジュール１１８から構成されるか、又は修正され得る。
【００３１】
コーラ・ルーチン２０２は、ここではＢａｒ＿ｂａｉｒ＿２として例証する名称２０８に対するコール２０６を含む。コーラ・ルーチン２０２は、ここではレジスタＲ１及びＲ２として例証する、第１のインタフェースを介してパラメータ・セット１１４（例えば、ＰＡＲＭ１及びＰＡＲＭ２を転送する旨の対応するインタフェース・コード２１０を更に含む。第１のインタフェースは別のインタフェースに対応し得、コール２０６は別のコールとして表し得る。
【００３２】
名称２０８は図１においてコーラ・ルーチン１０６のコール名称１１２のファンクションとして生成し得る。名称２０８は、パラメータ・セット１１４内のパラメータの数及び第１のインタフェースの名称のファンクションとして更に生成し得る。例えば、「ｂａｉｒ」は「ｂｌｉｎｄ  ａｒｇｕｍｅｎｔｓ  ｉｎ  ｒｅｇｉｓｔｅｒｓ」を表し得、「２」は、パラメータ・セット１１４内のパラメータの数を表し得る。名称２０８は別の名称として表し得る。
【００３３】
スタブ・ルーチン２０４は、名称１１２に対するコール１２６、及び第１のインタフェースからのパラメータ・セット１１４（例えば、Ｒ１及びＲ２）を第２のインタフェース（例えば、コール・スタック）を介して転送する旨の対応するインタフェース・コード２１８を含む。インタフェース・コード２１８は、規則によるインタフェースに対応し得る。
【００３４】
スタブ・ルーチン２０４は、リンク・システム１３６がコーラ・ルーチン２０２をスタブ・ルーチン２０４にリンクすることを可能にするためにコーラ・ルーチン２０２と関連付け得る。例えば、スタブ・ルーチン２０４のエントリ・ポイント２１２は、ここではｗｅａｋ．Ｂａｒ＿ｂａｉｒ＿２として例証する別の名称２０８の「弱い（ｗｅａｋ）」バージョンとして命名し得る。
【００３５】
図３は、コーリー・ルーチン３０２を含むコンパイル・モジュール３００のグラフィック描写である。
【００３６】
コンパイル・モジュール３００は、図１におけるコード・モジュール１０４からコンパイラ１１６によって生成することができる。あるいは、図１のコンパイル・モジュール１２０が別のコンパイラによって生成される場合、コンパイル・モジュール３００は、ユーザ入力に応じてマシン・コード・エディタによるなどで、コンパイル・モジュール１２０から構成されるか、又は修正され得る。
【００３７】
コーリー・ルーチン３０２はエントリ・ポイント１２５を含み、対応するインタフェース・コード１３２は、図１のコーリー・ルーチン１２４に関して上述するように、コール・スタックを介してパラメータ・セット１１４を受け取る。エントリ・ポイント１２５は規則によるエントリ・ポイントに対応し得、インタフェース・コード１３２は、規則によるインタフェースに対応し得る。
【００３８】
コーリー・ルーチン３０２は、ここでは、インタフェース・コード１３２とファンクション・コード１２８との間に示す別のエントリ・ポイント３０４を含み得る。
【００３９】
インタフェース・コード１３２は、コール・スタックからレジスタＲ１及びＲ２にパラメータ・セット１１４を移動させるよう構成し得、ファンクション・コード１２６は、図１におけるコーリー・ルーチン１２４に関して上述したように、レジスタＲ１及びＲ２においてパラメータ・セット１１４にアクセスするよう構成し得る。
【００４０】
前述の状況では、別のエントリ・ポイント３０４は、対応するインタフェース・コードを必要としない。別の状況では、エントリ・ポイント３０４は、パラメータ・セット１１４を再配置し、かつ／又はフォーマッティングするためのインタフェース・コードを含み得る。
【００４１】
方法の例は、本明細書中、図４乃至７に関し、かつ、他の例のうちの１つ又は複数に関して後述する。しかし、図４乃至図７の例は、前述の他の例に限定されない。
【００４２】
図４は、コーラ・ルーチン及び／又はコーリー・ルーチンを含み得るコード・モジュールをコンパイルする方法４００のフローチャートである。
【００４３】
４０２では、コードのモジュールが受け取られる。図１では、コンパイラ１１６は、コード・モジュール１０２及び／又はコード・モジュール１０４を受け取り得る。
【００４４】
４０４では、コードのモジュール内のコーラ・ルーチン（図１のコーラ・ルーチン１０６など）が評価される。コードのモジュールに存在しない名称にコーラ・ルーチンがコールする場合、処理は４０６に進み、４０６では、コーラ・ルーチンは、後述する図５に応じてコンパイルされる。４０４における評価及び４０６におけるコンパイルは、更なる１つ又は複数のコーラ・ルーチンについて繰り返すことができる。
【００４５】
４０８では、コードのモジュール内のコーリー・ルーチンが評価される。コーリー・ルーチンがコードのモジュールの外部からコール可能な場合、処理は４１０に進み、４１０では、コーリー・ルーチンは、後述する図６に応じてコンパイルされる。４０８における評価及び４１０におけるコンパイルは、更なる１つ又は複数のコーリー・ルーチンについて繰り返すことができる。
【００４６】
４１２では、コードのモジュールの他のコードを（例えば、通常のコンパイル手法に応じて）コンパイルし得る。
【００４７】
図４に関して記載した機能、及び／又はその一部分は、互いに種々の順序のうちの１つ又は複数で行い、互いに並列に行い、かつ／又は一体化して行うことができる。
【００４８】
図５は、複数のインタフェースのうちの１つを介して別のコンパイル・モジュールのコーリー・ルーチンにコーラ・ルーチンからパラメータ・セットを転送する旨のコードのモジュールをコンパイルする方法５００のフローチャートである。
【００４９】
５０２では、コードのモジュールに存在しない名称に対するコールを有しているものとしてコードのモジュール内で識別される。
【００５０】
５０４では、別のポイント名称が生成される。別のポイント名称は、第１のインタフェースを介して転送される対象のパラメータの数、第１のインタフェースの表示、及びコール名称のファンクションとして生成し得る。
【００５１】
５０６では、図２のエントリ・ポイント２１２に関して上述したように、別の名称の弱いバージョンが生成される。
【００５２】
５０８では、図２のコーラ・ルーチン２０２に関して上述したように、コーラ・ルーチンが、別の名称に対してコールし、第１のインタフェースを介してパラメータ・セットを転送するようコンパイルされる。
【００５３】
５１０では、コードの第１のモジュールは、名称に対してコールし、第２のインタフェースを介して第１のインタフェースからパラメータ・セットを転送する旨のスタブ・ルーチンを含めるようコンパイルされる。スタブ・ルーチン、又はスタブ・ルーチンに対するエントリ・ポイントは、図２のスタブ・ルーチン２０４に関して上述したように、別の名称の弱いバージョンで識別される。
【００５４】
図６は、対応する複数のインタフェースのうちの１つを介してパラメータ・セットを受け取るためにコーリー・ルーチンに複数のエントリ・ポイントを供給する旨のコードのモジュールをコンパイルする方法６００のフローチャートである。
【００５５】
６０２では、コードのモジュールの外側からコール可能であるように、コードのモジュール内で識別される。
【００５６】
６０４では、別のエントリ・ポイント名称が生成される。別のエントリ・ポイント名称は、別のインタフェースを介して転送される対象のパラメータの数、別のインタフェースの表示、及びコーリー・ルーチンの名称のファンクションとして生成し得る。
【００５７】
６０６では、コーリー・ルーチンは、規則によるインタフェースを介してパラメータ・セットを受け取るための第１のエントリ・ポイント、及び別のインタフェースを介してパラメータ・セットを受け取るための別のエントリ・ポイントを含めるようコンパイルされる。図３のコーリー・ルーチン３０２に関して上述したように、別のエントリ・ポイントは別のエントリ・ポイント名称で識別し得、第１のエントリ・ポイントはコーリー・ルーチンの名称で識別し得る。
【００５８】
図７は、第２のコンパイル・モジュールのコーリー・ルーチンに第１のコンパイル・モジュールのコーラ・ルーチンをリンクする方法７００のフローチャートである。
【００５９】
７０２では、図１のリンク・システム１３６などで第１のコンパイル・モジュール及び第２のコンパイル・モジュールが受け取られる。第１のコンパイル・モジュールは図２のコンパイル・モジュール２００に対応し得る。第２のコンパイル・モジュールは図１のコンパイル・モジュール１２０又は図３のコンパイル・モジュール３００に対応し得る。
【００６０】
７０４では、方法６００によって構成された、第１のコンパイル・モジュールの関連付けられたスタブ・ルーチン及びコーラ・ルーチンが識別される。コーラ・ルーチン及び関連付けられたスタブ・ルーチンは、図２のコーラ・ルーチン２０２及びスタブ・ルーチン２００に対応し得る。
【００６１】
７０６では、スタブ・ルーチンのコールに対応する第１のエントリ・ポイントを有する第２のコンパイル・モジュールのコーリー・ルーチンが識別される。コーリー・ルーチンは、図１のコーリー・ルーチン１２４又は図３のコーリー・ルーチン３０２に対応し得る。
【００６２】
７０８では、コーリー・ルーチンが評価される。コーリー・ルーチンが、図６の６０６に関して上述した別のエントリ・ポイントを含む場合、処理は７１０に進む。コーリー・ルーチンが前述の別のエントリ・ポイントを含まない場合、処理は７１２に進む。
【００６３】
７１０では、コーラ・ルーチンが、コーリー・ルーチンの別のエントリ・ポイントにリンクされる。図８は、図２のコンパイル・モジュール２００及び図３のコンパイル・ジュール３００を含む、コンピュータ・プログラム８００のグラフィック描写であり、コール２０６は、リンク８０２により、コーリー・ルーチン３０２の別のエントリ・ポイント３０４にリンクされる。
【００６４】
７１２では、コーラ・ルーチンはスタブ・ルーチンにリンクされ、スタブ・ルーチンはコーリー・ルーチンの第１のエントリ・ポイントにリンクされる。図９は、図２のコンパイル・モジュール２００及び図１のコンパイル・モジュール１２０を含む、コンピュータ・プログラム９００のグラフィック描写であり、コール２０６は、リンク９０２により、スタブ・ルーチン２０４にリンクされ、スタブ・ルーチン２０４のコール１２６は、リンク９０４により、コーリー・ルーチン１２４のエントリ・ポイント１２５にリンクされる。
【００６５】
上記例では、２つのパラメータ（ＰＡＲＭ１及びＰＡＲＭ２）が、レジスタＲ１及びＲ２を介して転送され、又はコール・スタックを介して転送される。しかし、本明細書及び特許請求の範囲記載の方法及びシステムは、レジスタ又はコール・スタックに限定されない。
【００６６】
別のインタフェースは、タスク及び／又は論理演算を行うよう構成し得る。タスク及び倫理演算の例を以下に説明する。しかし、別のインタフェースは、以下の例に限定されない。
【００６７】
別のインタフェースは、図１０に関して後述するように、複数の場所から複数のパラメータを合成し、単一の場所を介して、合成されたパラメータを転送するよう構成し得る。
【００６８】
別のインタフェースは、図１１に関して後述するように、選択可能な複数のインタフェースのうちの１つを介してパラメータ・セットを転送するよう構成し得る。
【００６９】
別のインタフェースは、第１のインタフェースを介して第１のパラメータ・セットを転送し、第２のインタフェースを介して第２のパラメータ・セットを転送するよう構成し得る。
【００７０】
図１０は、コーラ・ルーチン１００２及びスタブ・ルーチン１００４を含むコンパイル・モジュール１０００のグラフィック描写である。コーラ・ルーチン１００２は、ここではレジスタＲ１として示す単一の別のインタフェースを介して複数の場所から複数のパラメータを転送する旨の別のコール１００６及び対応する別のインタフェース・コード１００６を含み得る。別のインタフェース・コード１００６は、レジスタをロードする前にパラメータを合成又は操作するよう構成し得る。スタブ・ルーチン１００４は、上記１つ又は複数の例に説明したものなどの、規則により、複数のパラメータを転送するよう構成し得る。
【００７１】
図１１は、コーラ・ルーチン１１０２及びスタブ・ルーチン１１０４を含むコンパイル・モジュール１１００のグラフィック描写である。コーラ・ルーチン１１０２は、コーリー・ルーチンの対応する別の複数のエントリ・ポイントに向けられた別の複数のコール１１０６及び１１０８を含む。別のコール１１０６は、ここではレジスタＲ１及びＲ２として示す第１の別のインタフェースを介してパラメータ・セットを転送する旨の別のインタフェース・コード１１１０を含む。別のコール１１０８は、パラメータ・セットを合成し、ここではレジスタＲ１として示すように第２の別のインタフェースを介して、合成されたパラメータ・セットを転送する旨の別のインタフェース・コード１１１２を含む。
【００７２】
コーラ・ルーチン１１０２は、コンティンジェンシー「Ａ」に基づいて別のコール１１０６又は別のコール１１０８を選択的に呼び起こす旨の緊急ロジック１１１４及び１１１６を更に含む。コンティンジェンシーは、１つ又は複数のパラメータ及び／又は１つ又は複数の条件の値に関係し得る。
【００７３】
スタブ・ルーチン１１０４は、コーリー・ルーチンが、別のエントリ・ポイントを含まない場合、規則により、パラメータ・セットを転送するよう構成し得る。
【００７４】
本明細書及び特許請求の範囲記載の１つ又は複数の機能は、ハードウェア、ソフトウェア、及びそれらの組み合わせ（個別及び集積回路ロジック、特定用途集積回路（ＡＳＩＣ）ロジック、及びマイクロコントローラを含む）で実現し得、ドメイン特有の集積回路パッケージの一部、又は集積回路パッケージの組み合わせとして実現し得る。本明細書及び特許請求の範囲において使用されるソフトウェア、コード、及び命令の語は、本明細書及び特許請求の範囲に開示された１つ若しくは複数の機能、及び／又は組み合わせをコンピュータ・システムに行わせるための、コンピュータ・プログラム・ロジックを記憶させたコンピュータ判読可能な媒体を含むコンピュータ・プログラム・プロダクトを表す。
【００７５】
図１２は、コンピュータ・プログラム・プロダクト・ロジックを実行するために、プロセッサ１２０２として本願に示す１つ又は複数のコンピュータ命令処理装置を含む例示的なコンピュータ・システム１２００のブロック図である。
【００７６】
コンピュータ・システム１２００は、メモリ、キャッシュ、レジスタ、及び記憶装置（以降、「メモリ」）１２０４のうちの１つ又は複数を含む。
【００７７】
メモリ１２０４は、それに応じて１つ又は複数の機能をプロセッサ１２０２に行わせるために、コンピュータ・プログラム・プロダクト・ロジック１２０６を記憶させたコンピュータ読み取り可能な媒体を含む。
【００７８】
メモリ１２０４は、ロジック１２０６の実行に応じてプロセッサ１２０２によって生成され、かつ／又は、ロジック１２０６の実行においてプロセッサ１２０２によって使用される対象のデータ１２０８を更に含む。
【００７９】
データ１２０８は、図１のコード・モジュール１０２及び／又はコード・モジュール１０４を含み得る。
【００８０】
ロジック１２０６は、上記１つ又は複数の例において説明したように、対応するコンパイル・モジュール２００及び３００を生成する旨のコード・モジュール１０２及び／又はコード・モジュール１０４をプロセッサ１２０２にコンパイルさせるためのコンパイラ・ロジック１２１０を含む。あるいは、コード・ロジック１０２又はコード・モジュール１０４は、コンパイル・モジュール１１８又はコンパイル・モジュール１２０それぞれを生成するために別のコンパイラによってコンパイルされ得る。
【００８１】
コンパイラ・ロジック１２１０は、上記１つ又は複数の例において説明したように、規則により、コーラ・ルーチンがパラメータ・セットを転送することを可能にする旨のインタフェース・コードをプロセッサ１２０２に生成させるための規則ロジック１２１２によるインタフェースを含み得る。
【００８２】
コンパイラ・ロジック１２１０は、上記１つ又は複数の例において説明したように、コーラ・ルーチンがパラメータ・セットを別のインタフェースを介して転送することを可能にする旨の別のインタフェース・コードをプロセッサ１２０２に生成させるための別のインタフェース・ロジック１２１４を含み得る。
【００８３】
コンパイラ・ロジック１２１０は、上記１つ又は複数の例において説明したように、規則により、コーリー・ルーチンがパラメータ・セットを受け取ることを可能にする旨の対応するインタフェース・コード及びエントリ・ポイントをプロセッサ１２１６に構成させるための規則ロジック１２１６によるエントリ・ポイントを含み得る。
【００８４】
コンパイラ・ロジック１２１０は、上記１つ又は複数の例において説明したように、コーリー・ルーチンがパラメータ・セットを別のインタフェースを介して受け取ることを可能にする旨の別のエントリをプロセッサ１２０２に構成させるための別のエントリ・ポイント・ロジック１２１８を含み得る。
【００８５】
ロジック１２０６は、プロセッサ１２０２に、複数のコンパイル・モジュールをリンクさせる（コーリー・ルーチンの別のエントリ・ポイントに対するコーラ・ルーチンの選択的なリンクを含む）か、又は、上記１つ又は複数の例に説明したように、スタブ・ルーチンを介してコーラ・ルーチンをコーリーにリンクさせるためのリンク・ロジック１２２０を含み得る。
【００８６】
コンピュータ・システム１２００は、コンピュータ・システム１２００内で通信するための通信インフラストラクチャ１２４０と、インターネットなどの、ネットワーク通信システムを介して他の１つ又は複数のコンピュータ・システムとインタフェースするための入出力コントローラ１２４２を含み得る。
【００８７】
機能、構成を示す機能的構成単位、及びそれらの関係を用いて、方法及びシステムを本明細書及び特許請求の範囲に記載している。説明の便宜上、前述の１つ又は複数の境界を本明細書及び特許請求の範囲において任意に規定し得る。別の境界を定義し得る。
【００８８】
本明細書及び特許請求の範囲に種々の実施例を開示しているが、限定でなく、例として提示している。本明細書及び特許請求の範囲記載の方法及びシステムの趣旨及び範囲から逸脱しない限り、形式及び詳細における種々の変更を本発明に行うことができるということが当該技術分野における当業者には明らかとなるであろう。よって、特許請求の範囲の範囲は、本明細書及び特許請求の範囲の何れの例によっても限定されるものでない。
【符号の説明】
【００８９】
１００  計算環境
１１６  コンパイラ
【図１】
0005384551.tif 000002
【図２】
0005384551.tif 000003
【図３】
0005384551.tif 000004
【図４】
0005384551.tif 000005
【図５】
0005384551.tif 000006
【図６】
0005384551.tif 000007
【図７】
0005384551.tif 000008
【図８】
0005384551.tif 000009
【図９】
0005384551.tif 000010
【図１０】
0005384551.tif 000011
【図１１】
0005384551.tif 000012
【図１２】
0005384551.tif 000013