本文へ移動

インタプリタ(コンピューティング):定義、設計、歴史、用途

インタプリタは、プログラミング言語で書かれたプログラムを、命令を直接または中間形式を通じて読み取り実行するソフトウェアです。事前コンパイルとは対照的な方式です。

概要

インタプリタとは、ソースコードまたは中間表現を読み取り、実行前にプログラム全体を機械語へ翻訳するのではなく、そこに記述された処理を直接実行するプログラムである。インタプリタはコンピュータ科学における一般的な実行モデルであり、対話性、移植性、動的な振る舞いを重視する言語で広く用いられている。迅速な開発サイクル、対話型の読み取り・評価・表示ループ(REPL)、より容易なデバッグを可能にする場合が多い。

画像ギャラリー

1 画像

主要な構成要素と動作

典型的なインタプリタには、テキストを字句解析および構文解析し、抽象構文木などの構造化表現へ変換するフロントエンドと、その構造を走査して処理を実行する評価コンポーネントが含まれる。多くの実装には、メモリ管理、組み込みライブラリ、型の処理を提供するランタイムシステムも含まれる。ソースの木構造を直接処理するもの(木構造走査型インタプリタ)もあれば、中間バイトコードへ変換し、それを仮想マシンが実行するものもある。

一般的な種類

  • 木構造走査型インタプリタ:プログラムの構造を直接解析・評価する。より単純である一方、しばしば低速となる。
  • バイトコード・インタプリタ/仮想マシン:ソースをコンパクトなバイトコードにコンパイルし、仮想マシン上で実行することで、速度と移植性を向上させる。仮想マシンの方式も参照。
  • JITを備えたハイブリッドシステム:解釈実行と、頻繁に実行される箇所を対象としたネイティブコードへのジャストインタイム(JIT)コンパイルを組み合わせ、事前コンパイルされたプログラムとの差を縮める。

歴史と発展

インタプリタは、初期のコンピューティング環境において、教育やスクリプト処理の中心的な役割を担った。初期の高級言語やコマンドプロセッサは、即時実行と対話的利用を重視していた。時代とともにインタプリタの設計はバイトコード形式や高度なランタイム最適化を取り入れて発展し、一部のシステムではプログラムの一部を動的にコンパイルすることで、解釈とコンパイルの境界が曖昧になっている。

用途、例、重要性

インタプリタは、スクリプト言語、試作、自動化、設定、教育用ツールで一般的に利用される。よく知られた例には、PythonやRuby向けの実装、多数のJavaScriptエンジンがある。一部のプラットフォームでは、中間形式へのコンパイル工程を組み合わせた後、その形式を解釈実行またはJITコンパイルする。たとえば、言語が最初にバイトコードや別のプログラミング言語へコンパイルされることがある。移植性が高いため、アプリケーションへの組み込みやサンドボックス化された実行にも適している。

相違点と注目すべき事項

主な対照となるのは、実行前にソースを機械語へ変換する事前コンパイルである。インタプリタは実行速度そのものと引き換えに柔軟性を得る。すなわち、デバッグを簡素化し、ビルドの手順を減らし、動的言語の機能を支える。性能が重要な場合、開発時には解釈実行し、その後に重要なコンポーネントをコンパイルする、あるいはJITで実行時の速度を高めるなど、混合戦略が採用されることが多い。言語実装と実行モデルに関する技術的背景については、インタプリタの概念に関する資料を参照されたい。

関連項目

著者

AlegsaOnline.com インタプリタ(コンピューティング):定義、設計、歴史、用途

URL: https://ja.alegsaonline.com/art/47738

共有