概要
コンピュータ科学において「ランタイム」は、プログラムが実行されている期間と、その実行を支えるソフトウェア部品群を指します。語の意味は文脈によって異なり、プログラム開始から終了までの経過時間、実行中にサービスを提供するランタイム環境、あるいは言語機能を実装するランタイムシステム(ライブラリや仮想機械を含む)を意味することがあります。曖昧さを避けるために、ランタイム期間、ランタイム環境、ランタイムライブラリといったより正確な表現が使われることもあります。技術資料では、ランタイムの概念をより広く扱う場合もあります。
主要な構成要素と処理
ランタイムシステムは、通常、コンパイル時ではなく実行時に必要となる一連の作業を担当します。代表的な処理には次のようなものがあります。
- プログラムのコードとデータをメモリに読み込む。
- ライブラリやモジュールへの参照をリンクし、解決する。これは読み込み時に行われることもあれば、動的に行われることもある。
- 割り当て、解放、ガベージコレクションなどのメモリ管理を行う。
- 実行中に行われる変換や最適化。たとえばジャストインタイム(JIT)コンパイルや動的最適化がある。
- プラットフォームのサービスや抽象化を提供し、プログラムがデバイスやオペレーティングシステムとやり取りできるようにする。
これらの責務は、コンパイル済みプログラムに結び付けられたランタイムライブラリ、インタープリタ、あるいは仮想機械によって実装されます。たとえば、ある言語実装では、基礎的なルーチンや下位のシステムへのインターフェースを提供するランタイムライブラリを同梱します。
歴史と発展
コンパイル時とランタイムの区別は、初期のコンパイル言語の時代から存在していました。例外、動的型付け、リフレクションといった言語機能が増えるにつれて、ランタイムシステムに求められる役割も大きくなりました。管理対象言語やバイトコード形式の普及により、移植性の高い実行環境を提供する仮想機械が広く使われるようになりました。時がたつにつれて、JIT コンパイル、適応的最適化、高度なガベージコレクタなどの技術が、静的なコンパイルと実行時の振る舞いの境界をあいまいにしました。仮想機械や言語ランタイムについての議論は、多くの言語実装で使われる仮想機械の概念を例に説明されることがよくあります。
用途・例・重要性
ランタイム環境は現代のソフトウェアにとって中心的な存在です。典型例は Java プラットフォームで、バイトコードにコンパイルされたプログラムは、クラスの読み込み、メモリ管理、標準サービスの提供を行う Java ランタイムに依存します。その文脈では、開発者は Java アプリケーションを実行する層としてJava Runtime Environmentを参照します。ほかにも、管理対象言語向けの言語固有ランタイム、コンパイラに付属するプラットフォーム固有のランタイムライブラリ、オペレーティングシステムに組み込まれたシステムランタイムがあります。オペレーティングシステム自体も、ハードウェアやシステム資源へのアクセスを仲介する一般的なランタイム環境をプロセスに提供します。
区別と注目点
関連する用語は分けて考えると理解しやすくなります。ランタイム期間は実行に要した経過時間を表し、ランタイムライブラリはプログラムにリンクされるルーチンの集合です。ランタイム環境は、プログラム実行中に利用できるソフトウェア状態とサービスを指し、ランタイムシステムや仮想機械は実行時に言語の意味を実装します。ランタイムエラーは、プログラムの実行中に発生するエラーであり、より早い段階で検出されるコンパイル時エラーとは対照的です。ランタイムに関する話題には、コードの実行中に動作する性能測定、プロファイリング、デバッグの各ツールも含まれます。特定のランタイム موضوعをさらに調べる場合は、ランタイムライブラリに関する参照、ランタイム環境の説明、そしてプログラム実行の入門資料などが役立ちます。
ランタイムの振る舞いを理解することは、性能問題の診断、資源管理の正確性確保、安全性・移植性・効率のバランスを取る言語機能の設計に欠かせません。