|
So far refactoring tools
have appeared for a number of languages. After Smalltalk's lead, we've
seen several tools for Java and a couple for C#. One language
conspicuous by its absence is C++, despite appeals.
All this despite the fact that the first refactoring thesis was done
by Bill Opdyke, who's
background is in C++. There are several reasons for this, including the sheer
complexity of the C++ language. Such difficulties don't stop the
determined for long, however, and Ralph Johnson has
been determined to continue the good tradition of refactoring work at
UIUC. Since C++ is so tricky, there's a lot to be said with starting
with C. C avoids some of the complexity of C++, and there's no
shortage of refactorable C programs out there. In addition C shares
several of C++'s serious challenges, such as the pre-processor. I caught up with Ralph at JAOO
recently and he filled me in on the research of Alejandra Garrido who
has taken up the challenge of the C
Refactory. His description was dominated by the difficulties of
dealing with the C pre-processor, particular conditional compilation
and macros. The essential problem is that accurate refactoring
operates on the abstract syntax tree (AST) of the program, but macros
distance the program text from the AST. As a result a C refactoring
tool needs to build a macro-aware AST which holds within it the
variants of the AST that would be compiled. It's hairy work but
Alejandra has had some success, including reading in source to the
Linux kernel as part of the testing for the research tool. It's still too early to have programmers all over the world using
tools to refactor their C, but those of you that are interested might
enjoy a dip into the C Refactory
website. It contains a bunch of papers by Alejandra and Ralph, and
describes how to get on a mailing list to find out more about this
this work.
|