C 重构
2003 年 10 月 18 日
到目前为止,已经出现了针对多种语言的 重构工具。在 Smalltalk 的带领下,我们看到了针对 Java 的几种工具,以及针对 C# 的几个工具。C++ 是一种显而易见的缺席语言,尽管 有呼吁。所有这些都是尽管第一个重构论文是由 比尔·奥普迪克 完成的,他的背景是 C++。
造成这种情况的原因有很多,包括 C++ 语言的复杂性。然而,这些困难并不能阻止有决心的人,拉尔夫·约翰逊 一直致力于在 UIUC 延续重构工作的良好传统。由于 C++ 非常棘手,因此从 C 开始有很多话要说。C 避免了 C++ 的一些复杂性,而且 C 程序中不乏可重构的程序。此外,C 与 C++ 共享一些严重的挑战,例如预处理器。
我最近在 JAOO 上遇到了拉尔夫,他向我介绍了亚历杭德拉·加里多的研究,她接受了 C Refactory 的挑战。他的描述主要集中在处理 C 预处理器的困难,特别是条件编译和宏。本质上的问题是,准确的重构是在程序的抽象语法树 (AST) 上进行的,但宏使程序文本与 AST 产生了距离。因此,C 重构工具需要构建一个宏感知的 AST,它包含将被编译的 AST 的变体。这是一项艰巨的工作,但亚历杭德拉取得了一些成功,包括在研究工具的测试过程中读取 Linux 内核的源代码。
现在让全世界的程序员都使用工具来重构他们的 C 代码还为时过早,但那些感兴趣的程序员可能会喜欢深入了解 C Refactory 网站。它包含亚历杭德拉和拉尔夫的许多论文,并描述了如何加入邮件列表以了解更多关于这项工作的信息。