研究(用ソフトウェア)紹介: CIL

MinCaml日経ITpro連載のためか、いろいろなところで「関数型言語の研究者」「OCamlの人」と言われて、それはそれで非常に光栄なのですが、僕やK・S研究室は別に「関数型言語OCamlの研究」をしているわけではありません*1。むしろ、並行言語や命令型言語など、関数型言語以外の話のほうが多いです。たとえば、わかりやすそうなところでは「Fail-Safe CJavaに変換」あるいは「Linuxカーネルソースコード検証」なんてプロジェクトもやっています。

で、一般にC言語のプログラムをコンパイル/変換/解析/最適化等したかったら、まずはparseしないといけないわけですが、これが意外と面倒です。しかも、本来の研究(コンパイル/変換/解析/最適化等)とはあまり関係のない苦労が必要とされます。それはそれで勉強になるのですが、そんな物理的・精神的:-)余裕がない場合は、CCuredの作者であるGeorge Neculaらの開発した、CIL (C Intermediate Language)が便利です。これは、Cのソースコードをparseして、比較的簡単な中間言語に変換するOCamlのライブラリです。ついでに、ある程度のフロー解析などを支援する機能もついています。細かい使い方はCILのサイトを見てもらうほうが速いと思いますが、たとえば「ある変数がポインタをとられるか」「ポインタとポインタがエイリアスするか」などの簡単な解析も標準で提供されています。CILのおかげで、卒論生(学部4年生)でもFail-Safe C to Javaのプロトタイプをかなりさくっと実装できました。感謝。

*1:そもそも「…型言語」という言い方が、あまり好きではありません(「…型プログラミング」なら、まだ良いのですが)。たとえばObjective Camlも、かなり以前に公式サイトのトップから「Camlは関数型言語」という記述が削除されましたし。