プログラミング言語の処理方式は 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) コンパイラの主な利点として、最も適切なものはどれか。
- 実行前にすべて機械語化するため起動が速い
- 実行時にコンパイル結果をキャッシュし、ホットコードを動的に最適化できる
- GCを完全に不要にできる
- メモリ使用量を最小化できる
こたえを見る
正解: 2. 実行時にコンパイル結果をキャッシュし、ホットコードを動的に最適化できる
JIT は『実行時に頻繁に使われるコード (ホットコード) をコンパイルしキャッシュ』することで、インタプリタの柔軟性 + コンパイラの実行速度を両立。Java HotSpot・V8・.NET CLR の中核技術です。