¿Cómo prueba el comité de estándares de C ++ sus ideas de diseño?

29

¿El comité C ++ prueba sus nuevas especificaciones de diseño con algún tipo de compilador prototipo antes de lanzar un nuevo estándar? ¿O lanzan un estándar que es, en efecto, solo teórico hasta que los grandes compiladores lo implementen?

Matthew James Briggs
fuente
44
Boost actúa como el prototipo de una gran cantidad de mejoras en la biblioteca. Por ejemplo boost::shared_ptr=> std::shared_ptr.
MSalters
66
Esperaba un simple "no lo hacen".
Sebb
@MSalters: Boost también ha actuado como un prototipo para un buen número de mejoras del lenguaje central (por ejemplo, boost.lambda=> C ++ 11 expresiones lambda).
Jerry Coffin

Respuestas:

26

El Comité de Normas de C ++ tiene estatutos y reglas, pero la mayoría de estos se centran en la estructura de la organización, cómo presentar propuestas, votar, publicar la norma, etc. y no tanto en los detalles técnicos de la norma en sí o cómo puede ser probado

Hasta donde yo sé, no existe un requisito formal para "probar" una característica o su diseño. C ++ también es algo único en el sentido de que no hay referencia o implementación "primaria" (por ejemplo, Microsoft CLR, Oracle JDK, Zend PHP). Sin embargo, los miembros del comité consisten en muchas organizaciones con un profundo conocimiento del idioma y la implementación del compilador. Por ejemplo, si sigue ese enlace anterior, verá representantes de Microsoft e Intel que tienen compiladores de C ++ muy respetados. Red Hat y algunas otras compañías que contribuyen a GCC también están involucradas.

Al proponer una nueva característica, los miembros del comité ya tienen una idea bastante buena de si es factible, si puede entrar en conflicto con otras características o hacer que la gramática sea ambigua de una manera que complica el análisis innecesario. ( Aquí hay una buena pregunta sobre la gramática de C ++ )

La respuesta corta es "no, el comité no requiere probar sus diseños usando prototipos". Sin embargo, no hay mucha necesidad porque los miembros del comité son expertos en C ++ que entienden todos los detalles a un nivel que la gran mayoría de los programadores no. Recuerde, estas personas son arquitectos de idiomas expertos en teoría del lenguaje y diseño de compiladores.

Dada la participación de los proveedores de compiladores en el proceso, es factible que uno o más de ellos puedan crear un prototipo de una nueva característica, pero nuevamente, no hay un requisito formal para esto ni es algo de lo que he leído en documentos disponibles públicamente Comité C ++.

También tienden a ser muy conservadores, agregando gradualmente nuevas características que tienen una demanda en el mundo real sin especificar grandes cantidades de nuevas características que pueden resultar riesgosas. De hecho, en los últimos años han agregado nuevas características que existían como extensiones propietarias o bibliotecas de código abierto que ya funcionan en el mundo real. Por ejemplo, C ++ 11 y C ++ 14 incorporan partes de Boost , que ya se ha probado en el mundo real en múltiples compiladores y entornos de ejecución. No hay necesidad de probar algo que ya está probado.

Comunidad
fuente
55
ConceptGCC y ConceptClang son dos ejemplos de compiladores (o más bien bifurcaciones de compiladores) que se crearon explícitamente para crear prototipos y adquirir experiencia real con una característica compleja del lenguaje. Los conceptos también son un ejemplo de cómo se diseñan las características completas del lenguaje en C ++: los conceptos han existido desde 1998, primero como una idea informal para hablar sobre las plantillas C ++, luego en 2006 como una característica del lenguaje propuesta por el propio Bjarne, y también implementada en ConceptGCC desde entonces. Ellos pueden ...
Jörg W Mittag
3
... terminan en C ++ 17, lo que significa que habrán madurado durante unos 10 años como implementación y 20 años como idea.
Jörg W Mittag
2
Esto es principalmente falso, creo. Las nuevas características generalmente requieren una implementación primero. La única vez que esto no sucedió, obtuvimos exportación.
isanae
55
El último párrafo es (para decirlo a la ligera) sin sentido. El comité C es muy conservador, pero C ++ agrega todo tipo de cosas nuevas todo el tiempo con poca consideración por el desorden que crea el lenguaje o si realmente resuelve los problemas que la gente quiere resolver.
R ..
1
@R .. No estoy de acuerdo. C ++ 11 era una anomalía, pero incluía muchas cosas que ya existían (ver mi comentario de Boost, por ejemplo). Durante gran parte de la vida de C ++, ha evolucionado muy lentamente, lo cual es una queja importante que muchos desarrolladores tienen sobre el lenguaje.