|
===================================== 〔語彙分解〕的な部分一致の検索結果は以下の通りです。 ・ ー : [ちょうおん] (n) long vowel mark (usually only used in katakana)
スレッデッドコード(英: )は、プログラミング言語処理系におけるコード生成手法のひとつで、呼出すべきサブルーチンのアドレスを羅列する、というものである。「内部インタプリタ」と呼ばれる極小のインタプリタで順次呼出したり、サブルーチン・スレッディング方式と言われるコンパイル手法の場合は機械語のサブルーチンコール命令の羅列になっているので、先頭にジャンプ(ないし呼出し)してそのまま実行する。 スレッデッドコードは、他のコード生成技法や他の呼出規約よりもコード密度が高いが、若干実行速度が遅くなる(通常、1命令多くなる)。しかし、プログラムが小さくなるのでCPUのキャッシュに完全に収まる可能性が高くなり、キャッシュミスが起きにくくなって性能が向上する可能性が高い〔Speed of various interpreter dispatch techniques V2 〕。 スレッデッドコードは、Forth、多くのBASICの実装、一部のCOBOLの実装、初期のB言語、小型ミニコンピュータ向けなどのプログラミング言語での実装技法としてよく知られている。'')は、プログラミング言語処理系におけるコード生成手法のひとつで、呼出すべきサブルーチンのアドレスを羅列する、というものである。「内部インタプリタ」と呼ばれる極小のインタプリタで順次呼出したり、サブルーチン・スレッディング方式と言われるコンパイル手法の場合は機械語のサブルーチンコール命令の羅列になっているので、先頭にジャンプ(ないし呼出し)してそのまま実行する。 スレッデッドコードは、他のコード生成技法や他の呼出規約よりもコード密度が高いが、若干実行速度が遅くなる(通常、1命令多くなる)。しかし、プログラムが小さくなるのでCPUのキャッシュに完全に収まる可能性が高くなり、キャッシュミスが起きにくくなって性能が向上する可能性が高い〔Speed of various interpreter dispatch techniques V2 〕。 スレッデッドコードは、Forth、多くのBASICの実装、一部のCOBOLの実装、初期のB言語、小型ミニコンピュータ向けなどのプログラミング言語での実装技法としてよく知られている。 == 背景と基本 == 一般にコンピュータプログラムは何らかの記号言語で書かれ、コンパイラを使って機械語に変換することで実行可能となる。機械語の実行コードは高速に実行できるが、特定のコンピュータアーキテクチャにのみ対応しているので、他のプラットフォームでは実行できない。それとは異なる手法として、仮想機械の命令セットを使う技法がある。この場合は、特定のハードウェアを対象としない。各プラットフォーム上のインタプリタが仮想機械向けの実行コードを解釈実行する。 初期のコンピュータのメモリ容量は今よりもずっと小さかった。例えば、、IBM 1130、多くの初代 Apple II は4KワードのRAMしか搭載していなかった。結果として、プログラムをどうやって小さくまとめ、利用可能なメモリ容量内に収めるかに多くのプログラマが頭を悩ませることになった。また処理速度も今より遅く、単純なインタプリタでは機械語とは比べものにならないほど遅くなってしまう。 プログラム内のそれぞれ必要とする箇所で演算ステップをいちいち書くのではなく、プログラマはそのような演算ステップを一度だけ書いて("Don't repeat yourself" を参照)、サブルーチン内に置くことでメモリを節約する。 これはコードリファクタリングとして今でも行われている技法だが、理由は異なる。この技法を徹底して適用すると、プログラムのトップレベルはサブルーチンコールの羅列だけになる。また、そこから呼び出すサブルーチンの多くも、より低いレベルのサブルーチンを呼び出しているだけとなる。 メインフレームや などの初期のマイクロプロセッサは、サブルーチンを呼び出すのに数命令を必要とする。アプリケーションのトップレベルや多くのサブルーチンでは、その命令シーケンスを常に繰り返し、呼び出すサブルーチンのアドレスだけが毎回異なることになる。そういった同じ命令列を繰り返し格納するのは、メモリの無駄である。 さらにメモリを節約するには、サブルーチンコールの羅列を呼び出すべきサブルーチンのアドレスのリストへと変換し、そのリストを参照して次々にサブルーチンを呼び出す小さな「インタプリタ」を書けばよい。 これは、ジャンプテーブルやや仮想関数テーブルと呼ばれるテーブルにジャンプ先アドレスだけを格納しておき、小さなセレクタでジャンプ先を選択してプログラムの流れを制御する技法と同じである。スレッデッドコードやこれらの技法では、プログラムは実際に実行すべきコードへのエントリポイントのリストとなる。 長年、プログラマ達はこのような「インタプリタ」や「小さなセレクタ」の様々なバリエーションを生み出してきた。アドレスリスト内の特定のアドレスは、インデックスまたは汎用レジスタまたはポインタを使って取り出される。そのアドレス群は、直接または間接であり、連続または不連続(ポインタで連結されている)であり、相対または絶対であり、コンパイル時に解決されるか動的に構築される。どの方式が最善というわけではない。 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「スレッデッドコード」の詳細全文を読む スポンサード リンク
|