プログラミング言語特性 — コンパイラ/インタプリタ/JIT/GC

言語処理系3方式 (コンパイラ・インタプリタ・JIT)、ガーベジコレクション、コンパイラ4フェーズを整理。

プログラミング言語の処理方式は AP科目Aで必出。コンパイラ・インタプリタ・JIT の違いとガーベジコレクションを押さえます。

鳴海 理央(普段) 鳴海 理央

言語処理系の3方式: ① コンパイラ (実行前に機械語に翻訳) — C/C++/Rust/Go、② インタプリタ (実行時に逐次解釈) — Python/Ruby/JS、③ JIT コンパイラ (実行時にコンパイル+キャッシュ) — Java/JVM・C#/.NET・Node.js (V8)。

砂原 ニコ(普段) 砂原 ニコ

ガーベジコレクション (GC) って何?

緒方 ナオミ 先生(笑顔) 緒方 ナオミ 先生

ガーベジコレクション は不要メモリを自動回収する仕組み。
Java・C#・Python・Go 等で標準。
代表アルゴリズム: マークアンドスイープ・参照カウント・世代別 GC・コピー GC。

藤咲 まりあ(普段) 藤咲 まりあ

C/C++ には GC が無いんですかぁ?

鳴海 理央(普段) 鳴海 理央

標準では無く、malloc/free や new/delete で手動管理ですね。
Rust は所有権 (ownership) システムで GC なしに安全性を保証する、という新しいアプローチを取っています。

緒方 ナオミ 先生(普段) 緒方 ナオミ 先生

AP では『コンパイラ言語と動的言語の比較』『JIT の利点』『GC の世代別アルゴリズム』あたりが頻出ね。
Java の HotSpot JIT は新生代 (Eden + Survivor) と老世代を使い分けていて、若いオブジェクトほど早く死にやすい、という性質を活用しているのよ。

砂原 ニコ(普段) 砂原 ニコ

コンパイラの構文解析って、どんな感じ?

鳴海 理央(普段) 鳴海 理央

コンパイラの 4フェーズは、字句解析 (トークン化) → 構文解析 (構文木 構築) → 意味解析 (型チェック等) → コード生成、という流れですね。
BNF で構文を定義して、ASTからコードを生成する、というのが古典的な構造です。

確認クイズ

JIT (Just-In-Time) コンパイラの主な利点として、最も適切なものはどれか。

  1. 実行前にすべて機械語化するため起動が速い
  2. 実行時にコンパイル結果をキャッシュし、ホットコードを動的に最適化できる
  3. GCを完全に不要にできる
  4. メモリ使用量を最小化できる
こたえを見る

正解: 2. 実行時にコンパイル結果をキャッシュし、ホットコードを動的に最適化できる

JIT は『実行時に頻繁に使われるコード (ホットコード) をコンパイルしキャッシュ』することで、インタプリタの柔軟性 + コンパイラの実行速度を両立。Java HotSpot・V8・.NET CLR の中核技術です。

🔖 この記事の関連書籍

Amazonアソシエイトリンクを含みます。他分野は おすすめ書籍ページ へ。