KDOC 549: 処理系とランタイムの違い

この文書のステータス

  • 作成
    • 2026-05-10 貴島
  • レビュー
    • 2026-05-10 貴島

概要

処理系とランタイムの意味は異なる(同じものだと考えていた)。いくつかのプログラミング言語での例をあげる。

JavaScript。

  • V8 は処理系
  • Node.js はランタイム
    • だがV8を内包しているから処理系の機能ももつ

Go。

  • Go コンパイラは処理系の一部
  • コンパイルされた Go バイナリはランタイムを含む
    • GCやgoroutineスケジューラがバイナリに埋め込まれる。だから依存なしで実行バイナリだけで実行できる

Java。

  • Java コンパイラは処理系の一部
  • JVM はランタイム
    • だから、コンパイルされたバイトコードにはスケジューラやGCは含まれていない

まとめる。

  • 処理系はソースコードを解釈・変換・実行…して動かすためのシステム全体である。各パーツはコンパイラ、リンカ、ランタイム…と分けられる
  • Goはランタイムをバイナリに同梱する。Javaは成果物にランタイムが含まれず、JVMがランタイムを担当する
  • ランタイムは実行時の責任(メモリ管理、並行処理管理…)を持つ。コンパイル後のバイナリ実行のランタイムが最小限でOSが直接実行する、コンパイラのみの処理系(C 言語など)もある

関連

  • 追加調査: これらの分類にあてはまらないプログラミング言語や処理系はあるか