Comment le comité des normes C ++ teste-t-il leurs idées de conception?

29

Le comité C ++ teste-t-il leurs nouvelles spécifications de conception avec une sorte de compilateur prototype avant de publier une nouvelle norme? Ou libèrent-ils une norme qui, en fait, n'est que théorique jusqu'à ce que les grands compilateurs la mettent en œuvre?

Matthew James Briggs
la source
4
Boost agit comme le prototype d'un grand nombre d'améliorations de bibliothèque. Par exemple boost::shared_ptr=> std::shared_ptr.
MSalters
6
Je m'attendais à un simple "ils ne le font pas".
Sebb
@MSalters: Boost a également servi de prototype à bon nombre d'améliorations du langage de base (par exemple, boost.lambda=> expressions lambda C ++ 11).
Jerry Coffin

Réponses:

26

Le C ++ Standard Committee a des statuts et des règles, mais la plupart d'entre eux sont centrés sur la structure de l'organisation, comment soumettre des propositions, voter, publier la norme, etc. et pas tant sur les détails techniques de la norme elle-même ou comment elle peut être testé.

Il n'y a aucune exigence formelle pour «tester» une fonctionnalité ou sa conception à ma connaissance. C ++ est également quelque peu unique en ce sens qu'il n'y a pas de référence ou d'implémentation "principale" (par exemple Microsoft CLR, Oracle JDK, Zend PHP). Cependant, les membres du comité sont composés de nombreuses organisations ayant une connaissance approfondie du langage et de l'implémentation du compilateur. Par exemple, si vous suivez ce lien précédent, vous verrez des représentants de Microsoft et Intel qui ont tous deux des compilateurs C ++ très respectés. Red Hat et quelques autres sociétés qui contribuent à GCC sont également impliquées.

Lorsqu'ils proposent une nouvelle fonctionnalité, les membres du comité ont déjà une assez bonne idée de savoir si elle est faisable, si elle peut entrer en conflit avec d'autres fonctionnalités, ou rendre la grammaire ambiguë d'une manière qui complique l'analyse inutilement. ( voici une bonne question sur la grammaire de C ++ )

La réponse courte est «non, le comité n'exige pas de tester leurs conceptions en utilisant le prototypage». Cependant, il n'y a pas grand-chose à faire car les membres du comité sont des experts en C ++ qui comprennent tous les petits détails à un niveau que la grande majorité des programmeurs ne comprend pas. N'oubliez pas que ces personnes sont des architectes de langage qui sont des experts en théorie des langages et en conception de compilateurs.

Compte tenu de l'implication des fournisseurs compilateur dans le processus, il est possible que l' un ou plusieurs d'entre eux peut prototyper une nouvelle fonctionnalité, mais encore une fois, il n'y a pas d' obligation formelle pour ce n'est - ce quelque chose que j'ai lu dans des documents accessibles au public de la Comité C ++.

Ils ont également tendance à être très conservateurs, ajoutant progressivement de nouvelles fonctionnalités qui ont une demande dans le monde réel sans spécifier de grandes quantités de nouvelles fonctionnalités qui peuvent s'avérer risquées. En fait, ces dernières années, ils ont ajouté de nouvelles fonctionnalités qui existaient sous la forme d'extensions propriétaires ou de bibliothèques open source qui fonctionnent déjà dans le monde réel. Par exemple, C ++ 11 et C ++ 14 intègrent des parties de Boost , qui a déjà été testé dans le monde réel dans plusieurs compilateurs et environnements d'exécution. Il n'est pas nécessaire de tester quelque chose qui est déjà testé.

Communauté
la source
5
ConceptGCC et ConceptClang sont deux exemples de compilateurs (ou plutôt fourchettes de compilateurs) qui ont été explicitement créés pour prototyper et acquérir une expérience réelle avec une fonctionnalité de langage complexe. Les concepts sont également un exemple de la façon dont les fonctionnalités de langage approfondies sont conçues en C ++: les concepts existent depuis 1998, d'abord comme une idée informelle pour parler des modèles C ++, puis en 2006 comme fonctionnalité de langage proposée par Bjarne lui-même, et également mis en œuvre dans ConceptGCC depuis. Ils peuvent
Jörg W Mittag
3
… Finissent en C ++ 17, ce qui signifie qu'ils auront mûri pendant environ 10 ans en tant qu'implémentation et 20 ans en tant qu'idée.
Jörg W Mittag
2
C'est surtout faux, je pense. Les nouvelles fonctionnalités nécessitent généralement une implémentation en premier. La seule fois où cela ne s'est pas produit, nous avons obtenu l'exportation.
Isanae
5
Le dernier paragraphe est (pour le dire légèrement) un non-sens. Le comité C est très conservateur, mais C ++ ajoute constamment toutes sortes de nouvelles choses sans trop se soucier du gâchis qu'il crée dans le langage ou s'il résout réellement les problèmes que les gens veulent résoudre.
R ..
1
@R .. Je ne suis pas d'accord. C ++ 11 était une anomalie, mais il comprenait beaucoup de choses qui existaient déjà (voir mon commentaire Boost, par exemple). Pendant une grande partie de la vie de C ++, il a évolué très lentement, ce qui est une plainte majeure que de nombreux développeurs ont à propos du langage.