「ランタイムライブラリ」の版間の差分

削除された内容 追加された内容
m ボット: 言語間リンク 2 件をウィキデータ上の d:q1444922 に転記
編集の要約なし
1行目:
'''ランタイムライブラリ'''({{lang-en-short|run-time library}})は、[[標準Cライブラリ]]など、[[プログラム (コピュータ)|コンピュータプロ言語ラム]]の処理系実行時(ランタイム)より暗黙メインプログラムと同時取り込ま存在して利用される前提の[[ライブラリ]]である。詳細は環境(OSや言語や処理系)に依存する。
 
まず[[C言語]]でのプログラミングの場合を例に説明すると、標準Cライブラリだけではなく、典型的な名前は <code>crt0</code> であるが(詳細は [[:en:Crt0]])、「スタートアップルーチン」を含んだモジュールが絶対に必要である。スタートアップルーチンには[[実行ファイル]]においてエントリポイントとなる部分に始まり、メインプログラムにある <code>main</code> 関数を呼ぶまでのコードが含まれている。
 [[ライブラリ]]ファイルに格納されている[[サブルーチン|ルーチン]]を使用するには、通常、[[リンケージエディタ]]や[[インタプリタ]]といった処理系に対し、プログラマがその[[サブルーチン|ルーチン]]が格納された[[ライブラリファイル]]を明示的に指定してやる必要が有る。しかし、一般的なプログラミング言語はそのような作業なしで呼び出す事のできる[[サブルーチン|ルーチン]]が存在する。これはその[[サブルーチン|ルーチン]]が処理系により自動で取り込まれるランタイムライブラリに格納されているからである。
 
他には、Cコンパイラがコード生成の際に暗黙のうちに呼出して利用するルーチンが入ったライブラリ(GCCの場合、<code>libgcc</code>)などがある。
 ランタイムライブラリは、他のライブラリとは異なり処理系機能の一部という側面が有る。処理系のオプションによりランタイムライブラリ無しで[[プログラム]]を作成できる場合があるが、ランタイムライブラリに依存していた言語機能は使用できなくなる。例えばC++では例外処理や、new、delete、コンストラクタ付きのstatic変数といった機能をランタイムライブラリ無しで使用できない。ランタイムライブラリの関数が見つからないためリンクエラーが発生する。C/C++のmain関数は大抵、ランタイムライブラリによって呼ばれている。これはmain関数実行の前後で[[グローバル変数]]の初期化と片付け、main関数に引き渡す引数の準備等を行うためである。これをスタートアップコードというが、ランタイムライブラリを外している場合は、自前でこのスタートアップコードを作成する必要が有る。このため言語仕様通りに全ての言語機能を使うにはランタイムライブラリが必須となる。
 
これらのライブラリは、もし仮にプログラマが、[[リンケージエディタ]](リンカ)を素の状態でコマンド実行するのであれば、その引数に <code>ld /usr/lib/crt1.o myprog.o -lgcc -lc</code> のようにして明示的に指定しなければならないが、通常は処理系実装のデフォルトのいわゆるコンパイラドライバ(Unixでの伝統的な名前は cc )により、このようなコマンドの組立ては暗黙裡に行われるため通常のプログラミングではプログラマは気にしなくてよい。外形的には、数学ライブラリを指定する <code>-lm</code> のように明示的に指定するのではなく、そのように暗黙裡にリンクされるライブラリがランタイムライブラリである、と言える。
 
言語仕様がリッチであるほど、その言語によるプログラムにおいて言語機能をサポートするために、ランタイムライブラリは大きくなる。たとえば、C++では例外処理や、new、delete、コンストラクタ付きのstatic変数といった機能が提供される。他の言語でもっと大きなものの例としては[[ガベージコレクション]]の機能などがある。また、以上からあきらかなように、処理系を他の環境に移植する場合や、クロスコンパイルなどでは、作業者は[[ランタイムライブラリ]]についても面倒を見なければならない。
 
必然的にリンクされるものであり、インタフェース的にも密結合であることから、([[動的リンク]]がサポートされている環境でも)[[静的リンク]]されることも多い。同様に、[[ダイナミックリンクライブラリ]]で提供されていて動的リンクする場合でも、デマンドローディングではなく、プロセスの起動時にロード・リンクされることもある。
 
== 外部リンク ==