C ++标准委员会如何测试其设计思想?


29

在发布新标准之前,C ++委员会是否使用某种原型编译器测试其新设计规范?还是他们发布了实际上只是理论性的标准,直到大型编译器实施为止?



4
Boost是大量库改进的原型。例如boost::shared_ptr=> std::shared_ptr
MSalters '16

6
我有点期望一个简单的“他们不”。
塞布2016年

@MSalters:Boost还充当了许多核心语言改进(例如boost.lambda=> C ++ 11 lambda表达式)的原型。
杰里·科芬

Answers:


26

C ++标准委员会拥有章程和规则,但其中大部分都围绕着组织结构为中心,如何提交提案,表决,发布标准等,并没有那么多的标准本身或者它如何的技术细节可能经过测试。

据我所知,没有正式的条件来“测试”功能或其设计。C ++在某种程度上也具有独特之处,因为它没有引用或“主要”实现(例如Microsoft CLR,Oracle JDK,Zend PHP)。但是,委员会成员由许多对语言和编译器实现有深入了解的组织组成。例如,如果您单击该先前的链接,您将看到Microsoft和Intel的代表,他们都有受人尊敬的C ++编译器。Red Hat和其他为GCC做出贡献的公司也参与其中。

在提议一个新功能时,委员会成员已经对它是否可行,是否可能与其他功能冲突或是否使语法变得含糊不清,从而不必要地使解析复杂化了一个很好的主意。(这是一个有关C ++语法的好问题

简短的回答是“不,委员会不需要使用原型测试其设计。” 但是,并不需要太多,因为委员会成员都是C ++的专家,他们了解大多数程序员所不了解的所有细节。请记住,这些人是语言架构师,他们是语言理论和编译器设计方面的专家。

考虑到编译器供应商在此过程中的参与,可以可行的是,他们中的一个或多个可以为新功能提供原型,但是同样,没有正式的要求,我也没有从编译器的公开文档中了解到这一点。 C ++委员会。

它们也往往非常保守,会逐步添加现实世界中有需求的新功能,而不指定大量可能被证明具有风险的新功能。实际上,近年来,他们已经添加了新功能,这些新功能已经存在于现实世界中,它们是专有扩展或开源库。例如,C ++ 11和C ++ 14包含Boost的各个部分,Boost已在多个编译器和执行环境的真实世界中进行了测试。无需测试已经测试过的东西。


5
ConceptGCCConceptClang是编译器(或更确切地说是编译器的分叉)的两个示例,它们是显式创建的,旨在通过复杂的语言功能进行原型开发并获得实际经验。概念也是C ++中如何设计语言功能的一个示例:概念自1998年以来就存在,首先是一个非正式的想法,谈论C ++模板,然后在2006年作为Bjarne本人提议的语言功能,并在ConceptGCC中实现自那时候起。他们可能会 ...
约尔格W¯¯米塔格

3
…最终出现在C ++ 17中,这意味着它们作为一种实现已经成熟了大约10年,而作为一种思想它们已经成熟了20年。
约尔格W¯¯米塔格

2
我认为这主要是错误的。新功能通常需要一个实现第一。一次没有发生,我们得到了出口。
isanae

5
最后一段是(胡扯)废话。C委员会非常保守,但是C ++一直在添加各种各样的新东西,而很少考虑它使语言变得一团糟,还是实际上解决了人们想要解决的问题。
R.,

1
@R ..我不同意。C ++ 11是一个异常,但是它包含了许多已经存在的东西(例如,请参阅我的Boost评论)。在C ++的大部分生命中,它的发展非常缓慢,这是许多开发人员对该语言的主要抱怨。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.