警告:这几乎不像批评“用户不知道”链接到他的回答中的谈话那么多。
他的第一个主要观点是(据说)“不断变化的标准”。实际上,他给出的所有示例都与标准建立之前的 C ++更改有关。自1998年(第一个C ++标准最终定稿以来)以来,对该语言的更改已微乎其微-实际上,许多人认为真正的问题是应该进行更多更改。我可以肯定地说,所有符合原始C ++标准的代码仍符合当前标准。虽然这有点不太确定,除非有快速(和相当意外)的变化同样会与即将推出的C ++标准几乎也是如此(理论上,所使用的所有代码export
会破裂,但实际上不存在;从实际的角度来看,这不是问题。我可以想到其他几种语言,操作系统(或与计算机相关的任何其他事物)也可以提出这样的主张。
然后,他进入“不断变化的风格”。再说一次,他的大部分观点都是胡说八道。他试图将自己for (int i=0; i<n;i++)
形容为“老破烂”和for (int i(0); i!=n;++i)
“新热点”。现实是,尽管对于某些类型而言,这样的更改是有意义的,但对于而言int
,它们没有什么区别-即使您可以获得某些东西,也很少需要编写好的或正确的代码。即使在最好的情况下,他也正在用积雪冲天。
他的下一个主张是C ++正在“朝错误的方向进行优化”-特别是,尽管他承认使用好的库很容易,但他声称C ++“几乎使编写好的库变得不可能”。在这里,我相信这是他最根本的错误之一。实际上,为几乎所有语言编写好的库都是极其困难的。至少,编写一个好的库需要很好地理解某个问题领域,以使您的代码可以在该领域中(或与之相关)的多种可能的应用程序工作。C ++ 真正所做的大部分工作都是“提高标准”-在看到一个库可以有多好的表现之后,人们很少愿意回到编写否则会产生的麻烦。真正好的程序员编写了很多库,然后“其他人”可以使用(很容易,他承认)。这确实是“不是错误,而是功能”的情况。
我不会尝试依次击中每个要点(需要花费页面),而是直接跳到他的结束点。他引用Bjarne的话说:“可以使用整个程序优化来消除未使用的虚函数表和RTTI数据。这种分析特别适用于不使用动态链接的较小程序。”
他通过提出“这是一个非常困难的问题” 的无根据的主张来批评这一观点,甚至将其与停顿问题进行比较。实际上,这没什么大不了的-实际上,Zortech C ++附带的链接程序(几乎是1980年代用于MS-DOS 的第一个 C ++编译器)就是这样做的。确实很难确定已消除了所有可能冗长的数据,但为了做一个相当公平的工作仍然是完全合理的。
但是,无论如何,更重要的一点是,在任何情况下,这对于大多数程序员都是完全不相关的。正如我们中那些已经分解了很多代码的人所知道的那样,除非您完全不编写任何汇编语言而编写汇编语言,否则您的可执行文件几乎肯定包含了相当数量的“东西”(在典型情况下,包括代码和数据)可能甚至不知道,更不用说实际使用了。对于大多数人而言,在大多数情况下,这无关紧要-除非您是为最小的嵌入式系统开发的,否则额外的存储消耗根本就没有关系。
最后,的确,这只蚂蚁确实比Linus的愚蠢多了一些东西,但这确实给了它该死的淡淡的赞美。
virtual
函数,对吗?