Skip to content
Latchkey

インタプリタとは? コードを1行ずつ実行する

インタプリタは、ソースコードを読み、別個の実行可能ファイルを先に生成せずに、文ごとに直接実行するプログラムです。

Python、Ruby、そして (古典的には) JavaScriptのような言語は、インタプリタによって実行されます。プログラム全体を前もって翻訳する代わりに、インタプリタは実行時にコードをたどり、遭遇するたびに各命令を実行します。これは高速な反復と容易なデバッグをもたらしますが、生の実行速度は多少犠牲になります。

インタプリタがコードを実行する方法

現代のインタプリタは通常、ソースを内部表現 (多くの場合bytecode) にparseし、その表現をループで実行します。別個の事前buildがないため、1行変えてすぐに再実行できます。

インタプリタ vs コンパイラ

コンパイラは実行前にすべてを翻訳しartifactを生成します。インタプリタは進みながら翻訳し実行します。多くの実在の言語は両方を混ぜています。Pythonはbytecodeにコンパイルしてからそれを解釈し、JavaScriptエンジンはまず解釈し、ホットなパスをjust in timeでコンパイルします。

インタプリテーションのトレードオフ

  • 開発中はより速い起動と、より素早い編集実行ループ。
  • エラーは、問題のある行が実際に走ったときにしか現れないことが多い。
  • 重い計算では一般にコンパイル済みコードより遅い。
  • 同じソースがインタプリタのある場所ならどこでも走るため、移植性が高い。

なぜ1行ずつのモデルが重要か

インタプリタは不正な行に到達したときにしか失敗しないため、めったに使われないbranchの奥にある構文エラーは、そのbranchが走るまで隠れることがあります。これこそ、インタプリタ言語でテストとlintingが非常に重要な理由です。

簡単な例

python app.py を実行すると、ファイルがPythonインタプリタに渡され、上から下へ実行されます。200行目のタイプミスは、linterやtype checkerが先に捕捉しない限り、実行が200行目に到達するまで報告されません。

CIにおけるインタプリタ

インタプリタ言語では、ほとんどのエラーが現れるのがテスト実行のときなので、buildがそのままテスト実行であることが多いです。flakyな環境セットアップや一時的なパッケージ取得は、あなたのコードのせいでなくこれらの実行を壊すことがあります。マネージドrunner (Latchkey) はそうした一時的な失敗を自動でリトライするため、依存関係インストール中のネットワークの不調でpipelineが失敗することがありません。

重要なポイント

  • インタプリタは、先にartifactを構築するのではなく、実行時にソースを直接実行します。
  • 多くの言語は、内部でインタプリテーションとコンパイルを混在させています。
  • エラーは実際にその行が走ったときにしか現れないことが多いため、テストとlintingが不可欠です。

関連ガイド