Jak komitet normalizacyjny C ++ testuje swoje pomysły projektowe?

29

Czy komitet C ++ testuje swoje nowe specyfikacje projektowe za pomocą jakiegoś prototypowego kompilatora przed wydaniem nowego standardu? Czy też publikują standard, który w rzeczywistości jest tylko teoretyczny, dopóki duże kompilatory go nie wdrożą?

Matthew James Briggs
źródło
4
Boost działa jak prototyp wielu ulepszeń biblioteki. Np. boost::shared_ptr=> std::shared_ptr.
MSalters
6
Spodziewałem się po prostu „oni nie”.
Sebb,
@MSalters: Boost działał również jako prototyp dla wielu usprawnień języka podstawowego (np. boost.lambda=> Wyrażenia lambda C ++ 11).
Jerry Coffin

Odpowiedzi:

26

C ++ Komitet standardowa ma regulaminów i zasad, ale większość z nich koncentruje się wokół struktury organizacji, do składania wniosków, głosowanie, publikując standard, itp i nie tyle na szczegółach technicznych samego standardu lub jak go może być przetestowany.

O ile mi wiadomo, nie ma formalnego wymogu „testowania” funkcji lub jej projektu. C ++ jest również nieco unikatowy, ponieważ nie ma odniesienia ani „podstawowej” implementacji (np. Microsoft CLR, Oracle JDK, Zend PHP). Członkowie komitetu składają się jednak z wielu organizacji posiadających głęboką znajomość języka i implementacji kompilatora. Na przykład, jeśli skorzystasz z poprzedniego linku, zobaczysz przedstawicieli Microsoft i Intel, którzy mają szanowane kompilatory C ++. Zaangażowany jest również Red Hat i kilka innych firm, które wnoszą wkład w GCC.

Proponując nową funkcję, członkowie komitetu mają już całkiem dobry pomysł na to, czy jest to wykonalne, czy może kolidować z innymi funkcjami lub powodować niejednoznaczność gramatyki w sposób, który komplikuje niepotrzebnie parsowanie. ( tutaj jest dobre pytanie o gramatykę C ++ )

Krótka odpowiedź brzmi: „nie, komitet nie wymaga testowania swoich projektów przy użyciu prototypowania”. Jednak nie ma takiej potrzeby, ponieważ członkowie komitetu są ekspertami w C ++, którzy rozumieją wszystkie drobne szczegóły na poziomie, którego nie rozumie zdecydowana większość programistów. Pamiętaj, że ci ludzie to architekci języków, którzy są ekspertami w dziedzinie teorii języków i projektowania kompilatorów.

Biorąc pod uwagę zaangażowanie dostawców kompilatora w proces, możliwe jest, że jeden lub więcej z nich może prototypować nową funkcję, ale znowu nie ma na to formalnego wymogu, ani też nie jest to coś, o czym czytałem w publicznie dostępnych dokumentach z Komitet C ++.

Są też zwykle bardzo konserwatywne, dodając stopniowo nowe funkcje, które są pożądane w świecie rzeczywistym, bez określania dużej liczby nowych funkcji, które mogą okazać się ryzykowne. W rzeczywistości w ostatnich latach dodali nowe funkcje, które istniały jako zastrzeżone rozszerzenia lub biblioteki typu open source, które już działają w prawdziwym świecie. Na przykład C ++ 11 i C ++ 14 zawierają części programu Boost , który został już przetestowany w świecie rzeczywistym w wielu kompilatorach i środowiskach wykonawczych. Nie ma potrzeby testowania czegoś, co zostało już przetestowane.

Społeczność
źródło
5
ConceptGCC i ConceptClang to dwa przykłady kompilatorów (a raczej forków kompilatorów), które zostały wyraźnie utworzone w celu prototypowania i zdobycia prawdziwego doświadczenia dzięki złożonej funkcji językowej. Pojęcia są również przykładem tego, jak dokładne funkcje językowe są projektowane w C ++: Pojęcia istnieją od 1998 r., Najpierw jako nieformalny pomysł na rozmowę o szablonach C ++, a następnie w 2006 r. Jako proponowana funkcja językowa przez samego Bjarne, a także zaimplementowana w ConceptGCC od tego czasu. Oni mogą ...
Jörg W Mittag
3
… Kończą się w C ++ 17, co oznacza, że ​​będą one dojrzewać przez około 10 lat jako implementacja i 20 lat jako pomysł.
Jörg W Mittag
2
Myślę, że to w większości nieprawda. Nowe funkcje zwykle wymaga się realizacji w pierwszej kolejności. Kiedy to się nie stało, dostaliśmy eksport.
isanae
5
Ostatni akapit to (delikatnie mówiąc) bzdury. Komitet C jest bardzo konserwatywny, ale C ++ cały czas dodaje różnego rodzaju nowe rzeczy, nie zwracając uwagi na to, jaki bałagan sprawia, że ​​język lub to, czy faktycznie rozwiązuje problemy, które ludzie chcą rozwiązać.
R ..
1
@R .. Nie zgadzam się. C ++ 11 był anomalią, ale zawierał wiele rzeczy, które już istniały (patrz na przykład mój komentarz Boost). Przez większość życia C ++ ewoluowało ono bardzo powoli, co jest jedną z głównych skarg wielu programistów na temat języka.