为什么C和C++的IDE工具支持落后于托管平台?

5
如果您使用过任何不错的Java或.NET IDE,您会发现它们提供了许多功能,在C/C ++ IDE中要么不存在,要么存在的形式非常有限。我想的功能包括:
- 代码完成 - 语法错误(无需编译即可进行编译错误检查) - 重构 - 调试(调试器可以向您显示有关对象的大量信息) - 代码探索和分析(查看类型层次结构、谁调用该函数等等)
那么,管理语言最主要的特性是什么,使得它们可以在工具方面提供(大多数人会说)更好的支持呢?

但是Visual Studio是一个.NET IDE并支持C ++,因此假设是错误的。即使免费的VC ++ Express Edition也可以执行您的大部分功能列表(不包括重构)。 - Clifford
1
由于我正在学习C语言,我对VS 2008中有限的编辑支持感到非常惊讶。它甚至不能自动关闭括号/大括号。 - Ree
我曾广泛使用过Visual C++、Visual C#(以及Java的Eclipse),我知道你的意思。C++的代码自动完成不可靠,源代码中的错误没有被突出显示,完全没有重构支持(甚至没有本地变量的重命名),等等。 - Thomas
6个回答

11

C++是一门极其难以解析的语言。对于那些成功处理它的解析器(编译器)来说,它们太慢了,而且不够灵活,无法支持IDE风格的代码支持。与编译器不同,在IDE中,解析器必须非常快速,并能够处理语法上不正确的代码。迄今为止,没有人花时间去做这件事,因为具备所需技能的人完全专注于实际的编译器。

Visual Studio 2010拥有一个经过重新设计的C++ IntelliSense引擎。他们花费了多年的时间完成它,但它已经得到了巨大的改善。


1
"Intellisense"是任何文本编辑器中最烦人的错误功能。当我试图编写代码时,它会在我的代码上弹出可恶的对话框。真正的程序员可以找到他们正在调用的函数的声明,并阅读文档。 - alex tingle
2
@alex:作为一名真正的(C++)程序员,我经常发现自己在尝试手动定位特定函数的声明时会咒骂不已。 - xtofl
就VS2010而言,他们为IDE引入了一个外部解析器。至于复杂性,包含文件、宏和模板对象也必须考虑在内。 - Harald Scheirich
2
@alex:你要么从未处理过拥有100万行代码的代码库,要么具有记住混乱组织的10000个源文件中每个东西位置的神奇能力。无论哪种情况都可以,但对我来说,我没有这样的神奇能力,所以IDE非常有用。 - Sam Harwell
grep是你的好朋友。如果你只是调用函数而不了解它们的更多信息,那么你只会让你的100万行程序变得更糟,而不是更好。 - alex tingle

5
像C和C++这样的编程语言,由于其语法比Java等语言更加复杂,因此进行代码补全和语法纠错更加困难。例如,预处理器使事情变得更加复杂。
重构更加困难,因为C/C++的弱类型系统使得很难确定重构是否会保留原始代码的含义。
调试更加困难,因为C/C++的弱类型系统意味着很难知道运行时值的“真实”类型是什么。

4

最近我嘲笑仍在使用vim的c/c++程序员,直到他们向我发起挑战:找到一个能够清晰处理大型项目中的条件编译并链接到正确的多次定义的条件编译方法实例的IDE。然而没有一个工具能够胜任这个任务。

寓意:保持你的设计简洁,vim就是你的IDE。


2
尽管解析C ++很困难,但我认为您的前提过于宽泛,并不一定是托管 vs. 非托管的问题。
例如,Visual Studio具有代码完成、编辑和继续(适用于32位版本)、语法检查(截至即将发布的2010版),广泛的调试功能以及本机C ++项目的代码探索功能。

1
如果你想要开源和跨平台的C/C++ IDE,NetBeans C/C++插件可能会提供你所需的大部分功能,如果不是全部。

-2

集成开发环境只是给那些不懂手艺的程序员提供的拐杖。找一个好的文本编辑器,学会阅读编译器错误信息。


2
来吧,那只是毫无意义的评论。每种工具都有其用途,如果你想坚持使用文本编辑器,那很好,但是许多集成开发环境(IDE)的功能可以将我们的手艺(是的,是手艺)从仅仅输入代码提升一步。 - Harald Scheirich
1
使用文本编辑器也可以...但我更愿意使用集成开发环境(IDE)- 这使我更加高效。 - Thomas Owens
如果你想用一个集成开发环境(IDE),那么我欢迎你这样做,但我保证它并不能让你成为一个更好(或更高效)的程序员。拿Intellisense举例——你认为它可以提高你的效率,因为它意味着你不必去查找函数声明或阅读文档。但我认为,从长远来看,阅读文档和了解函数声明会让你变得更加高效。 - alex tingle
2
为什么不使用汇编语言呢?C和C++只是那些不懂手艺的人的拐杖。 - Denis Tulskiy
1
有一次我和一个同事被雇佣为临时工来帮助一个传统的组织,我们进行了一次测量。经过三个月的时间,我们使用集成开发环境(IDE)的效率比那些使用vim和emacs的有十多年经验的员工提高了大约200%。 - MSalters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接