C++ 0x噪音,膨胀和可移植性

Jon*_*röm 2 c++ portability c++11

起初,当我看到即将推出的C++ 0x标准时,我很高兴,并不是说我很悲观,但现在想到它时,我感到有些不那么充满希望.

主要是因为三个原因:

  1. 很多提升膨胀(必须导致无望的编译时间?),
  2. 语法看起来很冗长(不像我最初希望的那样是Pythonic),而且
  3. 我对便携性和其他平台(iPhone,Xbox,Wii,Mac)非常感兴趣,是不是存在非常真实的风险,"标准"需要很长时间才能获得足够的便携性?

我认为#3的风险较小,从过去十年的模板中吸取了教训; 然而魔鬼的细节.

编辑2(试图减少奇思妙想):你会说公司在标准的第一个有效年份过渡到C++ 0x是安全的,还是会有很大的风险?

bdo*_*lan 14

  1. 您只需支付使用的费用.如果您不需要复杂的模板功能,请不要#include它定义的标头,您不必处理它.
  2. Lambda函数应该减少STL算法的冗长程度; 和auto变量将有助于代码std::map<foo, std::shared_ptr<std::vector<bar> > >::const_iterator...
  3. 是的,这需要一段时间.许多新功能确实在推动,如果你想要可移植性,那么在标准实施后至少几年你应该使用它.幸运的是,只有两个编译器涵盖了你提到的平台:g ++和微软的C++编译器.一旦获得支持,嵌入式工具链使用新版本重建只是时间问题.不幸的是,可能很多时间......

  • 如果你在做自制软件,它会这样做;) (4认同)
  • 它比boost :: lambda好多了,这肯定是:) (3认同)

jal*_*alf 13

编辑:我(以及像我这样的其他人)是否必须密切关注构建时间,无法读取的代码和缺乏可移植性,并进行大规模原型设计以确保继续使用新标准?

是.但是你必须用现行标准做所有这些事情.我没有看到它在C++ 0x上变得更糟.

C++构建时间总是很糟糕.但是,没有理由为什么C++ 0x应该比现在慢.与往常一样,您只需要包含所需的标题.据我所知,每个标题都没有明显变大.

当然,概念是这里最大的未知之一,并且担心它们会大大减慢编译时间.这是他们被削减的众多原因之一.

如果你不小心,C++很容易变得不可读.再一次,没有新的东西.而且,C++ 0x提供了许多工具来帮助最小化这个问题.Lambda并不像Python或SML那样简洁,但它们比我们今天必须定义的仿函数更具可读性.

至于可移植性,C++已经是一个雷区.没有给出整数类型大小的保证,也没有字符串编码的保证.在这两种情况下,C++ 0x都提供了解决此问题的工具(使用特定于Unicode的char类型和保证固定大小的整数)

即将推出的标准指出了一些目前阻碍可移植性的问题.

总的来说,是的,你提到的问题是真的.它们存在于今天,它们将存在于C++ 0x中.但据我所知,C++ 0x减少了这些问题的影响.它不会让他们变得更糟.

你是对的,所有平台上的兼容标准都需要一段时间.但我认为这将是一个比C++ 98更快的过程.

所有主要的编译器供应商似乎都非常热衷于C++ 0x支持,这在上一次并非如此.(可能因为那时候,它主要是调整和修复它们已经实现的预标准功能的问题,因此更容易声称你的预标准编译器"几乎几乎与C++ 98兼容".

我认为总的来说,C++社区比十年前更注重标准和前瞻性.如果你想出售你的编译器,你将不得不认真对待C++ 0x.

但是,从完全(或大部分)兼容的编译器可用到标准发布之前,肯定会有几年的时间.


Sim*_*ele 10

像大多数C++一样,您只需支付所需费用.因此,如果您不想要有用的跟踪指针,线程库等的"增加膨胀",那么您不需要为编译付费.

我非常肯定可移植性将通过设计来解决,特别是因为很多是基于来自boost等项目的现有可移植代码.正如您从各自的当前原型版本中看到的那样,GCC和Microsoft VC都已经实现了大部分C++ 0x.

  • @NTDLS那么我们必须尊重地不同意.你可以从冷酷无情的手中撬起我的助推器库. (4认同)

Cha*_* Ma 6

  1. C++总是会有无望的编译时间,它的整体理念是做一次事情(即在编译时执行),因此您不必在运行时重复它并降低性能.正如其他人所说,如果你不需要,不要包括图书馆!
  2. C++永远不会是pythonic,因为它的目标是向后兼容.冗长来自于一种古老的语言,随着语言的演变而增加了很多东西.正如其他人所说,lambdas和auto变量也会大大降低冗长度
  3. 对于语言的任何重大更改都存在问题,但我认为这些更改会使语言更容易使用,因此应该快速采用.