"対象プロセッサによって実行可能な対象プログラムコードを、目的プロセッサによって実行可能であり且つトランスレータによって実行時にトランスレートされて生成される目的プログラムコードに変換するための方法であって、コンピュータが、a前記対象プログラムコードを複数の対象プログラムコード単位に分割するステップと、b中間表現を介して、1以上の前記分割された対象プログラムコード単位を1以上の目的プログラムコード単位に変換するステップと、c前記目的プロセッサ上で前記変換された目的プログラムコード単位を実行するステップとを実行することを含み、前記ステップbは、b1対応するネイティブコード単位を有する場合に、少なくとも1つの対象コードを特定するステップであって、前記ネイティブコード単位は記目的プロセッサによって実行可能である、前記特定するステップと、b2前記特定された対象コード単位に対応するネイティブコード単位を特定するステップとを含み、前記ステップb1及びb2は、前記対象コードの変換中にトランスレータ特有の命令として外部の呼び出しコマンドに遭遇し、前記外部の呼び出しコマンドをデコードし、そして前記外部の呼び出しコマンドに基づいて前記中間表現に追加することによって実行され、前記ステップcは、前記特定された対象コード単位の変換されたコードを実行する代わりに、前記対応するネイティブコード単位を実行することを含む、前記方法。前記外部の呼び出しコマンドは、複数のサブコンポーネント命令を含む可変長命令である、請求項1に記載の方法。前記複数のサブコンポーネント命令は、外部の呼び出しコマンドのその他のサブコンポーネント命令によって表わされる前記外部の呼び出しコマンドの形式を特定するエスケープサブコンポーネント命令を含み、前記ステップbは、前記エスケープサブコンポーネント命令を検出するステップをさらに含む、請求項2に記載の方法。前記特定された対象プログラムコード単位が対象関数に対応し、且つ、前記特定されたネイティブコード単位がネイティブ関数に対応する、請求項1に記載の方法。前記コンピュータが、関数パラメータを、目的コードからネイティブコードに変換するステップと、前記ネイティブ関数のプロトタイプに従う前記変換された関数パラメータを用いて、前記ネイティブ関数を呼び出すステップと、前記呼び出されたネイティブ関数の戻り値を、ネイティブコードから目的コードに変換するステップとを実行することをさらに含む、請求項4に記載の方法。前記変換するステップにおける変換は、該変換の中間コードを生成する、請求項1に記載の方法。前記コンピュータが、目的コードにおいて、すべての対象レジスタ値を、目的コードからネイティブコードに変換するステップと、統一された呼び出しスタブインターフェースに従う前記変換された対象レジスタ値を用いて、ネイティブコード呼び出しスタブ関数を目的コードから呼び出すステップと、ネイティブ関数のプロトタイプに従う特定の対象レジスタ及び/又はパラメータスタックを用いて、前記ネイティブ関数を前記呼び出されたネイティブコード呼び出しスタブ関数から呼び出すステップとをさらに含む、請求項5に記載の方法。前記コンピュータが、前記対象コードのトランスレーションの間に、前記外部の呼び出しコマンドに遭遇すると、前記目的コード内に、前記ネイティブ関数に対する呼び出しスタブを挿入するステップをさらに実行することを含む、請求項1に記載の方法。実行されるべき対象コード単位が、システム呼び出し関数である、請求項1に記載の方法。実行されるべき対象コード単位が、ライブラリ関数である、請求項1に記載の方法。前記コンピュータが、前記目的プロセッサによる前記目的プログラムコード及び前記ネイティブコードの実行でインターリーブされる前記目的プロセッサ上で事項するトランスレータによって、前記対象プログラムコードの前記目的プログラムコードへの動的バイナリ変換を実行するステップを実行することをさらに含む、請求項1に記載の方法。コンピュータに請求項1~11のいずれか一項に記載の方法の各ステップを実行させるコンピュータプログラム。コンピュータであって、目的プロセッサと、対象プロセッサによって実行可能な対象プログラムコードを格納し、且つ、前記目的プロセッサによって請求項1~11のいずれか一項に記載の方法の各ステップが実行されるトランスレータコードを含むメモリとを備えている、前記コンピュータ。トランスレートされるべき対象subjectプログラムは通常、対象コードの複数の単位からなる。これらには、対象実行可能コード自体および多くの対象ライブラリが含まれる。対象ライブラリのいくつかは独占的である場合があり、いくつかは対象OSの一部システムライブラリとして提供される。対象プログラムが実行されると、関数呼び出しが外部のライブラリに対して行なわれるため、対象コードのこれらの異なる単位の間で制御フローが移る。状況によっては、ある特定の対象ライブラリのネイティブすなわち、目的targetアーキテクチャバージョンが、目的アーキテクチャ上で利用可能な場合もある。本発明によれば、添付請求項で述べるような装置および方法が提供される。本発明の好ましい特徴は、従属請求項および以下の説明から明らかとなる。以下は、本発明による種々の実施形態による実現可能な種々の態様および優位性の概要である。この概要は、当業者が、後に続く詳細な構成の説明を迅速に理解するための助けとなる導入部として設けられている。概要は、添付の請求項の範囲を限定するものではなく、また決して限定することが意図されているわけではない。詳細には、本発明者らは、プログラムコード変換の促進に向けられた最適方法を開発した。この方法は、対象プログラムコードの目的コードへのトランスレーションを用いるランタイム実行時トランスレータと共に用いると、特に有用である。対象コードを目的コードにトランスレーションする間にネイティブ関数に対する呼び出しを挿入するためのネイティブ結合技術が提供される。従って、対象コード関数に対する対象プログラム内での関数呼び出しが、目的コードにおいて、同じ関数のネイティブ同等物に対する呼び出しに置き換えられる。ネイティブコード表現、ネイティブコード呼び出し規約、およびネイティブ関数プロトタイプと整合するように、ネイティブ関数呼び出しのパラメータが目的コード表現から変換される。ネイティブ結合は、本発明のメカニズムであって、トランスレート済み対象コードが、等価な対象コードをトランスレートしおよび実行するのではなくて、ネイティブすなわち、目的アーキテクチャバージョンのコード単位たとえばネイティブバージョンのライブラリなどを直接実行できるようにするものである。この結果、対象バージョンのこれらのライブラリをトランスレートするオーバーヘッドが回避される。加えて、ネイティブバージョンは、同じ機能をはるかに効率的な実装であり得る。なぜならば、ネイティブバージョンは、対象バージョンが認識していない目的アーキテクチャのアーキテクチャ特徴を利用できるからである。添付図面は、本明細書に取り入れられて本明細書の一部を構成しているが、現時点で好ましい実施形態を例示するものであり、後述するように説明される。図1は、後述する種々の新しい特徴を実施するための例示的な装置を示す。図1には、目的レジスタ15を含む目的プロセッサ13とともに、メモリ18が例示されている。メモリ18には、多くのソフトウェアコンポーネント17,19,20,21,22,28が記憶されている。ソフトウェアコンポーネントには、トランスレートされるべき対象コード17、オペレーティングシステム20、トランスレータコード19、トランスレート済みコード21、グローバルレジスタ記憶装置27、ネイティブ結合メカニズム22、およびネイティブコード28が含まれる。トランスレート済みコード21は、目的コード21とも呼ばれる。グローバルレジスタ記憶装置27は、対象レジスタバンク27とも呼ばれる。トランスレータコード19は、たとえば、あるISAの対象コードを他のISAのトランスレート済みコードにトランスレートするエミュレータとしてか、あるいは対象コードをトランスレート済みコードそれぞれ、同じISAであるにトランスレートするためのアクセラレータとして機能しても良い。ネイティブコード28は、目的プロセッサ13に対して直接的にコンパイルされるコードである。トランスレータ19、すなわちトランスレータを実装するコンパイル済みバージョンのソースコードと、トランスレート済みコード21、すなわちトランスレータ19によって生成された対象コード17のトランスレーションとは、目的プロセッサ13通常は、マイクロプロセッサまたは他の好適なコンピュータ上で実行されるオペレーティングシステム20とともに実行される。当然のことながら、図1に例示した構造は単に典型であり、またたとえば本発明によるソフトウェア、方法、およびプロセスは、オペレーティングシステム内にまたはその下に存在するコードにおいて実装しても良い。対象コード17、トランスレータコード19、オペレーティングシステム20、および記憶メカニズムは、多種多様のタイプのいかなるものであっても良い。これは当業者には知られている。本明細書で用いられる場合、目的コード21対象コード17のフラグメントの実行時トランスレーションから生じると、ネイティブコード28目的アーキテクチャのために直接的にコンパイルされるとの間に違いがある。目的オペレーティングシステムによって用意されるシステム目的ライブラリは、ネイティブコード28の例である。システム対象ライブラリのトランスレーションは、目的コード21の例である。ネイティブコード28は、トランスレータ19の外で生成される。すなわちトランスレータ19はネイティブコード28を生成しないし、トランスレータ19はネイティブコード28を最適化する機会もない。図1による装置では、プログラムコード変換は好ましくは、目的コード21が実行されている実行時に動的に行なわれる。トランスレータ19は、トランスレート済みプログラム21にインラインで実行される。前述したトランスレータ19は通常、目的アーキテクチャに対してコンパイルされるアプリケーションとして用いられる。対象プログラム17は、実行時にトランスレータ19によってトランスレートされて、目的アーキテクチャ上で直接的に実行される。またトランスレータ19は、対象プログラム17によって起こされる対象オペレーティングシステムOS:OperatingSystem呼び出しを変換して、この呼び出しが目的OS20に受け渡されたときに正しく動作するようにする。目的コード21を生成する過程で、中間表現IR:intermediaterepresentationツリーが対象命令シーケンスに基づいて生成される。IRツリーは、対象プログラムによって実行計算される式および対象プログラムによって行なわれる動作operationsの抽象表現である。後に、目的コード21がIRツリーに基づいて生成される。本明細書で説明するIRノードを集めたものcollectionsが、俗称的にツリーと呼ばれる。なお正式には、そのような構造は実際には、有向非循環グラフDAG:DirectedAcyclicGraphであり、ツリーではないことに注意されたい。ツリーの正式な定義によれば、各ノードには、多くても1つの親が存在する必要がある。説明する実施形態では、IRの生成中に共通部分式の除去が用いられるため、ノードには複数の親があることが多い。たとえば、フラッグに影響を与える命令結果のIRは、2つの抽象レジスタ格納先対象レジスタおよびフラッグ結果パラメータに対応するによって参照されうる。たとえば、対象命令addr1,r2,r3が、対象レジスタr2およびr3の内容の加算を実行し、結果を対象レジスタr1内に記憶する。すなわち、この命令は、抽象式r1=r23に対応する。この例は、抽象レジスタr1の定義とともに、命令オペランドr2およびr3を表わす2つの部分式を含む加算式を含む。対象プログラム17に関連して言えば、これらの部分式は、それより前の他の対象命令に対応していても良いし、あるいはそれらの部分式は、現在の命令の詳細、たとえば直接定数値immediateconstantvaluesを表していても良い。add命令が構文解析されると、加算に対する抽象的な数学演算子に対応する、新しいIRノードが生成される。IRノードは、オペランドIRにおいて部分式ツリーとして表わされ、対象レジスタに保持されることが多いを表わす他のIRノードに対する参照を記憶する。ノード自体は、ノードによって値が規定される対象レジスタr1に対する抽象レジスタ、命令の格納先レジスタによって参照される。たとえば、図20の中心より右側の部分には、X86命令addecx,edxに対応するIRツリーが示されている。当業者であれば理解できるように、一実施形態において、トランスレータ19は、オブジェクト指向のプログラミング言語、たとえばCを用いて実装される。たとえば、IRノードは、Cオブジェクトとして実装され、他のノードに対する参照は、この他のノードに対応するCオブジェクトに対するC参照として実装される。それ故に、IRツリーは、互いに対する様々な参照を含むIRノードオブジェクトを集めたものcollectionsとして実装される。また、説明している本実施形態において、IR生成は、抽象レジスタの組を用いる。これら抽象レジスタは、対象アーキテクチャの特定の特徴に対応する。たとえば、対象アーキテクチャ上の各物理レジスタ対象レジスタに対して、一意の抽象レジスタが存在する。同様に、対象アーキテクチャ上に存在する各状態コードフラッグに対して、一意の抽象レジスタが存在する。抽象レジスタは、IR生成中にIRツリーに対するプレースホルダとして機能する。たとえば、対象命令シーケンス内の所定の点における対象レジスタr2の値は、対象レジスタr2に対する抽象レジスタに関連付けられる特定のIR式ツリーによって表わされる。一実施形態において、抽象レジスタはCオブジェクトとして実装される。Cオブジェクトは、特定のIRツリーに、そのツリーのルートノードオブジェクトに対するC参照を介して関連付けられる。抽象レジスタの実装は、トランスレータコード19および目的コード21両方におけるコンポーネント間で分割されるdivided。トランスレータ19内では、抽象レジスタは、IR生成の過程で使用されるプレースホルダである。従って、抽象レジスタが、特定の抽象レジスタが対応する対象レジスタの値を計算するIRツリーに関連付けられる。したがって、トランスレータ内の抽象レジスタは、IRノードオブジェクトすなわちIRツリーへの参照を含むCオブジェクトとして実装されても良い。抽象レジスタセットによって参照されるすべてのIRツリーの集合体は、作業用IRフォレストと呼ばれるフォレストと呼ばれる理由は、集合体が複数の抽象レジスタルートを含み、それぞれがIRツリーを参照するからである。作業用IRフォレストは、対象コードの特定の点における対象プログラムの抽象的な操作のスナップショットを表わす。基本ブロックモードでは、状態が、すべてのトランスレート済みコードシーケンスにとってアクセス可能なメモリ領域、すなわちグローバルレジスタ記憶装置27を用いて、ある基本ブロックから次の基本ブロックへ受け渡される。グローバルレジスタ記憶装置27は、抽象レジスタに対するリポジトリである。各抽象レジスタは、特定の対象レジスタの値または他の対象アーキテクチャ特徴に対応し、且つこれをエミュレートする。目的コード21を実行する間、抽象レジスタは、命令に関与できるように、目的レジスタに一時的に保持される。トランスレータコード21を実行する間、抽象レジスタ値は、グローバルレジスタ記憶装置27または目的レジスタ15内に記憶される。目的コード21内では、抽象レジスタは、グローバルレジスタ記憶装置内の特定の箇所であり、その箇所まで、およびその箇所から、対象レジスタ値が実際の目的レジスタと同期する。あるいは、値がグローバルレジスタ記憶装置からロードされている場合には、目的コード21内の抽象レジスタは、目的レジスタ15であると理解することができ、それは、目的コード21の実行中に、対象レジスタ値を、それがレジスタ記憶装置に再び保存される前に一時的に保持する。こうして、トランスレータ19の下で実行中の対象プログラムには、交互的に実行される2つの異なる形式のコードがある。すなわちトランスレータコード19および目的コード21である。トランスレータコード19は、トランスレータ19の高レベルのソースコードの実装に基づいて、実行時の前にコンパイラによって生成される。目的コード21は、トランスレートされるプログラムの対象コード17に基づいて、実行時の間中、トランスレータコード19によって生成される。対象プロセッサ状態の表現は同様に、トランスレータ19および目的コード21のコンポーネント間で分割される。トランスレータ19は、対象プロセッサ状態たとえば変数および/またはオブジェクトを、種々の明示的なプログラミング言語装置に記憶する。トランスレータをコンパイルするために用いられるコンパイラは、状態および動作が目的コードにおいてどのように実装されるかを決定する。比較して、目的コード21は、対象プロセッサ状態を暗黙的に、目的レジスタおよびメモリ箇所に記憶する。目的レジスタおよびメモリ箇所は、目的コード21の目的命令によって直接扱われる。たとえば、グローバルレジスタ記憶装置27の低レベルの表現は単純に、割り当てメモリの領域である。これは、どのようにして目的コード21が、定義されたメモリ領域と種々の目的レジスタとの間で保存および復元することによって、抽象レジスタを見て、そして抽象レジスタとやり取りするかである。しかし、トランスレータ19のソースコードにおいては、グローバルレジスタ記憶装置27は、より高いレベルでアクセスおよび扱われうるデータアレイまたはオブジェクトである。目的コード21に関して言えば、単純に、高レベルの表現は存在しない。図2~5は、図1のトランスレータ19の種々の例示的な実施形態を示す。図2は、トランスレータ105によってトランスレートされるべき対象コード17における対象プログラム106の異なるコンパイル単位の例示的な実施形態を示す。トランスレータ105は、ネイティブアーキテクチャさもなくば、目的アーキテクチャと呼ばれるに対してコンパイルされた実行ファイルexecutableとして実行する。ネイティブアーキテクチャは、ネイティブOS103およびネイティブプロセッサ101それらは図1の目的OS20および目的プロセッサ13に等価であるの両方を含む。この例の対象プログラム106は、対象実行ファイル107および多くの対象ライブラリを含む。対象ライブラリは、対象独占的ライブラリ109および対象システムライブラリ111を含みうる。ネイティブ結合が用いられない場合には、対象プログラム106のコンパイル単位は、目的コード21にトランスレートされて、トランスレータ105内で実行される。図3は、ネイティブ結合が、トランスレート済みプログラムのコード単位で利用される場合の例示的な実施形態の動作フローのブロック図である。対象プログラム106は、対象実行ファイル107および多くの対象ライブラリを含む。対象ライブラリは、独占的ライブラリ109およびシステムライブラリ111を含む。トランスレータ105は、ネイティブ結合を用いて、対象システムライブラリ関数111に対する対象プログラム106呼び出しを、ネイティブシステムライブラリ117における関数に対する呼び出しに置換する。たとえば、MIPS-x86トランスレーションの場合、x86システム目的ライブラリlibcは、SSE2ベクトル操作を利用して極めて速いバイトコピーを行なう高性能なmemcpyメモリコピールーチンを定義することができる。本出願で説明されるネイティブ結合メカニズム22を用いて、MIPS対象コードにおけるmemcpyに対するすべての呼び出しが、ネイティブmemcpyに結合される。これは、対象MIPSバージョンのmemcpy関数をトランスレートするコストを削減する。加えて、ネイティブx86バージョンのmemcpy関数は、ネイティブハードウェアの複雑さについてはるかに良く認識しているため、関数の所望の効果を達成するための最も効率的な方法を知っている。対象プログラムの制御フローが、対象コードのネイティブバージョンが存在する対象コード17のセクションたとえば対象ライブラリに入ることが検出されたときに、ネイティブ結合が、トランスレータ19によって実装されるである。トランスレータ19は、対象コード17をトランスレートするのではなくて、等価なネイティブコード28を実行する。目的システムライブラリの呼び出しに加えて、より多くの任意コードの代用に対して、たとえばネイティブでコンパイルされたバージョンの非ライブラリ関数を代用することに対して、ネイティブ結合が用いられうる。さらに、ネイティブ結合は、対象システム関数に対するすべての呼び出しを、代用のネイティブ関数と置換することによって、ネイティブアーキテクチャ上で対象システムの呼び出しを実装しうる。代用のネイティブ関数は、対象システム関数に対する呼び出しと同じ機能を実装し、あるいは目的システムの呼び出しの周りの呼び出しスタブとしての機能を果たす。またネイティブ結合は、関数呼び出しサイトを過ぎた任意の対象コード箇所で適用されて、目的コードまたはネイティブコード内の任意コードのシーケンスおよび/または対象プログラム内の任意の十分に定義された点で挿入または代用される関数呼び出しを可能にする。結合点BindPointの記述ネイティブ結合メカニズム22では、トランスレータ19が、特定の対象コード17関数を、それらのネイティブコード28対応ファイルと関連づける必要がある。その結果、トランスレータ19は、どの対象関数を結合すべきか、およびどのネイティブ関数に対して対象関数を結合すべきかを知る。トランスレータ19は、ネイティブ結合メカニズム22の実装に依存して、種々の方法でこの関数マッピング情報を取得することができる。一実施形態において、結合されるべき対象関数は、特別目的の結合点記述言語を用いて識別される。結合点の記述は、以下を含む。すなわち、a結合されるべき対象関数、及びb結合されるべき対応するネイティブ関数である。トランスレータ19は、実行の開始時に結合点の記述を読み込んで、結合点ネイティブ関数を呼び出す箇所を識別する。対象プログラムのデコード中に、トランスレータ19がこれらの結合点に遭遇すると、トランスレータ19は、適切なネイティブ関数に対する呼び出しスタブを、目的コード21内に挿入する。一実施形態において、特定の結合点の記述が、トランスレータ19内に埋め込まれる。他の実施形態において、結合点の記述が、トランスレータ19が実行時に読み込む個々のファイル中に記憶される。その結果、エンドユーザが、ネイティブ結合メカニズム22の制御を特定の対象対ネイティブ関数マッピングを加えることによって行なうことを許す。他の実施形態において、ネイティブ結合用結合点の記述言語は、任意の結合点が特定されることを許し、従って、ネイティブ関数呼び出しが、対象関数呼び出しを過ぎた対象コード内の他の点において挿入されうる。この実施形態において、結合点の記述は以下を含む。すなわちa対象プログラム内の定義された箇所すなわち、関数呼び出しサイトだけではない、及びb結合されるべき対応するネイティブ関数である。たとえば、任意の結合点は、1関数の開始、2対象モジュールの初期化コードの開始、3特定の記号からの固定された相対位置オフセットたとえば、関数の開始からの固定された相対位置、4モジュール内の第1のテキストセグメントからの固定された相対位置、または5特定のモジュール内か、またはある特定のモジュールを除いたすべてのモジュールにおける特定の対象関数に対するすべての呼び出し、として識別されうる。結合点の形式1と5との間の差は、1は対象関数のエントリポイントを結合し、一方、5は関数の呼び出しサイトを結合するということである。いくつかの実施形態において、ネイティブ結合用結合点の記述言語は、エンドユーザが相対的な結合点を特定することを許す。この場合、ネイティブ関数呼び出しが、結合点たとえばシステム対象関数呼び出しの前、後、またはその代わりに挿入されうる。たとえば、ネイティブ結合用結合点の記述は、ネイティブ関数fooが対象関数barに対するすべての呼び出しの直後に呼び出されることを特定しうる。また結合点の記述言語は、ネイティブ関数呼び出し以外のコードを結合点において挿入するために使用されうる。そのような実施形態において、結合点の記述は、a対象プログラム内の定義された箇所、b呼び出されるべき目的コードブロックまたはネイティブコード関数に対する参照、を含む。挿入されるコードが目的コード21である場合には、トランスレータ19は、結合点において、パラメータ変換およびネイティブ呼び出し規約後述するに関連付けられたほとんどの動作を行なう必要がない。この場合、トランスレータ固有の目的コード呼び出し規約に準拠することで十分である。任意の目的およびネイティブコードの挿入は、トランスレータ19が、トランスレート済みプログラム上の他のタスク、たとえばデバッギングおよびパフォーマンスプロファイリングを実行することを許す。代替的な実施形態において、対象対ネイティブ関数マッピングは、対象プログラムの記号テーブルにおいて、実行時前に、実行時記号パッチングと呼ばれるプロセスにおいてエンコードされる。実行時記号パッチングは、対象プログラムの記号テーブル内のエントリを、特別なネイティブ結合マーカに置換する。これは、対象プログラムの扱いを、対象プログラムがコンパイルされたコンパイル時後で、しかし対象プログラムがトランスレートされる実行時前に、行なうことが必要とする。トランスレータ19が実行時に記号テーブルマーカーに遭遇すると、トランスレータ19は、記号テーブルマーカーを結合点の記述としてインタープリットし、かつ、記号テーブルマーカーをインタープリットして、どのネイティブ関数を呼び出すべきかを識別する。本実施形態において、結合されるべき対象関数の識別子identity;以下、身元ともいうは、記号テーブル内の記号テーブルマーカーの箇所において暗黙的である。なぜならば、記号テーブルマーカーは、特定の対象関数に対応する記号テーブルエントリ内に置かれるからである。結合点の記述によって結合点を明白に識別する代わりに、結合点が、代替的に、トランスレータ固有の対象命令セット拡張部分によって暗黙的に識別されうる。トランスレータ固有の対象命令セット拡張部分は、コンパイルされると、対象コードにおいて移植plantされる後述のS-呼び出しを参照のこと。パラメータ変換ネイティブ関数を呼び出すときに、トランスレータ19は、目的アーキテクチャの呼び出し規約に適合しなければならない。比較して、目的コード21が目的アーキテクチャ呼び出し規約に準拠することは、トランスレータ19が目的コード21の全体を通して何らかの一貫した呼び出し規約に準拠する限り、必ずしも必要ではない。加えて、トランスレータ19は、対象装置状態目的コード21において表わされるとネイティブ装置状態ネイティブコード28において表わされるとの間のデータ変換を実行することを必要としうる。両状態とも、ネイティブ関数の入力パラメータおよびその戻り値もしあればに対するものである。そのようなデータ変換の例は、iエンディアン変換すなわち、バイト交換swapping、iiデータ構造アライメントalignment、iii対象アドレスと目的アドレスとの間の変換、及びiv値変換たとえば、定数変換または値スケーリング、を含む。たとえば、MIPSアーキテクチャ上では、関数パラメータがレジスタ内で受け渡され、一方、x86アーキテクチャ上では、パラメータがスタック上で受け渡される。MIPSx86トランスレータがネイティブ関数を呼び出すためには、x86呼び出し規約は、関数パラメータを対象レジスタからスタックへ移動させることを必要とする。図6は、ネイティブ関数を呼び出すためにトランスレータ19によって実行されるステップを示す。ネイティブ関数を呼び出すためには、トランスレータ19は、複数のステップを実行しなければならない。すなわち、パラメータセットアップ501、入力パラメータ変換503、ネイティブ関数呼び出し505、及び結果変換507である。パラメータセットアップ501は、関数呼び出しパラメータの値を計算する目的コード21を参照する。入力パラメータ変換503は、関数呼び出しパラメータ値を、それらの目的コード21表現から、ネイティブ関数コードが予想するフォーマットおよび箇所に構成する。ネイティブ関数呼び出し505は、ネイティブ関数に対する実際の関数呼び出しであり、且つ、ネイティブ呼び出し規約に準拠する仕方で、関数プロトタイプによって必要とされる順番に、再フォーマット済みパラメータを構成することを含む。関数プロトタイプは、関数のパラメータの順番および形式と、関数の戻り値の形式とを示す。たとえば、ネイティブ呼び出し規約が、引数がスタック上で受け渡されることを必要とする場合には、ネイティブ関数を呼び出す目的コード21は、引数をスタック上に正しい順番で置いて、スタックポインタを相応に進めなければならない。結果変換507は、関数の戻り値もしあればを変換し、当該関数は、ネイティブアーキテクチャに整合するフォーマットで値を戻し、トランスレータはこの値を、目的コード21によって用いられる表現に変換する。パラメータセットアップ501は、ネイティブ結合メカニズム22に専用のものではない。なぜならば、目的コード21は、関数がトランスレート済み対象コード21として又はネイティブコード28として呼び出されるのかに関係なく、パラメータ値を計算しなければならないからである。ネイティブ関数呼び出しがどの特定の対象レジスタをパラメータ値として使用するのかを、トランスレータ19が知らない場合には、トランスレータ19は、使用される対象レジスタの値を修正して、対象レジスタバンク27が一貫した状態にあることを保証しなければならない。対象レジスタ値の計算は、遅延評価などのトランスレータ最適化によって、これらの値が必要とされるまで延期されても良い。この場合、評価が延期されたレジスタの強制的な計算は、修正によって参照される。修正されると、対象レジスタ値は次に、対象レジスタバンク27に記憶される。関数の明示的なパラメータの値を計算すること場合によっては、すべての対象レジスタの修正を必要とするに加えて、パラメータセットアップステップ501は、対象メモリ空間が一貫した状態にあることも保証しなければならない。なぜならば、ネイティブ呼び出しが、メモリアクセスの形態において副作用を有する場合があるからである。一実施形態において、ネイティブ呼び出しスタブに対するか、あるいは基礎となるネイティブ関数に対するネイティブ関数呼び出しをエンコードするIRによって、対象メモリ状態を修正する。この修正は、対象プログラムにおいて関数呼び出しの前に行なわれるであろうすべてのロードおよび記憶が、ネイティブ関数呼び出しの前に目的コードにおいてプラントされるように、かつ、同様に、関数呼び出しの後に行なわれるべきメモリアクセスが、ネイティブ呼び出しの前にまったくプラントされないように行なわれる。パラメータ変換509は、ステップ503,505,及び507を一括して参照するために、すなわち、異なるデータフォーマット間のすべての個々の変換と、目的コード21およびネイティブコード28の呼び出し規約とを参照するために用いられる。パラメータ変換509を実行するコードは、呼び出しスタブと呼ばれる。呼び出しスタブは、基礎となるネイティブ関数呼び出しの周りの最小限のラッパーを含み、その唯一の目的は、目的コード21呼び出し元が、ネイティブコード28呼び出し先とやり取りできることを許すことである。したがって単一の呼び出しスタブは、目的コード21およびネイティブコード28のコンポーネントに分割されうる。パラメータ変換509が、全体に目的コード21において起こるのか、あるいは部分的にネイティブコード28において起こるのかは、ネイティブ結合の実装に依存する。ネイティブコードスタブいくつかの実施形態において、ネイティブ結合に対するパラメータ変換509は、ネイティブコード28によって部分的に行なわれる。ネイティブコードスタブは、トランスレータ19によって最適化されないという不利な点を有する。これらの実施形態において、目的コード21が、なんらかのパラメータ変換を実行し、ネイティブ呼び出し規約を用いてネイティブ呼び出しスタブを呼び出す。次に、呼び出しスタブのネイティブコード28は、さらなるパラメータ変換を実行し、基礎となるネイティブ関数を呼び出す。図4は、ネイティブコード呼び出しスタブ113に基づいてネイティブ結合を用いるトランスレータ120の例示的な実施形態における関数呼び出しの動作フローを示すブロック図を示す。この例での対象プログラム106は、対象実行ファイル107および多くの対象ライブラリを含む。対象ライブラリは、独占的ライブラリ109およびシステムライブラリ111を含む。トランスレータ120は、対象システムライブラリ関数111に対する呼び出しを、ネイティブコード呼び出しスタブ113に対する呼び出しに置換する。ネイティブコード呼び出しスタブ113を呼び出す目的コード21は、パラメータ変換を実行する。ネイティブコード呼び出しスタブ113は、さらなるパラメータ変換およびパラメータマッピングを実行する。次に、ネイティブコード呼び出しスタブ113は、ネイティブシステムライブラリ関数117を呼び出す。ネイティブコードスタブ:統一されたインターフェースUniformInterface一実施形態において、ネイティブコードパラメータ変換509は、統一された呼び出しスタブ関数インターフェースを規定することによって容易にされる。統一された呼び出しスタブ関数インターフェースは、すべてのネイティブ呼び出しスタブに対する固定された関数署名と、対応するデータ形式とを規定し、それは、トランスレータ120が、基礎となるネイティブ関数の関数署名プロトタイプを何ら知ることなしに、呼び出しスタブを呼び出すことを許す。これは、呼び出しスタブが、高レベルのプログラミング言語たとえばCまたはCにおいて実装されることを許し、それは、ネイティブ結合メカニズムが、トランスレータ19のエンドユーザにとって、より利用しやすいものとする。この実施形態において、呼び出しスタブ関数は、実行可能なトランスレータにリンクされる実行可能なネイティブコードとしてコンパイルされる。実行中、トランスレータ120は、ネイティブ呼び出し規約を用いて、統一されたインターフェースを通して呼び出しスタブを呼び出す。呼び出しスタブインターフェースは統一されているため、呼び出しスタブを呼び出す目的コードのシーケンスは、すべてのネイティブ呼び出しに対して同じである。たとえば、一実施形態において、統一された呼び出しスタブインターフェースは、C関数であって、正確に2つのパラメータ呼び出しサイトの対象アドレスと、すべての対象レジスタ値を含む統一されたデータ構造に対する参照を取り、および1つの値トランスレータが実行すべき次の対象命令の対象アドレスを戻すものである。呼び出しスタブに受け渡される統一されたデータ構造は常に、すべての対象レジスタの現在の値さもなくば、対象コンテキストと呼ばれるを含む。統一された呼び出しスタブインターフェースに基づくネイティブ結合メカニズムでは、ネイティブ結合は、複数のコンポーネント、すなわち、iすべての対象レジスタ値を修正する特別なIRノード形式、iiネイティブ呼び出し規約に基づいて、すべての対象レジスタを統一されたコンテキスト構造に整列し、且つ、呼び出しスタブを呼び出す目的コード21、iii特定の対象レジスタ値を関数パラメータに整列し、且つ、ネイティブ関数を呼び出すネイティブ呼び出しスタブ、に分割される。トランスレーション中に、ネイティブ呼び出しサイトが、ネイティブ呼び出しIRノードにトランスレートされる。ネイティブ呼び出しIRノードは、すべての対象レジスタのIRに対する依存関係参照を含む。目的コード生成フェーズにおいて、対象レジスタ値に対応する目的コードが、ネイティブ呼び出しの前に生成されることを、ネイティブ呼び出しIRノードのこれらのIR依存関係が保証する。遅延評価などのトランスレータ最適化は、これらの値が必要とされるまで対象レジスタ値の計算を延期しても良い。ネイティブ呼び出しIR依存関係は、コード生成フェーズに、ネイティブ呼び出しスタブがすべての対象レジスタ値を必要とすることを通知する。したがって、トランスレータ19は、ネイティブ呼び出しスタブ113を呼び出す目的コード21を生成する前に、すべての対象レジスタ値を修正する目的コード21を生成する。同様に、ネイティブ呼び出しIRノードは、コードを生成するためにメモリ参照として処理される。従って、対象コード17における関数呼び出しの前にあるすべてのロードおよび記憶が、目的コード21における関数呼び出しの前に生成されて実行される。同様に、対象コード17において関数呼び出しの後に行なわれるすべてのロードおよび記憶は、ネイティブ呼び出しの後まで延期される。必要に応じて、トランスレータ19は、ネイティブ呼び出しIRを保持するための特別な抽象レジスタを含む。トランスレーションのIR生成フェーズでは、抽象レジスタが、IRツリーのためのプレースホルダすなわちIRツリーのルートノードとして機能する。IRツリーは、抽象レジスタにリンクされなければならない。そうでないと、IRツリーは目的コードとして放出されない。他のトランスレータでは、ネイティブ呼び出しIRノードは、既存の抽象レジスタ、たとえば現在のブロックの後継アドレスに対する抽象レジスタに付されうる。ネイティブ呼び出しスタブ113を呼び出す目的コード21は、対象レジスタ値を修正し、次に、その値を対象コンテキスト構造に記録する。本実施形態において、ネイティブコード呼び出しスタブ113はネイティブコード28によって実装されるため、対象コンテキストは、ネイティブアーキテクチャに整合する表現で構築されなければならない。したがって、目的コード21は、必要に応じてパラメータ変換503を行なって、対象レジスタ値を目的コード表現からネイティブコード表現に変換する。複数の値を他のアーキテクチャと整合するデータ構造表現に変換するプロセスは、しばしばマーシャリングmarshallingと呼ばれる。目的コード21は、すべての対象レジスタ値のネイティブ表現を含む対象コンテキストを構築する。次に目的コード21は、ネイティブコード呼び出しスタブ113を呼び出し、呼び出しスタブ113に対象コンテキストをパラメータとして受け渡す。呼び出しスタブ113は、基礎となるネイティブ関数を呼び出し、対象コンテキストから必要とされる特定の対象レジスタを引き出して、その対象レジスタをネイティブ関数に適切なパラメータとして受け渡す。こうして呼び出しスタブ113は、ネイティブ関数のプロトタイプをエンコードし、且つ、特定の対象レジスタの、対応するネイティブ関数パラメータへのマッピングを定義する。場合によっては、ネイティブ関数インターフェースがその対象コード同等物と実質的に異なっており、従って対象データがネイティブ関数パラメータとしての使用に適するように、データ表現に対する変換および呼び出し規約を超えてさらなる計算が対象データに対して実行されなければならない。そのような場合には、呼び出しスタブ113は、対象レジスタ値に対してさらなるパラメータ変換を実行しうる。たとえば、ネイティブ関数は、その対象コード同等物とは異なる単位での特定のパラメータを予想しても良い。この場合、呼び出しスタブ113は、ネイティブ関数を呼び出す前に、適切な対象レジスタ値に対して定数変換を実行して、そのパラメータに対する単位形式の差に対処する。統一されたネイティブ呼び出しスタブインターフェースを用いる実施形態において、目的コード21は、すべての対象レジスタを、目的コード表現からネイティブコード表現に無差別に変換する。次に、ネイティブ呼び出しスタブ113は、ネイティブ関数のプロトタイプがパラメータとして必要とする特定の変換済み対象レジスタを取り出す。ネイティブ呼び出しスタブ113は、呼び出し中の関数の対象バージョンとネイティブバージョンとの間の差を反映するために、さらなるパラメータ変換を行なっても良い。目的コード21は、目的コード21とネイティブコード28との間の表現差に対する調整を行ない、一方、呼び出しスタブ113は特定の、基礎となるネイティブ関数の署名に対処する。本実施形態において、ネイティブ結合用結合点の記述は、結合するための対象関数および、対応するネイティブ呼び出しスタブ関数を識別し、一方、結合先の基礎となるネイティブ関数の身元は、呼び出しスタブの実装において暗黙的であるすなわち、ハードコードされている。ネイティブコードスタブ:コンパイル済みスクリプト他の実施形態において、ネイティブコードパラメータ変換が、特別目的のネイティブ結合プログラミング言語以後、スクリプト言語と呼ぶを用いて実装される。実行前または実行中に、トランスレータ19は、呼び出しスタブ関数実装スクリプト言語を構文解析し、それを、ネイティブ実行可能モジュールにコンパイルする。次に、前述した通り、呼び出しスタブモジュールがトランスレータ実行ファイルとリンクされ、ネイティブ呼び出しスタブ機能がネイティブ呼び出し規約を用いて呼び出される。ネイティブ結合スクリプトは、呼び出しスタブの実行可能な表現に、コンパイルされるか又はインタープリットされる。一実施形態において、結合点の記述は、トランスレータの実行前に、個々のツールによって実行可能なネイティブコードにインタープリットされる。他の実施形態において、トランスレータ自体が、実行時に結合点の記述を、実行可能なネイティブコードに又はトランスレータIR後で目的コードとして生成されるに、インタープリットまたはコンパイルする。いくつかの実施形態において、スクリプト言語は、トランスレータに固有である特別の目的言語である。スクリプト言語は、広範囲の可能なパラメータ変換動作を説明するためにプリミティブプログラミング言語構築ブロックを含む。ありうるパラメータ変換動作は、iデータ形式の記述、iiこれらのデータ形式の目的コードとネイティブ表現との間の変換、iiiネイティブ関数の識別、iv特定の対象レジスタの特定の関数パラメータへのマッピング、v対象プログラムのメモリ空間に対するメモリアクセス、及びvi基本的な数学演算、を含む。代替的な実施形態において、スクリプト言語はさらに、vi基本的な論理動作、及びvii複数のネイティブ結合スクリプトに渡る一時的な値のグローバルな記憶を含む。これらのプリミティブすなわちトランスレータによって又は特別なツールによって、スクリプトから生成されるネイティブコードを実装することは、目的アーキテクチャの表現および呼び出し規約と整合されなければならない。本実施形態において、ネイティブ結合用結合点の記述は、結合すべき対象関数および対応するネイティブ呼び出しスタブ関数を識別し、一方、結合先の基礎となるネイティブ関数の身元は、呼び出しスタブのスクリプト言語の実装においてハードコード化される。目的コードスタブ他の実施形態において、ネイティブ結合に対するパラメータ変換は、目的コードにおいて全体的に実施される。本実施形態において、トランスレータ19は、デコード時にネイティブ結合呼び出しを検出し、且つ、IRツリーそれは最終的に目的コードとして生成されるとしてパラメータ変換をエンコードする。パラメータ変換とネイティブ関数プロトタイプの詳細とをIRにおいて表わすことによって、呼び出しスタブコードは、対象コードに統合されることになる呼び出しスタブのIRは、対象コードのIRと区別できない。これは、トランスレータが、パラメータ変換コードに対して最適化たとえば、グループブロックを施すことを許す。対照的に、ネイティブコードにおいて実行されるパラメータ変換、たとえばネイティブコード呼び出しスタブにおいて行なわれる対象レジスタの関数パラメータへのマッピング前述は、トランスレータの外であり、最適化されることができない。図5は、目的コード呼び出しスタブ115に基づいてネイティブ結合を用いるトランスレータ122の例示的な実施形態における関数呼び出しの動作フローを示すブロック図を示す。対象プログラム106は、対象実行ファイル107および多くの対象ライブラリからなる。対象ライブラリは、独占的ライブラリ109およびシステムライブラリ111を含みうる。トランスレータ122は、対象システムライブラリ関数111に対する呼び出しを、目的コード呼び出しスタブ115に置換する。目的コード呼び出しスタブ115は、パラメータ変換およびパラメータマッピングを実行し、次にネイティブシステムライブラリ117内の関数を呼び出す。トランスレータ122が目的コード呼び出しスタブ115を用いる実施形態において、目的コード21が結合済みネイティブ関数を直接的に呼び出し、すべてのパラメータ変換およびパラメータマッピングが目的コード21によって実行される。これらの実施形態において、目的コード21が、特定のネイティブ関数の表現変換および署名すなわち、特定の対象レジスタの対応するネイティブ関数パラメータへのマッピングの両方に対処する。目的コード21がパラメータマッピングを実行するためには、トランスレータ122は、トランスレーション中に、ネイティブ関数プロトタイプおよび対象レジスタ対パラメータマッピングを知っていなければならない。場合によっては、目的コード呼び出しスタブ115を、このスタブ115を呼び出す目的コード21呼び出し元目的コードから、別個のブロックにおいてトランスレートする。他の場合には、目的コード呼び出しスタブ115は、このスタブ115を呼び出す目的コード21と同じブロックにおいてトランスレートされ、それは、呼び出しスタブコードが、呼び出し元目的コードと統合し且つこの呼び出し元目的コードで最適化すること初期結合メカニズムと呼ばれるを許す。対象プログラムが多くの呼び出しサイトから特定の対象関数を呼び出す場合に、目的コード呼び出しスタブ115をあらゆる呼び出しサイトにおいてインラインすることは不都合である。なぜならば、過剰なメモリが、呼び出しスタブコードの結果として生じる重複によって消費されるからである。そのような場合、トランスレータ122は、呼び出しスタブをあらゆる呼び出しサイトにおいてインラインするのではなくて、各トランスレート済み呼び出しサイトが呼び出す別個のブロックとして、目的コード呼び出しスタブ115を保持する。ネイティブ結合の最適化の1つは、非常に頻繁に実行されるブロックでのみ、初期結合を用いるすなわち、呼び出しスタブをインラインすることである。目的コードスタブ:スキゾSchizo呼び出し他の実施形態において、トランスレータ19は、スキゾ呼び出し、すなわちS-呼び出しと呼ばれるメカニズムを用いる。このメカニズムでは、対象コード単位がコンパイルされるときに対象コードに挿入されるトランスレータ固有のネイティブ結合命令S呼び出しコマンドと呼ばれるを含むように対象命令セットを拡張することによって、目的コードパラメータ変換が容易にされる。トランスレータ19が対象コードをデコードするとき、トランスレータ19は、これらのS-呼び出しコマンドを検出し且つインタープリットし、そして適切なIRまたは目的コードをプラントしてパラメータ変換を実行する。S-呼び出しメカニズムは、対象プログラムの開発者からのサポートを必要とする。対象プログラムがコンパイルされるとき、S-呼び出しコマンドは、コンパイル済み対象プログラムにおいて対象命令としてエンコードされる。ネイティブ関数に対する呼び出しを記述する呼び出しスタブは、パラメータ変換を支援する正規の合法的な対象命令を含みうるS-呼び出しコマンドを含むことだけに制約されない。組み合わせて、S-呼び出しコマンドおよび正規の対象命令は、パラメータ変換に必要とされるすべての情報および動作をエンコードする。一実施形態において、S-呼び出しコマンドは、複数のサブコンポーネントから構築される可変長命令にエンコードされる。従って、1つのS-呼び出しコマンド命令が、正規の対象コード命令よりも大きく、且つ、複数の正規の対象命令のサイズでさえあり得る。S-呼び出しコマンドはサブコンポーネントで始まり、当該サブコンポーネントは、命令をS-呼び出しコマンドとして識別し、且つ対象アーキテクチャ上での違法命令スキゾエスケープと呼ばれるとしてインタープリットされることが知られている。スキゾエスケープサブコンポーネントは任意的に、S-呼び出しコマンド内に含まれるコマンドの形式をさらに識別しうる。S-呼び出しコマンドは好ましくは、5つの形式のコマンドクラスに分割される。すなわち1マーカ、2パラメータ、3呼び出し、4コピー、および5ヌリファイである。S-呼び出しコマンドのクラスは、先頭のスキゾエスケープサブコンポーネントの未使用のビットにエンコードされる。スキゾエスケープの後に、クラス固有のオプションおよび/または引数の組み合わせが続く。これらはそれぞれ、予め定義されたオプコードopcodeおよびフォーマットを有し、またそれぞれ、S-呼び出しコマンド命令において1つまたは複数のワードすなわち4バイト単位としてエンコードされる。S-呼び出しコマンド命令は、初期スキゾエスケープの再現であるサブコンポーネントで終了する。以下、前述した5つの形式のS-呼び出しコマンドについて、より詳しく説明する。しかし当然のことながら、他の形式のトランスレータ固有のネイティブ結合命令を、すでに列挙した5つの形式以外のS-呼び出しコマンドとして用いても良いことは、本発明の発明者が完全に意図するところである。S-呼び出しのマーカコマンドは、アプリケーションバイナリインターフェースABI固有の最適化を可能にするために用いられる任意的なマーカである。S-呼び出しマーカーコマンドは、トランスレータ固有のコードたとえばネイティブ関数に対する呼び出しスタブを含む対象コード17の範囲開始および終了アドレスを示す。この範囲は、対象関数の全範囲と一致していても良いし、一致していなくても良い。S-呼び出しマーカーコマンドは、2つの形式からなる。すなわち、開始および終了である。S-呼び出しマーカーコマンドは、1つの文字列引数を有していて、マーク済みの点に名前たとえば、結合されている対象関数の名前を割り当てる。S-呼び出しのパラメータコマンドは、ネイティブ関数パラメータとして用いられる値を識別し、且つ、その値に対する適切なパラメータ変換をエンコードする。一実施形態において、各S-呼び出しパラメータコマンドは、対応する値をスタック上にプッシュすることによって、関数呼び出しに対する次のパラメータを定義し、それ故にS-呼び出しパラメータコマンドが、関数プロトタイプに対応する順序に設けられていることを必要とする。S-呼び出しの呼び出しコマンドは、ネイティブ関数に対する実際の関数呼び出しをエンコードする。S-呼び出しの呼び出しコマンド引数は、関数の戻り値を記憶する箇所と、呼び出されている関数の対象装置状態における名前、絶対アドレス、またはアドレス箇所のいずれかと、を含む。S-呼び出しのコピーコマンドは、対象レジスタまたは対象メモリ箇所に対する又はそれらからの値をコピーする動作と、目的コードとネイティブ表現との間の変換を実行する動作とをエンコードする。S-呼び出しのヌリファイコマンドは、このコマンドが従う命令を無効にする。このコマンドを、無条件のブランチとともに用いられてこれについては後述する、ネイティブで実行されるときに対象プログラムの適切な実行を許し、さらに、トランスレータがコードのトランスレータ固有部分を識別し且つインタープリットすることを許す。トランスレーションの間、トランスレータ19は、スキゾエスケープを検出し、且つ、S-呼び出しコマンドを、対応するパラメータ変換およびネイティブ関数呼び出し動作のIR表現にデコードする。トランスレータ19は、パラメータ変換IRを現在のブロックのIRフォレストに統合し、それは、その後目的コードとして生成される。パラメータ変換動作をIRにエンコードすることは、パラメータ変換コードが、対象コードをエンコードするIRに統合され且つ当該IRで最適化されることを許す。S-呼び出しコマンドは、対象プログラムにおいて、先頭の命令のオプコードopcode、トランスレータ19だけが分かっているスキゾエスケープを用いてエンコードされる。なぜならば、S-呼び出しコマンドは、トランスレータ固有のネイティブ結合命令であるからである。対象プロセッサは、S-呼び出しコマンドを、違法の対象命令としてインタープリットする。したがって、S-呼び出しコマンドの実行は、対象プログラムがネイティブですなわち、対象アーキテクチャ上で実行されているときには、回避されなければならない。対象プログラムソフトウェアの開発者は、S-呼び出し拡張対象プログラムがネイティブで実行することを許すために複数の方法を用いる。この方法は、a条件付きの実行、およびbブランチルックアヘッド構文解析を含む。条件付きの実行は、条件付きの対象コードからなる。この条件付きの対象コードは、対象プログラムがネイティブで実行されているのか又はトランスレート済みプログラムとして実行されているのかを、実行時の環境に基づいてチェックし、且つ、ネイティブで実行されている場合にはS-呼び出しコマンドを省略するスキップする。ブランチルックアヘッド構文解析は、無条件のブランチ命令からなる。無条件のブランチ命令は、対象コード内でプラントされて、すべてのトランスレータ固有の命令たとえばこれに限定されないがS-呼び出しコマンドを省略する。ネイティブで実行するときには、無条件のブランチが実行され、その結果、トランスレータ固有のコードがスキップされる。トランスレート済みプログラムとして実行されるときは、トランスレータは、S-呼び出しヌリファイコマンドが後に続く任意の無条件のブランチ命令を無視するすなわち、無条件のブランチは、デコーディングにおいてトランスレータ固有のコードを識別するためにトランスレータによって用いられる対象命令パターンの一部である。目的コードスタブ:外部のスキゾスタブ他の実施形態において、スキゾ呼び出しコマンドと普通の対象命令とを含む呼び出しスタブは、対象コードの別個にコンパイルされる単位内に配置される。特別目的のネイティブ結合用結合点の記述言語前述したようには、対象コード箇所を結合点として特定するためにトランスレータ19によって使用される。トランスレータ19がそのような結合点に到達すると、制御フローは変えられて、外部のスキゾスタブを代わりに実行する。この点から以降では、トランスレータの作用は、スキゾ呼び出しに対して説明した作用と同じである。外部のスキゾスタブは、S-呼び出しコマンドを対象コードに直接挿入できないときたとえば対象ライブラリ/アプリケーションに対するソースコードが利用できないときに、S呼び出しコマンドを用いることを許す。目的コードスタブ:インタープリット済みスクリプト代替的な実施形態において、目的コードパラメータ変換は、前述された通り、特別目的のネイティブ結合実装スクリプト言語スクリプト言語によって容易にされる。この実施形態において、実行時に、トランスレータが、ネイティブ結合スクリプトを、パラメータ変換のIR表現にインタープリットする。トランスレータは、パラメータ変換IRを現在のブロックのIRフォレストに統合し、それは、その後に、最適化されて、目的コードとして生成される。そのようなトランスレータは、スクリプト言語を構文解析し且つデコードすることができるフロントエンドコンポーネントを含まなければならない。本実施形態において、ネイティブ結合用結合点の記述は、結合すべき対象関数および対応するネイティブ呼び出しスタブ関数を特定し、一方、結合先の基礎となるネイティブ関数の身元は、呼び出しスタブの実装においてハードコードされる。目的コードスタブ:統一されたインターフェース代替的な実施形態において、目的コードパラメータ変換は、前述された通り、統一された呼び出しスタブ関数インターフェースを定義することによって容易にされる。統一された呼び出しスタブ関数インターフェースは、すべてのネイティブ呼び出しスタブに対する固定された関数署名と、対応するデータ形式とを定義し、それは、トランスレータが、基礎となるネイティブ関数の関数署名プロトタイプを何ら知ることなしに、呼び出しスタブをネイティブ関数として呼び出すことを許す。これは、呼び出しスタブが高レベルプログラミング言語たとえばCまたはCにおいて実装されることを許し、それは、ネイティブ結合メカニズムがトランスレータ19のエンドユーザにとって、より利用しやすいものとする。前述のネイティブコードの統一された呼び出しスタブインターフェースとは対照的に、いくつかの実施形態において、トランスレータは、実行時に呼び出しスタブ実装を構文解析し、且つ、呼び出しスタブ実装を、パラメータ変換のIR表現にインタープリットする。言い換えれば、トランスレータは、呼び出しスタブの実装をトランスレータIRにコンパイルする。トランスレータは、パラメータ変換IRを現在のブロックのIRフォレストに統合し、それは、その後最適化されて、目的コードとして生成される。そのようなトランスレータは、コンパイラと同様に、高レベルのプログラミング言語を構文解析し且つデコードすることができるフロントエンドコンポーネントを含まなければならない。本実施形態において、ネイティブ結合用結合点の記述は、結合すべき対象関数および対応するネイティブ呼び出しスタブ関数を識別し、一方、結合すべき基礎となるネイティブ関数の身元は、呼び出しスタブの実装においてハードコードされる。いくつかの好ましい実施形態について図示して説明してきたが、当業者であれば理解するように、添付請求項において規定されるように、本発明の範囲から逸脱することなく、種々の変形および変更を行なっても良い。本出願に関連して本明細書と同時にまたは以前に出願され、本明細書とともに公衆の便覧に公開されているすべての論文および文献に注意を払うものであり、そのような論文および文献はすべて、その内容が本明細書において参照により取り入れられている。本明細書任意の添付請求項、要約、および図面を含むで開示されるすべての特徴、および/または同様に開示される任意の方法またはプロセスのすべてのステップは、そのような特徴および/またはステップの少なくとも一部が互いに相容れない組み合わせを除いて、任意の組み合わせで組み合わせても良い。本明細書任意の添付請求項、要約、および図面を含むで開示される各特徴を、特にことわらない限り、同じ、同等、または類似の目的を満たす代替的な特徴と取り替えても良い。したがって、特にことわらない限り、開示される各特徴は、同等または類似の特徴の包括的な組の1つの例に過ぎない。本発明は、前述の実施形態の詳細に限定されない。本発明は、本明細書任意の添付請求項、要約、および図面を含むで開示される特徴の任意の新しい1つまたは任意の新しい組み合わせに及ぶか、または同様に開示される任意の方法またはプロセスのステップの任意の新しい1つまたは任意の新しい組み合わせに及ぶ。以下に、本発明の第1の内容を記載する。1対象プロセッサによって実行可能な対象プログラムコード17を、目的プロセッサ13によって実行可能な目的プログラムコード21にトランスレーションする間に、ネイティブコード28を実行するためのネイティブ結合を行なうための方法であって、前記ネイティブコード28は、前記目的プロセッサ13によって実行可能なコードであり、前記方法は、対応するネイティブコード28を有する特定の対象プログラムコード17を特定すること、前記特定された対象プログラムコード17に対応するネイティブコード28を特定すること、前記特定された対象プログラムコード17のトランスレート済みバージョンを実行する代わりに、前記対応するネイティブコード28を実行すること、を備える方法。21に記載の方法において、前記特定された対象プログラムコード17が対象関数109に対応し、前記特定されたネイティブコード28がネイティブ関数117に対応し、前記ネイティブコード28を実行するステップは、前記対象プログラムコード17のトランスレーションにおいて、前記対象関数109の代わりに前記ネイティブ関数117を実行することを含む、方法。32に記載の方法において、前記ネイティブ関数117を実行するステップは、ゼロ以上の関数パラメータを目的コード表現からネイティブコード28表現に変換すること、前記ネイティブ関数117を、前記ネイティブ関数117のプロトタイプに基づいて、前記変換された関数パラメータを用いて呼び出すこと、前記呼び出されたネイティブ関数117のゼロ以上の戻り値を、ネイティブコード28表現から目的コード表現に変換すること、を含む、方法。43に記載の方法において、前記変換するステップにおける少なくとも1つの変換は、該変換の中間表現を生成する、方法。53または4に記載の方法において、前記変換するステップにおける少なくとも1つの変換は、目的コードを生成する、方法。63、4、または5に記載の方法において、前記ネイティブ関数117を実行するステップはさらに、目的コードにおいて、すべての対象レジスタ値を目的コード表現からネイティブコード28表現に変換すること、統一された呼び出しスタブインターフェースに基づいて、前記変換された対象レジスタを用いて、目的コードからネイティブコード28呼び出しスタブ関数を呼び出すこと、ネイティブ関数117のプロトタイプに基づいて、特定の対象レジスタおよび/またはパラメータスタックを用いて、ネイティブコード28呼び出しスタブ関数からネイティブ関数117を呼び出すこと、を含む、方法。73~6のうちのいずれか一に記載の方法において、前記ネイティブ関数117を実行するステップは、関数パラメータを、目的コード表現からネイティブコード28表現に変換すること、前記ネイティブ関数117のプロトタイプに基づいて、前記変換された関数パラメータを用いて、前記ネイティブ関数117を呼び出すこと、前記呼び出されたネイティブ関数117の結果を、ネイティブコード28表現から目的コード表現に変換すること、を含む、方法。83~7のうちのいずれか一に記載の方法において、前記関数パラメータを変換するステップおよび前記ネイティブ関数117呼び出すステップは、対象コードにおいて、対象命令セットに加えられるトランスレータ固有の命令によって記述される、方法。91~8のうちのいずれか一に記載の方法において、前記特定の対象コードおよびその対応するネイティブコード28を特定するステップは、結合点の記述を用いて行なわれる、方法。109に記載の方法において、前記結合点の記述は対象関数109およびネイティブ関数117を含み、該対象関数109は、対応するネイティブコード28を有する特定の対象プログラムコード17を特定し、該ネイティブ関数117は、前記対応するネイティブコード28を特定する、方法。1110に記載の方法であって、さらに、対象コードのトランスレーションの間に、前記結合点の記述に含まれる前記対象関数109に遭遇すると、目的コード内に、前記ネイティブ関数117に対する呼び出しスタブを挿入すること、を備える方法。129、10、または11に記載の方法において、前記結合点の記述を、トランスレーションを行なうトランスレータ内に埋め込む、方法。139~12のうちのいずれか一に記載の方法であって、さらに、トランスレーション実行の開始時に、前記結合点の記述を、記憶された結合点の記述ファイルから読み取ること、を備える方法。149~13のうちのいずれか一に記載の方法において、前記結合点の記述は、対象コード内の箇所および対応するネイティブ関数117を含み、該対象コード内の箇所は、対応するネイティブコード28を有する特定の対象プログラムコード17を特定し、該ネイティブ関数117は、前記対応するネイティブコード28を特定する、方法。159~14のうちのいずれか一に記載の方法において、前記結合点の記述は、対象コード内の箇所および呼び出すべきコードに対する参照を含み、該対象コード内の箇所は、対応するネイティブコード28を有する特定の対象プログラムコード17を特定し、該呼び出すべきコードに対する参照は、前記対応するネイティブコード28を特定する、方法。1615に記載の方法において、前記呼び出すべきコードは目的コードである、方法。179~16のうちのいずれか一に記載の方法において、前記結合点の記述は、対象関数109呼び出しの前、後、あるいはその代わりに目的コード内に挿入されるネイティブ関数117呼び出しを含む、方法。189~17のうちのいずれか一に記載の方法であって、さらに、対象対ネイティブ関数117マッピングを、前記対象プログラムの記号テーブル内でエンコードすること、前記対象プログラムの前記記号テーブル内のエントリを特別なネイティブ結合マーカと取り替えること、前記特別なネイティブ結合マーカを、このマーカにトランスレーションの間に遭遇したときに、呼び出すべき適切なネイティブ関数117を特定する結合点の記述としてインタープリットすること、を含む実行時記号パッチングを実行する方法。199~18のうちのいずれか一に記載の方法において、前記結合点の記述は、外部のスキゾ呼び出しコマンドに対する対応を含み、該スキゾ呼び出しコマンドはトランスレータ固有のネイティブ結合命令であり、前記方法は、前記対象コードのトランスレーションの間に、外部のスキゾ呼び出しコマンドを特定する結合点の記述に遭遇したときに、トランスレーションのフローを変えて、前記外部のスキゾ呼び出しコマンドの実行とすることを備える方法。2019に記載の方法において、前記外部のスキゾ呼び出しコマンド実行ステップは、前記外部のスキゾ呼び出しコマンドをインタープリットすること、前記外部のスキゾ呼び出しコマンドの中間表現を生成することであって、前記コマンドは、関数パラメータを目的コード表現からネイティブコード28表現に変換し、ネイティブ関数117のプロトタイプに基づいて、該変換された関数パラメータを用いて、ネイティブ関数117を呼び出す、生成すること、を含む、方法。2119に記載の方法において、前記外部のスキゾ呼び出しコマンド実行ステップは、前記外部のスキゾ呼び出しコマンドをインタープリットすること、前記外部のスキゾ呼び出しコマンドに対する目的コードを生成することであって、前記コマンドは、関数パラメータを目的コード表現からネイティブコード28表現に変換し、ネイティブ関数117のプロトタイプに基づいて、該変換された関数パラメータを用いて、ネイティブ関数117を呼び出す、生成すること、を含む、方法。221~21のうちのいずれか一に記載の方法であって、さらに、スキゾ呼び出しコマンドを対象コードに挿入することであって、該スキゾ呼び出しコマンドは、トランスレータ固有のネイティブ結合命令である、挿入すること、対象コードのトランスレーションの間に前記スキゾ呼び出しコマンドを検出すること、を備える方法。2322に記載の方法であって、さらに、対象コードのトランスレーションの間にスキゾ呼び出しコマンドに遭遇したときに、トランスレーションのフローを変えてスキゾ呼び出しコマンドの実行とすること、を備える方法。2423に記載の方法において、前記スキゾ呼び出しコマンド実行ステップは、前記外部のスキゾ呼び出しコマンドをインタープリットすること、前記スキゾ呼び出しコマンドの中間表現を生成することであって、前記コマンドは、関数パラメータを目的コード表現からネイティブコード28表現に変換し、ネイティブ関数117のプロトタイプに基づいて、該変換された関数パラメータを用いて、ネイティブ関数117を呼び出す、生成すること、を含む、方法。2523に記載の方法において、前記スキゾ呼び出しコマンド実行ステップは、前記スキゾ呼び出しコマンドをインタープリットすること、前記スキゾ呼び出しコマンドに対する目的コードを生成することであって、前記コマンドは、関数パラメータを目的コード表現からネイティブコード28表現に変換し、ネイティブ関数117のプロトタイプに基づいて、該変換された関数パラメータを用いて、ネイティブ関数117を呼び出す、生成すること、を含む、方法。2622~25のうちのいずれか一に記載の方法において、前記スキゾ呼び出しコマンドは、複数のサブコンポーネント命令を含む可変長命令である、方法。2726に記載の方法において、前記複数のサブコンポーネント命令はスキゾエスケープサブコンポーネント命令を含み、前記スキゾ呼び出しコマンドを検出するステップはさらに、前記スキゾエスケープサブコンポーネント命令を検出することを含む、方法。2827に記載の方法において、前記スキゾエスケープサブコンポーネント命令はさらに、スキゾ呼び出しコマンドのその他のサブコンポーネント命令によって表わされるスキゾ呼び出しコマンドの形式を特定する、方法。291~28のうちのいずれか一に記載の方法であって、さらに、ネイティブ結合スクリプトを含むネイティブ結合実施スクリプト言語を構文解析してデコードすること、トランスレーションの間に前記ネイティブ結合スクリプトをインタープリットすること、前記ネイティブ結合スクリプトの中間表現を生成して、関数パラメータを目的コード表現からネイティブコード28表現に変換すること、を備える方法。3029に記載の方法であって、さらに、前記ネイティブ結合スクリプトの中間表現を、対象コードのブロックに対する中間表現フォレストに統合すること、前記中間表現フォレストに対する目的コードを生成すること、を備える方法。311~30のうちのいずれか一に記載の方法であって、さらに、目的コードにおいて、すべての対象レジスタ値を目的コード表現からネイティブコード28表現に変換すること、統一された呼び出しスタブインターフェースに基づいて、前記変換された対象レジスタを用いて、目的コードからネイティブコード28呼び出しスタブ関数を呼び出すこと、前記ネイティブコード28呼び出しスタブ関数をインタープリットすること、ネイティブコード28呼び出しスタブ関数結合スクリプトの中間表現を生成して、関数パラメータを目的コード表現からネイティブコード28表現に変換すること、を備える方法。3221または21に従属するいずれか一に記載の方法であって、さらに、ネイティブコード28呼び出しスタブ関数の中間表現を、対象コードのブロックに対する中間表現フォレストに統合すること、前記中間表現フォレストに対する目的コードを生成すること、を備える方法。333または3に従属するいずれか一に記載の方法において、前記ネイティブ関数117を実行するステップはさらに、目的コードにおいて、すべての対象レジスタ値を目的コード表現からネイティブコード28表現に変換すること、前記変換された対象レジスタを用いて、目的コードから、ネイティブコード28呼び出しスタブ関数を呼び出すこと、ネイティブ関数117のプロトタイプに基づいて、特定の対象レジスタおよび/またはパラメータスタックを用いて、ネイティブコード28呼び出しスタブ関数から、ネイティブ関数117を呼び出すこと、を含む、方法。341~33うちのいずれか一に記載の方法であって、さらに、ネイティブコード28呼び出しスタブ関数のスクリプト言語の実施を構文解析すること、前記構文解析されたネイティブコード28呼び出しスタブ関数をコンパイルして、ネイティブコード28実行可能モジュールにすること、前記ネイティブコード28実行可能モジュールを、トランスレーションを行なうための実行ファイルとリンクさせること、を備える方法。3534に記載の方法において、前記ネイティブコード28実行可能モジュールは、目的コードにおいて、すべての対象レジスタ値を目的コード表現からネイティブコード28表現に変換すること、前記変換された対象レジスタを用いて、目的コードから、ネイティブコード28呼び出しスタブ関数を呼び出すこと、ネイティブ関数117のプロトタイプに基づいて、特定の対象レジスタおよび/またはパラメータスタックを用いて、前記ネイティブコード28呼び出しスタブ関数から、ネイティブ関数117を呼び出すこと、に対して実行可能である、方法。3634または35に記載の方法において、前記特定の対象コードおよびその対応するネイティブコード28を特定するステップは、結合点の記述を用いて行なわれ、前記結合点の記述は、対象関数109およびネイティブコード28呼び出しスタブ関数を含み、該対象関数109は、対応するネイティブコード28を有する特定の対象プログラムコード17を特定し、該ネイティブコード28呼び出しスタブ関数は、前記対応するネイティブコード28を特定する、方法。3736に記載の方法であって、さらに、前記ネイティブコード28実行可能モジュールのスクリプト言語の実施において、前記ネイティブコード28呼び出しスタブ関数のネイティブ関数117の身元をエンコードすること、を備える方法。383または3に従属するいずれか一に記載の方法において、前記ネイティブ関数117を実行するステップはさらに、目的コードにおいて、すべての対象レジスタ値を目的コード表現からネイティブコード28表現に変換すること、前記変換された対象レジスタを用いて、目的コードから、目的コード呼び出しスタブ関数を呼び出すこと、ネイティブ関数117のプロトタイプに基づいて、特定の対象レジスタおよび/またはパラメータスタックを用いて、目的コード呼び出しスタブ関数からネイティブ関数117を呼び出すこと、を含む、方法。3938に記載の方法であって、さらに、前記ネイティブ関数117を実行するステップの中間表現を生成すること、前記ネイティブ関数117を実行するステップの中間表現を、対象コードのブロックに対する中間表現フォレストに統合すること、前記中間表現フォレストに対する目的コードを生成すること、を備える方法。401~39のうちのいずれか一に記載の方法において、前記実行すべき対象関数109はシステム呼び出しである、方法。411~40のうちのいずれか一に記載の方法において、前記実行すべき対象関数109はライブラリ関数である、方法。421~41のうちのいずれか一の方法を行なうように、コンピュータによって実行可能であるコンピュータ読取可能なコードの形態のソフトウェアが常駐するコンピュータ読取可能な記憶媒体。43目的プロセッサ13と、1~41のうちのいずれか一の方法を行なうためのトランスレータコードとの組み合わせ。以下に、本発明の第2の内容を記載する。1対象プロセッサによって実行可能な対象プログラムコードを、目的プロセッサによって実行可能であり且つトランスレータによって実行時にトランスレートされて生成される目的プログラムコードに変換するための方法であって、コンピュータが、前記対象プログラムコードを複数の対象プログラムコード単位に分割するステップと、1以上の前記分割された対象プログラムコード単位を1以上の目的プログラムコード単位に変換するステップと、前記目的プロセッサ上で前記変換された目的プログラムコード単位を実行するステップとを実行することを含み、前記変換するステップは、前記対象プログラムコード中の対象関数を特定するステップであって、前記対象プログラムコード中の対象関数はネイティブコードの対応する関数を有し、前記ネイティブコードが前記目的プロセッサによって実行可能なコードであり且つ前記トランスレータの外で直接コンパイルされて事前に生成されたものである、前記対象関数を特定するステップと、前記ネイティブコードの前記ネイティブ関数を特定するステップであって、前記ネイティブコードの前記ネイティブ関数は前記特定された対象関数に対応する、前記ネイティブ関数を特定するステップとを含み、前記実行するステップは、前記特定された対象関数の変換されたコードを実行する代わりに、前記目的プロセッサ上で前記ネイティブ関数を実行するステップを含む、前記方法。2前記ネイティブ関数を実行するステップは、関数パラメータを、目的コードからネイティブコードに変換するステップと、前記ネイティブ関数のプロトタイプに従う前記変換された関数パラメータを、前記ネイティブ関数を呼び出すステップと、前記呼び出されたネイティブ関数の戻り値を、ネイティブコードから目的コードに変換するステップとを含む、1に記載の方法。3前記変換するステップにおける変換は、該変換の中間コードを生成する、1に記載の方法。4前記変換するステップにおける変換は、目的コードを生成する、1に記載の方法。5前記ネイティブ関数を実行するステップは、目的コードにおいて、すべての対象レジスタ値を目的コードからネイティブコード表現に変換するステップと、統一された呼び出しスタブインターフェースに従う前記変換された対象レジスタを用いて、ネイティブコード呼び出しスタブ関数を目的コードから呼び出すステップと、ネイティブ関数のプロトタイプに従う特定の対象レジスタ及び/又はパラメータスタックを用いて、前記ネイティブ関数を前記呼び出されたネイティブコード呼び出しスタブ関数から呼び出すステップとをさらに含む、1~4のいずれか一に記載の方法。6前記ネイティブ関数を実行するステップは、関数パラメータを、目的コードからネイティブコードに変換するステップと、前記ネイティブ関数のプロトタイプに従う前記変換された関数パラメータを用いて、前記ネイティブ関数を呼び出すステップと、前記呼び出されたネイティブ関数の結果を、ネイティブコードから目的コードに変換するステップとを含む、1~5のいずれか一に記載の方法。7前記関数パラメータを変換するステップ及び前記ネイティブ関数呼び出すステップは、対象コードにおいて、対象命令セットに加えられるトランスレータ固有の命令によって記述される、2~6のいずれか一に記載の方法。8前記対象関数の特定及びその対応するネイティブ関数の特定が、結合点の記述を用いて行なわれる、1~7のいずれか一に記載の方法。9前記対象コードのトランスレーションの間に、前記結合点の記述から特定される前記対象関数に遭遇すると、前記目的コード内に、前記ネイティブ関数に対する呼び出しスタブを挿入するステップをさらに含む、8に記載の方法。10前記結合点の記述は、前記トランスレーションを行なうトランスレータ内に埋め込まれる、8又は9に記載の方法。11トランスレーション実行の開始時に、前記結合点の記述を、記憶された結合点の記述ファイルから読み取るステップをさらに含む、8~10のいずれか一に記載の方法。12前記結合点の記述は、対象コード内の位置及び対応するネイティブ関数を用いて行われる、8~11のいずれか一に記載の方法。13前記結合点の記述は、対象コード内の位置及び呼び出されるべきコードに対する参照を用いて行われる、8~12のいずれか一に記載の方法。14前記呼び出されるべきコードは目的コードである、13に記載の方法。15前記結合点の記述は、対象関数呼び出しの前、後、あるいはその代わりに目的コード内に挿入されるネイティブ関数呼び出しを用いて行われる、8~14のいずれか一に記載の方法。16前記コンピュータが、実行時シンボルパッチングを実行するステップをさらに含み、前記実行時シンボルパッチングを実行するステップが、前記対象プログラムのシンボルテーブル内で対象対ネイティブ関数マッピングをエンコードするステップと、前記対象プログラムの前記シンボルテーブル内のエントリを特別なネイティブ結合マーカと取り替えるステップと、前記特別なネイティブ結合マーカを、このマーカにトランスレーションの間に遭遇したときに、結合点の記述としてインタープリットして、呼び出すべき適切なネイティブ関数を特定するステップとを含む、8~15のいずれか一に記載の方法。17前記外部の呼び出しコマンドはトランスレータ固有のネイティブ結合命令であり、前記方法は、前記コンピュータが、前記対象コードのトランスレーションの間に、外部の呼び出しコマンドを特定する結合点の記述に遭遇したときに、トランスレーションのフローを変えて、前記外部の呼び出しコマンドを実行するステップを含む、8~16のいずれか一に記載の方法。18前記外部の呼び出しコマンドを実行するステップは、前記外部の呼び出しコマンドをインタープリットするステップと、前記外部の呼び出しコマンドの中間コードを生成するステップとであって、前記コマンドは、関数パラメータを目的コードからネイティブコードに変換し、ネイティブ関数のプロトタイプに従う前記変換された関数パラメータを用いて、ネイティブ関数を呼び出す、前記生成するステップとを含む、17に記載の方法。19前記外部の呼び出しコマンドを実行するステップは、前記外部の呼び出しコマンドをインタープリットするステップと、前記外部の呼び出しコマンドに対する目的コードを生成するステップであって、前記コマンドは、関数パラメータを目的コードからネイティブコードに変換し、ネイティブ関数のプロトタイプに従う前記変換された関数パラメータを用いて、ネイティブ関数を呼び出す、前記生成するステップとを含む、17に記載の方法。20前記コンピュータが、外部の呼び出しコマンドを対象コードに挿入するステップとであって、前記外部の呼び出しコマンドは、トランスレータ固有のネイティブ結合命令である、前記挿入するステップと、対象コードのトランスレーションの間に前記外部の呼び出しコマンドを検出するステップと、をさらに実行することを含む、1~19のいずれか一に記載の方法。21前記コンピュータが、対象コードのトランスレーションの間に前記外部の呼び出しコマンドに遭遇したときに、トランスレーションのフローを変えて前記外部の呼び出しコマンドを実行するステップをさらに含む、20に記載の方法。22前記外部の呼び出しコマンドを実行するステップは、前記外部の呼び出しコマンドをインタープリットするステップと、前記外部の呼び出しコマンドの中間コードを生成するステップとであって、前記コマンドは、関数パラメータを目的コードからネイティブコードに変換し、ネイティブ関数のプロトタイプに従う前記変換された関数パラメータを用いて、ネイティブ関数を呼び出す、前記生成するステップとを含む、21に記載の方法。23前記外部の呼び出しコマンドを実行するステップは、前記外部の呼び出しコマンドをインタープリットするステップと、前記外部の呼び出しコマンドに対する目的コードを生成するステップであって、前記コマンドは、関数パラメータを目的コードからネイティブコードに変換し、ネイティブ関数のプロトタイプに従う前記変換された関数パラメータを用いて、ネイティブ関数を呼び出す、前記生成するステップとを含む、21に記載の方法。24前記外部の呼び出しコマンドは、複数のサブコンポーネント命令を含む可変長命令である、20~23のいずれか一に記載の方法。25前記複数のサブコンポーネント命令はエスケープサブコンポーネント命令を含み、前記スキゾ呼び出しコマンドを検出するステップは、前記エスケープサブコンポーネント命令を検出するステップをさらに含む、24に記載の方法。26前記エスケープサブコンポーネント命令はさらに、外部の呼び出しコマンドのその他のサブコンポーネント命令によって表わされる前記外部の呼び出しコマンドの形式を特定する、25に記載の方法。27前記コンピュータが、ネイティブ結合実装スクリプト言語を構文解析してデコードするステップと、トランスレーションの間に、前記ネイティブ結合実装スクリプト言語で作られたネイティブ結合スクリプトをインタープリットするステップと、前記ネイティブ結合スクリプトの中間コードを生成して、関数パラメータを目的コードからネイティブコードに変換するステップとをさらに実行することを含む、1~27のいずれか一に記載の方法。28前記ネイティブ結合スクリプトの中間コードを、対象コードのブロックに対する中間コードフォレストに統合するステップと、前記中間コードフォレストに対する目的コードを生成するステップとをさらに含む、27に記載の方法。29前記コンピュータが、目的コードにおいて、すべての対象レジスタ値を目的コードからネイティブコードに変換するステップと、統一された呼び出しスタブインターフェースに従う前記変換された対象レジスタを用いて、ネイティブコード呼び出しスタブ関数を目的コードから呼び出すステップと、前記ネイティブコード呼び出しスタブ関数をインタープリットするステップと、ネイティブコード呼び出しスタブ関数結合スクリプトの中間コードを生成して、関数パラメータを目的コードからネイティブコードに変換するステップとをさらに実行することを含む、1~28のいずれか一に記載の方法。30前記コンピュータが、ネイティブコード呼び出しスタブ関数の中間コードを、対象コードのブロックに対する中間コードフォレストに統合するステップと、前記中間コードフォレストに対する目的コードを生成するステップとをさらに実行することを含む、19に記載の方法。31前記ネイティブ関数を実行するステップは、目的コードにおいて、すべての対象レジスタ値を目的コードからネイティブコードに変換するステップと、前記変換された対象レジスタを用いて、目的コードから、ネイティブコード呼び出しスタブ関数を呼び出すステップと、ネイティブ関数のプロトタイプに従う特定の対象レジスタ及び/又はパラメータスタックを用いて、ネイティブ関数をネイティブコード呼び出しスタブ関数から呼び出すステップとをさらに含む、1に記載の方法。32前記コンピュータが、ネイティブコード呼び出しスタブ関数実装スクリプト言語を構文解析するステップと、前記構文解析されたネイティブコード呼び出しスタブ関数をコンパイルして、ネイティブコード実行可能モジュールにするステップと、前記ネイティブコード実行可能モジュールを、トランスレーションを行なうための実行ファイルとリンクさせるステップとをさらに実行することを含む、1~31のいずれか一に記載の方法。33前記ネイティブコード実行可能モジュールは、目的コードにおいて、すべての対象レジスタ値を目的コードからネイティブコードに変換するステップと、前記変換された対象レジスタを用いて、ネイティブコード呼び出しスタブ関数を目的コードから呼び出すステップと、ネイティブ関数のプロトタイプに従う特定の対象レジスタ及び/又はパラメータスタックを用いて、ネイティブ関数を前記ネイティブコード呼び出しスタブ関数から呼び出すステップとに対して実行可能である、32に記載の方法。34前記対象関数及びその対応するネイティブ関数を特定するステップは、結合点の記述を用いて行なわれ、前記結合点の記述は、対象関数及びネイティブコード呼び出しスタブ関数を用いて行われる、32又は33に記載の方法。35前記コンピュータが、前記ネイティブコード実行可能モジュールのスクリプト言語中の前記ネイティブコード呼び出しスタブ関数のネイティブ関数の識別子をハードコードするステップを実行するステップをさらに含む、34に記載の方法。36前記ネイティブ関数を実行するステップは、目的コードにおいて、すべての対象レジスタ値を目的コードからネイティブコードに変換するステップと、前記変換された対象レジスタを用いて、目的コード呼び出しスタブ関数を目的コードから呼び出すステップと、ネイティブ関数のプロトタイプに従う特定の対象レジスタ及び/又はパラメータスタックを用いて、ネイティブ関数を目的コード呼び出しスタブ関数から呼び出すステップとをさらに含む、1に記載の方法。37前記コンピュータが、前記ネイティブ関数を実行するステップにおいて、中間コードを生成するステップと、前記生成された中間コードを、対象コードのブロックに対する中間コードフォレストに統合するステップと、前記中間コードフォレストに対する目的コードを生成するステップとをさらに実行することを含む、36に記載の方法。38前記実行されるべき対象関数は、システム呼び出し関数、又は、ライブラリ関数である、1~37のいずれか一に記載の方法。39コンピュータに1~38のいずれか一に記載の方法の各ステップを実行させるコンピュータプログラム。40コンピュータであって、目的プロセッサと、前記目的プロセッサによって1~38のいずれか一に記載の方法の各ステップが実行されるトランスレータコードを含むメモリとを備えている、前記コンピュータ。"