コンパイルされていないライブラリ


さて、さきほどは、ライブラリとはオブジェクトファイルのあつまり という言い方をしました。 C 言語の世界では、確かにそれは嘘ではないのですが、 本来ライブラリとは、皆が使うであろうプログラムをまとめておいておく、 という以上の意味ではありません。 C 言語の場合、ライブラリへのインタフェイスは関数呼出しであり、だから、 呼ばれるライブラリプログラムもコンパイルされた形で、リンクだけすればよいという状態になっています。

とはいえ、プログラミング言語の世界にも、別の形態をとるライブラリは存在します。 典型的な例は、マクロやテンプレートライブラリ(C++)です。 マクロやテンプレートの役割は、とってもとっても簡単に言うと、 プログラムソースをルールに従って別のプログラムソースに置き換えるというものです。 この場合のライブラリとは書き換え規則のライブラリという事になります。 C++ の STL (Standard Template Library) というのが有名な例です。

例えば、integer の list とか、double の list とか、struct tree の list とか、 データ型に応じた list を作りたいとします。 このため、STL では、型名のところだけ型変数のままにしたプログラムを書いておきます。 で、使う際は、list<int> などと型名を具体化してつかいます。 処理系内部では、対応したプログラムソースができあがって、 コンパイルされて、利用可能になるといった具合いです。 実体が見たいという人は、例えば cygwin だと、 "/usr/include/g++-3/stl_list.h" に実体があります。


2001.9.25/ Tomio KAMADA: kamada@cs.kobe-u.ac.jp