C- リファクタリング
2003 年 10 月 18 日
リファクタリングツールはこれまでに数多くの言語向けに開発されています。Smalltalk が先鞭をつけた後、Java 用のツールが 2、3 種類、C# 用のツールも 2、3 種類登場しました。目立った欠席が目立つのが、要望 が出ているにもかかわらず存在しない C++ です。リファクタリングの最初の論文を執筆したのは背景が C++ にある ビル・オプダイク であるという事実にもかかわらず、このような状況が続いています。
この背後には C++ 言語の単なる複雑さに加えて他にもいくつかの理由があります。しかし、そうした困難は決意を長続きさせることはできません。ラルフ・ジョンソン は、UIUC でリファクタリングの優れた伝統を引き継ごうと決意しました。C++ はとても難解なので、C から始めるのは賢明です。C は C++ よりも複雑性が低く、リファクタリングの対象となる C プログラムには事欠きません。さらに、C はプリプロセッサなど C++ の深刻な課題のいくつかを共有しています。
最近 JAOO でラルフに会って、C リファクタリング の課題に取り組んできたアレハンドラ・ガリドの研究について話を聞きました。彼の説明は、C のプリプロセッサ、特に条件コンパイルとマクロに対処することの難しさに終始していました。正確なリファクタリングはプログラムの抽象構文木 (AST) に対して行われるというのが本質的な問題なのですが、マクロがプログラムテキストを AST から遠ざけてしまいます。その結果、C リファクタリングツールは、コンパイルされた AST のバリエーションを保持するマクロを認識した AST を構築する必要があります。厄介な作業ではありますが、アレハンドラは特定の成功を収めており、その中には研究ツールのテストの一環として Linux カーネルのソースを読み込む作業も含まれています。
まだ世界中のプログラマーが C リファクタリングツールを使用して自分の C コードをリファクタリングするには時期尚早ですが、興味のある方は C リファクタリングのウェブサイト をざっとご覧いただきたいと思います。アレハンドラとラルフによるいくつかの論文が掲載されており、この作業の詳細を知るためのメーリングリストへの参加方法が記載されています。