没有创建用于C / C ++的工业级重构工具的问题是什么,我只需要一个“正常工作”的工具?
我所说的“工业级别”是由JetBrains产品(IntelliJ,ReSharper)或以上产品提供的质量。任何可用的解决方案(包括来自Tomato Software的Visual Assist或Eclipse CDT)都不够成熟。
以下是初创公司推动此类项目的优势。
唯一的缺点是技术挑战......但是看看谷歌,微软,英特尔等正在做什么,应该没有无法解决的技术问题。
没有人想赚钱?合谋;)?是什么原因?
答案 0 :(得分:16)
我们只考虑一个基本的重构:重命名功能
实施看起来很简单。查找所有引用,并替换使用的标识符。
虚拟功能变得有点复杂。现在有必要找到基本声明(和实现,如果不是抽象),并且引用可以是类层次结构中的任何派生实现。更难,但仍然可行,因为要重命名的功能组是明确定义的。
这就是适用于C#和Java等语言的复杂性。现在是踢球者:C ++模板是鸭子类型。类层次结构中的实现集不再是明确定义的,因为它可能包含具有相同名称和可能兼容参数的ANY函数。你确实记得Koenig查找,对吗?
尝试分离必须具有相同名称的函数列表,因为它们从相同的重载分辨率集开始,从那些真正独立的函数开始,将是绝对的噩梦。此时你不妨进行文本搜索和替换。
所以,让我们列出你的要求/愿望清单:
答案 1 :(得分:8)
This link讨论了一些细节和复杂性
答案 2 :(得分:6)
原因是C ++不能通过大多数常见的解析技术(LALR,LL等)进行解析,并且实际上需要一些非常繁重的解析才能正确解析。像clang和gcc-xml这样的工具使得其他工具可以在不实现自己的C ++解析器的情况下处理C ++,尽管两者都相当新,即使使用这些解析工具,处理C ++仍然很复杂。我认为该行业最终将看到所有与Java相关的好东西移植/适应C ++ ...问题是什么时候。
答案 3 :(得分:4)
问题是C ++难以解析(它的语法不是上下文),并且在没有实际编译源的情况下很难理解。 Java工具可以工作,因为语言更简单,包括语法和语义。