Wie testet das C ++ - Standardkomitee seine Designideen?

29

Prüft das C ++ - Komitee seine neuen Designspezifikationen mit einer Art Prototyp-Compiler, bevor es einen neuen Standard veröffentlicht? Oder veröffentlichen sie einen Standard, der eigentlich nur theoretisch ist, bis die großen Compiler ihn implementieren?

Matthew James Briggs
quelle
4
Boost fungiert als Prototyp für eine Vielzahl von Bibliotheksverbesserungen. ZB boost::shared_ptr=> std::shared_ptr.
MSalters
6
Ich habe ein bisschen ein einfaches "sie tun es nicht" erwartet.
Sebb
@MSalters: Boost fungierte auch als Prototyp für eine ganze Reihe von Verbesserungen der Kernsprache (z. B. boost.lambda=> C ++ 11 Lambda-Ausdrücke).
Jerry Coffin

Antworten:

26

Das C ++ - Standardkomitee hat Statuten und Regeln, die meisten betreffen jedoch die Struktur der Organisation, das Einreichen von Vorschlägen, die Abstimmung, die Veröffentlichung des Standards usw. und nicht so sehr die technischen Details des Standards selbst oder wie dieser kann getestet werden.

Soweit mir bekannt ist, gibt es keine formale Anforderung zum "Testen" eines Features oder seines Designs. C ++ ist auch insofern einzigartig, als es keine Referenz oder "primäre" Implementierung gibt (z. B. Microsoft CLR, Oracle JDK, Zend PHP). Die Komiteemitglieder bestehen jedoch aus vielen Organisationen mit umfassenden Kenntnissen der Sprache und der Compiler-Implementierung. Wenn Sie beispielsweise diesem vorherigen Link folgen, sehen Sie Vertreter von Microsoft und Intel, die beide über angesehene C ++ - Compiler verfügen. Red Hat und einige andere Unternehmen, die zu GCC beitragen, sind ebenfalls beteiligt.

Wenn Komiteemitglieder ein neues Feature vorschlagen, haben sie bereits eine gute Vorstellung davon, ob es machbar ist, ob es mit anderen Features in Konflikt steht oder ob die Grammatik in einer Weise mehrdeutig ist , die das Parsen unnötig erschwert. ( Hier ist eine gute Frage zur Grammatik von C ++ )

Die kurze Antwort lautet: "Nein, das Komitee muss seine Entwürfe nicht mithilfe von Prototypen testen." Es besteht jedoch kein großer Bedarf, da die Komiteemitglieder Experten in C ++ sind, die alle Details auf einer Ebene verstehen, die die große Mehrheit der Programmierer nicht kennt. Denken Sie daran, diese Leute sind Spracharchitekten , die Experten für Sprachtheorie und Compiler-Design sind.

Die Einbeziehung des Compiler - Anbieters in dem Prozess gegeben, ist es möglich , dass ein oder mehr von ihnen können ein neues Feature Prototyp, aber auch hier gibt es keine formale Voraussetzung dafür , noch ist es etwas , was ich von dem in öffentlich zugänglichen Dokumenten gelesen habe C ++ Ausschuss.

Sie tendieren auch dazu, sehr konservativ zu sein und inkrementell neue Features hinzuzufügen, die in der realen Welt gefragt sind, ohne große Mengen neuer Features anzugeben, die sich als riskant erweisen können. Tatsächlich haben sie in den letzten Jahren neue Funktionen hinzugefügt, die als proprietäre Erweiterungen oder Open-Source-Bibliotheken existierten und bereits in der realen Welt funktionieren. Zum Beispiel enthalten C ++ 11 und C ++ 14 Teile von Boost , das bereits in der Praxis in mehreren Compilern und Ausführungsumgebungen getestet wurde. Es ist nicht erforderlich, etwas zu testen, das bereits getestet wurde.

Gemeinschaft
quelle
5
ConceptGCC und ConceptClang sind zwei Beispiele für Compiler (oder vielmehr Compilergabeln), die explizit erstellt wurden, um Prototypen zu erstellen und echte Erfahrungen mit einer komplexen Sprachfunktion zu sammeln. Konzepte sind auch ein Beispiel dafür, wie gründliche Sprachfunktionen in C ++ entworfen wurden: Konzepte gibt es seit 1998, zuerst als informelle Idee, um über C ++ - Vorlagen zu sprechen, dann 2006 als vorgeschlagene Sprachfunktion von Bjarne selbst und auch in ConceptGCC implementiert seit damals. Sie können
Jörg W Mittag
3
… Landen in C ++ 17, was bedeutet, dass sie als Implementierung etwa 10 Jahre und als Idee 20 Jahre gereift sind.
Jörg W Mittag
2
Das ist meistens falsch, denke ich. Neue Funktionen erfordern normalerweise zuerst eine Implementierung . Das eine Mal ist das nicht passiert, wir haben Export bekommen.
Isanae
5
Der letzte Absatz ist (um es leicht auszudrücken) Unsinn. Das C-Komitee ist sehr konservativ, aber C ++ fügt ständig alle möglichen neuen Dinge hinzu, ohne Rücksicht darauf, was für ein Durcheinander die Sprache anrichtet oder ob es tatsächlich die Probleme löst, die die Leute lösen wollen.
R ..
1
@ R .. Ich bin anderer Meinung. C ++ 11 war eine Anomalie, aber es enthielt eine Menge Dinge, die bereits existierten (siehe zum Beispiel meinen Boost-Kommentar). Während eines Großteils des Lebens von C ++ hat es sich sehr langsam entwickelt. Dies ist eine der Hauptbeschwerden, die viele Entwickler über die Sprache haben.