甚至大多数喜欢C++的人也承认它有很多与其作为系统/性能编程语言的利基无关的瑕疵.这些包括其过时的模块管理系统(头文件),前向声明的要求,使其语法不可判定的语法怪癖(例如<>模板声明的尖括号),包含在文本级而不是真实语言中操作的宏解决宏所用的功能,复制功能,如数组和字符串(这些类型的STL和C版本),几乎没有语法糖,以及缺乏现代功能,如线程,垃圾收集,委托/闭包,等等(注意:是的,在内存受限或实时环境中,你可能有充分的理由不想收集垃圾,
另一方面,C++是唯一允许您有效地编写代码并接近金属的主流语言,但也至少提供了一些高级抽象.它是成熟的,标准化的,拥有大量的编译器实现和库以及大量的遗留代码库.
对于那些使用C++作为主要语言的人来说,是什么让你个人认为它的疣值得忍受?如何让你改变主意并决定使用较少的这类疣的新语言?你是否真的喜欢使用C++ ,还是因为传统问题或者因为没有其他成熟的主流语言而勉强使用C++ ?
你的部分问题有一个错误的假设.你假设我们有语言选择.在我使用C++工作的所有项目中,没有真正的选择.这个项目早在我加入公司之前就存在并且是用C++编写的.他们背后有多年的历史和相应数量的代码.
我认为这是人们在说"C++会死"或"为什么人们仍然使用C++?"时犯下的最大错误.我绝对同意,除了系统级程序之外,你不会看到许多/任何以C++开头的新项目.恕我直言,它没有多大意义.不一定是因为语言中存在固有的缺陷,但是找到擅长编写C++的人越来越难.
人们经常忘记考虑的是今天运行我们世界的数百万(数十亿?)C++系列.切换到另一种语言是非常昂贵的,不能一时兴起.将时间和精力用于重写该大小的应用程序需要花费巨大的理由.这就是C++不会死的原因.至少在短期内.
给我一个编程语言:
是标准化的,不是由一家公司驱动的
并不局限于一个平台(不仅在理论上)
编译为本机代码
给了我与C++相同的效率
提供了一个经过深思熟虑的标准库
对于各种重要平台至少有一个成熟的实现
......我可能会考虑转换;-)
我使用C++(近25年来已经这样做了),因为它是最好的系统编程语言.我会说我不承认你描述的任何所谓的"疣" - 这些都是功能!
对于非系统编程,我使用其他语言,如PHP,Delphi,bash脚本,awk,perl和Smalltalk.一种尺寸并不适合所有人,除非你当然是某种语言偏执.
这包括其过时的模块管理系统(头文件)
我不能真正看到C++使用头文件的方式有任何问题.通过提供两种方式来包含标题,您可以在源级别指定符号应来自您的应用程序还是来自系统的已安装的facuilities.所有现代C++编译器都支持预编译头,因此没有性能损失.从实现中分离标头允许开发人员使用以其他语言编程的库.
语法怪癖使其语法不可判定(例如<>模板声明的尖括号),几乎没有语法糖,
语言非常庞大,可能难以完全遵循,但它仍然受到适用于所有地方的许多逻辑规则的指导.该语言实际上提供了许多方法来定制您的使用,通过函数和运算符重载以及模板,使您可以简单地表达您的问题
包含在文本级别运行的宏而不是真正的语言功能来解决宏的用途,
关于预处理器还有很多不太喜欢,但从代码生成的角度来看,对令牌进行操作非常有用.当然,像M4宏这样的东西提供了一种更强大的方法,但缺点是它不是语言的标准部分.无论编译器是什么,标准c/c ++预处理器都可用.
数组和字符串等功能的重复(这些类型的STL和C版本)
此功能不重复.需要低级,逐字节的基元(不包括指针算术)来实现更高阶的概念,如通用容器.记住C++是为了实现它所实现的系统的编程,同时也是为了提供实际工作的表达能力.
并且缺乏现代功能,例如线程,垃圾收集,委托/闭包等(注意:是的,在内存受限或实时环境中,您可能有充分的理由不想要垃圾收集,但可以轻松地进行选择-out并且是管理内存的默认方式.)
线程化需要操作系统的协作,而编程语言无法实现标准化.许多语言将其抽象为单个界面,但这在c ++中并未发生(显然这是即将到来的).垃圾收集器可用于C++,但它提供了更强大的概念RAII.选择退出不是C++方式无论如何,如果垃圾收集设施被标准化为语言,它肯定是一个选择加入,所以如果你不使用它,你不必支付它.
是的,我比Java更喜欢C++ - 因为我可以更自由地表达自己.
C++是必要的,因为它是目前唯一真正可扩展的语言.有一种方法可以调整程序的每个方面,因此它永远不会耗尽.
另一个好处是详细程度在库代码中,而不是"使用"代码.一旦库正在运行,使用代码通常很好并且简洁(如果您正确地使用库,则易于阅读).
在Java/C#中,所有详细程度都归结为使用代码 - try/catch/finally ...所有这些都需要一遍又一遍地输入.伊克...!
我提到过基于堆栈的对象吗?人们如何在没有他们的情况下生活......
C++真正倒下的唯一地方是反思(尽管即使这样也可以完成,例如COM).
是的,带有更严格语法的清理C++会很好但我们知道它永远不会发生.你可以习惯语法,总体而言,这是一个很小的代价来支付你得到的回报.
它作为系统/性能编程语言的利基
这是一个非常大的利基!有可能如果一个软件拥有超过1000万用户,那么它是用C++编写的:
视窗
IE
PhotoShop的
火狐
办公室
SQL Server
MySQL的
Google搜索引擎
欧特克
资料来源:http://www.research.att.com/~bs/applications.html
对我来说,我更喜欢C++,因为:
它仍然是一个相当直接的代表硬件将要做什么,或足够接近,你可以做出有关实际程序行为和性能的有根据的推论
它足够灵活,允许我使用或实现大多数编程范例
它与其他库和模块具有高度兼容性,是现有最大的参考和直接可用代码支持基础
大多数"疣"很容易通过良好的编程实践和/或实用程序库消除,而其他语言则"疣"不太可修复(例如:您可以通过使用智能指针轻松修复内存泄漏,并轻松诊断内存)直接内存分析的腐败,你不能轻松调试更高级别的语言,如C#中的内存损坏问题,是的,我已经有了它们)
通常可以使C++应用程序在任何操作系统版本上运行,唯一的限制就是努力; 更高级别的语言通常需要可能存在或不存在的运行时
对于主要开发,我更喜欢其他什么东西?好吧,除了以某种方式解决上述原因之外,其他"更高级别"的语言必须表达我仍然能够实现和调试我在C++中可以做的所有事情的感觉.真正唯一对我来说很接近的是C++/CLI,但它在语法上更糟糕,更难理解,并且未能通过"运行时所需"测试(并且可以说在其他预期的好处方面没有增加太多).
我想在退休之前的30多年里,我会得到报酬而不是C++.肯定存在开发领域,其中C++不是优选的,并且语言供应商有强烈的动机迫使开发人员使用在专有和/或供应商控制的运行时(例如:Java,C#等)上运行的更高级语言.但就目前而言,对我来说,C++仍然是适合这项工作的正确工具,我喜欢通过写作来获得报酬.:)
C++ 0x!