ランタイムライブラリとは、ホストプラットフォームに合わせて調整された、コンピュータプログラムが利用できるランタイム環境へのアクセスを提供するライブラリです。ランタイム環境は、特定のプログラミング言語などの開発環境に必要な実行モデルを実装します。[ 1 ]ランタイムライブラリは、メモリ管理や例外処理などの基本的なプログラム機能を提供する場合があります。[ 2 ]
ランタイムライブラリは、プログラムの構築に使用されるツールチェーンの設計上の成果物であり、ホストオペレーティングシステムやプログラムの記述言語に本来的に必要なものではありません。ツールセットは、ホストプラットフォームの様々な側面を抽象化するように設計されており、多くの場合、ツール開発を簡素化することを目的としています。ツールチェーンは、プログラムの実行時にランタイムライブラリに依存し、それを使用するようにプログラムを構築します。
ランタイムライブラリは、ランタイム動作を直接実装する場合もありますが、多くの場合、オペレーティングシステムの機能の上に薄いラッパーとして構築されています。例えば、ランタイムでのみ実行可能な(あるいは、ランタイムで実行した方が効率的または正確な)言語機能は、ランタイム環境で実装され、ランタイムライブラリのAPIを介して呼び出すことができます。これには、論理エラー、配列の境界チェック、動的型チェック、例外処理、そしてデバッグ機能などが含まれます。そのため、高度なコンパイル時チェックや開発中のテストが行われているにもかかわらず、実際のデータを用いた「ライブ」環境でプログラムをテストするまで、一部のプログラミングバグは発見されないことがあります。
別の例として、ランタイムライブラリには、コンパイル時にインライン化するには複雑すぎる組み込みの低レベル操作のコードが含まれている場合があります。たとえば、ターゲットCPUで直接サポートされていない算術演算の実装や、さまざまなコンパイラ固有の操作やディレクティブなどです。[ 2 ] [ 3 ]
ランタイムライブラリは、言語で定義された機能を実装する言語標準ライブラリと混同されることが多い。標準ライブラリはプラットフォーム固有の方法で実装することも、ランタイムライブラリを利用してプラットフォームに依存しないようにすることもできる。たとえば、 C 標準ライブラリは比較的大きいが、プラットフォーム固有のランタイムライブラリ (一般的に と呼ばれるcrt0) は比較的小さいため、複数のプラットフォームのサポートが容易になる。[ 1 ]