甚至大多数人喜欢C++承认,它已吨的疣不关系到其适当位置作为一个系统/业绩的程序语言。这些包括其陈旧的管理模块的系统(标题文件),要求向声明,法的怪癖,使其无法判定的语法(例如 <>角括号内为模板宣言》),包括宏运作的文本水平,而不是真正的语言功能解决事情的宏用,用于重复的功能,例如阵列和串(STL和C的版本的这些类型),几乎没有任何语法糖,以及普遍缺乏现代化的功能,例如穿,垃圾收集,与会代表/封闭,等等。(注:是的,在很存的约束,或者实时环境可能有良好的原因不想垃圾收集,但它可以很容易地作出选择退出而是默认的方式管理存储器中。)

另一方面,C++是唯一的 主流 语言可以让你写的代码有效地和附近的金属,而且还提供了至少某些高级别的抽象概念。它是成熟的、标准化和具有成吨的编译器实现和图书馆和一个很大的遗产代码。

那些你没有使用C++为他们的主要语言,有什么了你个人的决定,其疣都是值得忍?什么才能让你改变主意并决定使用一个较新的语言更少的这些种类的疣?你使用C++因为你真的 喜欢 它,或者你是用它勉强,因为遗留问题,或者因为没有其他成熟,主流语言的存在对于它的适当位置?

有帮助吗?

解决方案

给我一种编程语言:

  1. 是标准化和不被驱动通过一个单一的公司
  2. 是不是能一个平台(不仅在理论上)
  3. 编纂司机代码
  4. 给了我的相同的效率作C++不会
  5. 提供了一个很好的想法的标准图书馆
  6. 至少有一个成熟的执行情况的各种重要的平台

...我可能会考虑交换;-)

其他提示

你的部分问题有一个错误的假设。你假设我们有语言选择。在所有我使用C ++工作的项目中,没有真正的选择。这个项目早在我加入公司之前就存在并且是用C ++编写的。他们背后有多年的历史和相应数量的代码。

我认为这是人们说<!>时犯的最大错误; C ++会死<!>或者<!>“为什么人们仍然使用C ++?<!>”。我绝对同意,除了系统级程序之外,你不会看到许多/任何以C ++开头的新项目。恕我直言,它没有多大意义。不一定是因为语言中存在固有的缺陷,但是找到擅长编写C ++的人越来越难。

人们经常忘记考虑的是今天运行我们世界的数百万(数十亿?)C ++系列。切换到另一种语言非常代价高昂,无法随心所欲。将时间和精力用于重写该大小的应用程序需要花费巨大的理由。这就是C ++不会死的原因。至少在不久的将来。

我使用C ++(近25年来已经这样做了),因为它是最好的系统编程语言。我会说我不认识任何所谓的<!>“疣<!>”;你描述 - 那些是功能!

对于非系统编程,我使用其他语言,如PHP,Delphi,bash脚本,awk,perl和Smalltalk。一种尺寸并不适合所有人,除非你当然是某种语言偏执。

  

这些包括其过时的模块管理系统(头文件)

我真的看不出C ++使用头文件的方式有任何问题。通过提供两种方式来包含标题,您可以在源级别指定符号应来自您的应用程序还是来自系统的已安装的facuilities。所有现代C ++编译器都支持预编译头,因此没有性能损失。从实现中分离标头允许开发人员使用其他语言编写的库。

  

语法怪癖使其语法不可判定(例如<!> lt; <!> gt;模板声明的尖括号),几乎没有语法糖,

语言非常庞大,难以完全遵循,但它仍然受到适用于所有地方的许多逻辑规则的指导。该语言实际上提供了许多方法来定制您的使用,通过函数和运算符重载以及模板,使您可以简单地表达您的问题

  

包含在文本级别运行的宏而不是真正的语言功能来解决宏的用途,

对于预处理器有很多不喜欢的东西,但从代码生成的角度来看,对令牌进行操作非常有用。当然,像M4宏这样的东西提供了一种更强大的方法,但缺点是它不是语言的标准部分。无论编译器是什么,标准c / c ++预处理器都可用。

  

重复功能,如数组和字符串(这些类型的STL和C版本)

此功能不重复。需要低级,逐字节的基元(不包括指针算术)来实现更高阶的概念,如通用容器。记住C ++是为了实现它所实现的系统的编程,也是为了提供实际工作的表现力。

  

并且普遍缺乏线程,垃圾收集,委托/闭包等现代功能(注意:是的,在内存受限或实时环境中,您可能有充分的理由不想要垃圾收集,但它很容易选择退出并成为管理记忆的默认方式。)

线程需要操作系统的合作,使编程语言无法真正标准化。许多语言将其抽象为单个界面,但这在c ++中并未发生(显然这是即将到来的)。垃圾收集器可用于C ++,但它提供了更强大的概念RAII。选择退出不是C ++的方式,如果垃圾收集设施被标准化为语言,它肯定是一个选择加入,所以如果你不使用它,你不必支付它

是的,我比Java更喜欢C ++ - 因为我可以更自由地表达自己。

C ++是必要的,因为它是目前唯一真正可扩展的语言。有一种方法可以调整程序的各个方面,因此它永远不会失去动力。

另一个好处是详细程度在库代码中,而不是<!> quot; usage <!> quot;码。一旦库正在运行,使用代码通常很好并且简洁(如果您正确地使用了库,则易于阅读)。

在Java / C#中,所有详细程度都归结为使用代码 - try / catch / finally ...所有这些都需要一遍又一遍地输入。伊克...!

我是否提到过基于堆栈的对象?人们如何在没有他们的情况下生活...... ??

C ++真正倒下的唯一地方就是反思(尽管即使这样可以完成,例如COM)。

是的,带有更严格语法的清理C ++会很好但我们知道它永远不会发生。你可以习惯语法,总体而言,这是一个很小的代价来支付你得到的回报。

它的适当位置作为一个系统/业绩编程语言

这是一个相当大的适当位置!机会是,如果一个软件已经超过10万的用户是用C++编写的:

  • Windows
  • PhotoShop
  • Firefox
  • 办公室
  • SQL服务器
  • MySQL
  • Google搜索引擎
  • AutoDesk

资料来源: http://www.research.att.com/~bs/applications.html

对我来说,我喜欢C++的,因为:

  • 它仍然是一个合理的直接的代表什么的硬件要做的事情,或足够接近,你可以让受过教育的扣减有关的实际程序的行为和业绩
  • 它是灵活的,足以允许我使用或实施的大多数编程模式
  • 它具有很高的相容性与其他库和模块,并最大现有的支助基准和直接可用的代码
  • 大多数"疣"易于消除与一个良好的编程的做法和/或实用工具库,相对于其他语文"疣"少可以解决(例如:你可以很容易地修复记忆泄漏通过使用智能指针,并且很容易诊断记忆损坏用直接内存存的分析,不能轻易地调试内存腐败问题在较高水平语言,是的,我有他们)
  • C++的应用程序一般可在任何操作系统版本有唯一的限制正在努力;更高水平的语言通常要求运行时,它可能或不可能本

那会是什么需要我更喜欢别的东西对主要的发展?好吧,除了解决上述原因中的一些方式,其他"高级别"的语言将要表达的感觉,我仍然能够实现和调试一切我能做C++。真的只有一件事,这已经接近为我是C++/CLI,但它是语法上甚至更糟糕的是,难以理解的,并将失败的"运行时所需要的"测试(可以说不会增加多少在其他方面所需的好处)。

我想在接下来的30年前我退休,我将支付编写其他的东西比C++。当然,还有发展领域C++是不可取的,并强烈的动机语言的供应商力开发商进入更高级别的语言上运行的私有和/或供应商控制的运行时(例如:Java,C#等等)。现在,虽然,对于我、C++仍然是正确的工具的工作,我享受得到报酬继续书写。:)

我的观点是,人们需要更高级别的语言,以某种方式提供C ++提供的相同功能。使用高级语言(比如Java)做一些事情,同时以更好的速度,本机二进制编译和其他功能执行,而不诉诸JNI之类的东西,将是<!>;我需要摆脱C ++ <! > QUOT;

当他们提出一种语言,在更少的内存中运行得更快,并得到更广泛的支持。

坦率地说,它运作良好,我付钱写它。它并没有与控制它的单个供应商的营销想法纠缠在一起。市场上的C ++专家越来越少,因此我的价值随着时间的推移而不断增加。我将继续使用它,直到市场变得不可持续。

正如你所描述的那样,C ++肯定有它的瑕疵,这个 C ++ FQA 做得很好指出其中许多人的工作。但是,使用一种语言很长一段时间的人和组织已经包含了大量的成语,陷阱指南,使其更加有效可忍受的。 C ++中的编程风格还有

理解为什么C ++是这样的,并欣赏它的成就的最好方法是阅读<!>“C ++的设计和演变<!>”。

对于它的所有瑕疵,C ++是一种非常好的语言。

我主要将C ++用于嵌入式平台,这通常需要与硬件进行大量的密切交互。我在这里看不到任何OO替代品。如果我在这里用C ++代替任何东西,它可以在编译时解决所有的包含特权,所以我不必担心那些......基本上,这些东西可以减轻我的开发,但没有提供任何运行时开销(反射,垃圾收集等)。

对我来说,C ++完全是关于运行时性能和绝对控制。没有花哨的运行时运行的东西可以起作用<!>“幕后花絮<!>”。

我做科学计算,我的GUI在C#中,我的后端是C ++。它并非超出C#在性能方面至少可以与C ++相等的可能性,但这并不是C#/插入托管语言的重点所在。这很困难,但是在C#执行以及C ++(或非常接近它)进行数值计算的可能性范围内,因为IL被编译成机器代码。如果/当发生这种情况时,我很乐意进行转换。

当一种新语言能够像C ++一样富有表现力时。由于高级和低级能力之间的利益冲突,这很难实现。这就是我们首先拥有语言和流程互操作性的原因。

另外C这对C来说可能更难,因为它非常精简和强大。由于这个原因,C赢得了低水平的竞技场。 C为C ++和目标C创造了良好的支持。

总之,你很长时间都会看到C和C ++。

我个人选择使用C ++(当我甚至可以选择时)是因为它是唯一一种没有被解释且具有足够的<!>“铃声和口哨声”的多用途编程语言之一。让我相对快速地完成任务。现在,当机会出现时,我选择其他语言(例如,Python,Java,Perl,ksh等)有很多原因。我使用其他语言<!>“;一次性<!>”;性能不是问题的应用程序和脚本,也不是<!> quot; field deployability <!> quot;。许多脚本语言的部署支持是以网络为中心的,我在更多的基础架构和<!>“隐形胶水<!>”中工作。现在的行业。我们正在寻找J2EE应用程序服务器来帮助解决部署和支持问题,但我们已经有了一些很好的可执行服务方法。

在很多情况下,我将继续使用C ++的最大原因是,在你添加一些精选的库来处理非编程语言平台的东西(线程,套接字等)后,它几乎支持我所需要的一切。 )。并且...... ...我确实认为线程应该在编程语言之外表示。这是我倾向于远离其他语言的主要原因 - 我实际上喜欢具有裸骨核心的语言,其功能通过附加库提供。

让编程语言担心语法,继承,多态,模块结构,异常处理,循环结构等。一旦您进入应用程序域并希望多线程化您的应用程序或者可能使用多个进程,那么您正在谈论库。太多语言试图强制使用不适用于每个问题的特定编程范例(OOP)。我更喜欢一种不错的通用编程语言。

最后一个原因是我选择C ++而不是其他语言是因为我认为它比其他语言更具确定性。我知道Java是首选的平台中立解决方案和Ruby <!>放大器; Python是快速开发替代品du'jour。问题是被解释的应用程序总是在他们的解释器的奇思妙想。这并不总是坏事,而且肯定也不总是好事。

有可能C ++会在这里停留一段时间。我的猜测是,大量纯粹的OOP语言将开始将市场份额扩展到更通用的动态语言(可能是Ruby和Python),并且这些语言也会获得更严重的OO排序。当太阳开始真正开始使用C ++时,我将切换到另一种语言,并且还有另一种语言被<!> quot; industry <!>引用。我相信它会在某一天发生......毕竟C ++在几年前实际上取代了C作为我的选择语言。

C++的工具在我的工具箱。所以是java和python和一些其他的东西。

很巧的是我公司的环境,使我能够用,无论是适当的。

  • C++==perf必要的时候。
  • Java==当perf不是那么必要(事实上,由于网络/外部IO大大超过了CPU周期),发展速度是必要的。

工具在你的工具箱。使用什么是适当的。

为什么呢?如果我开始用不同的语言编写代码,您是否能够获利? :-P

除了开玩笑,我写C ++代码,因为这就是我的雇主付钱给我的原因。这真的很简单。如果他们决定使用不同的语言,我会开始使用它。现在,至于为什么他们选择使用它,我只能推测。我猜他们有两个主要原因:

  1. 大学供应充足 毕业生足够好 at 他们可以完成他们的C ++ 商业目标。
  2. C ++提供好     足够的实时性能     分布式系统。

不幸的是,你没有发现语言的基本优雅和概念完整性。它提供了与任何其他语言一样舒适和一致的世界观,正如其多年来的持续使用所反映的那样。 YMMV,但允许我们同样的考虑。

你正在以相反的方式解决这个问题。人们选择他们感兴趣的问题/应用领域。语言的选择遵循这个决定并且非常简单。

没有人选择编程语言。编程语言本身很无聊,在没有参考问题/应用领域的情况下谈论它们是荒谬的。

就个人而言,我想从事机器学习。作为毕业生。我曾致力于分析巨大数据集(IMDB,Netflix)的图形表示。我在大部分工作中使用了C ++。我本来喜欢使用C#或Java或更好的Python,但问题的本质要求我使用C ++。在5年的时间里,我已经爱上了C ++,因为它在效率和抽象之间实现了黄金平衡。每当我发现需要时,我都会使用C ++。 C ++程序员是顽固的实用主义者,他们不会让任何事情妨碍完成任务。他们不会仅仅为了它而坚持C ++。

我认为,如今项目的高级别和低级别部分不需要(通常不应该)用同一种语言编写。因此,您要么等待雇主意识到即使找到开发人员更难以使用多种语言,实际上更容易找到好的开发人员,或者等待不称职的军队参与多种语言计划。

查看<!>“问题列表<!>”;使用C ++,我可能接近同意的唯一一个问题是STL / C字符串转换。

我可能会问,你为什么要C ++成为C#?

scroll top