¿Existe una prueba de cumplimiento para los compiladores de C ++? [cerrado]

21

¿Existe, en algún lugar, una secuencia de comandos, un archivo fuente o cualquier otro que se pueda usar / acceder libremente que pueda medir el cumplimiento de un compilador de C ++ dado?

Por ejemplo, la prueba Acid3 para navegadores: http://acid3.acidtests.org/

Los resultados con los que sueño serían una nota de porcentaje global (o notas múltiples, una para cada estándar, por ejemplo, c ++ 98, c ++ 11, c ++ 14, etc.), y luego pruebas detalladas con "éxito" o "fracaso" para cada uno de ellos.

Antecedentes: tuve una discusión en el trabajo sobre boost y algunos compiladores desafiados. Mi interlocutor habló sobre el impulso como un proyecto académico, porque no funcionará en los principales compiladores de C ++, y respondí que los compiladores con problemas mentales no deberían contar. Ser capaz de medir con código la conformidad real de un compilador ayudaría tanto a evaluar el compilador como a descubrir los "casos de esquina" que deberían evitarse en el código multiplataforma compilado con ellos.

Editar: 2013-06-22

No es una respuesta, pero aparentemente, el comité de C ++ está trabajando en el tema:

SG10, Prueba de características: Clark Nelson (Intel). Investigación sobre si y cómo estandarizar una forma de código portátil para verificar si un producto C ++ en particular implementa una característica todavía, a medida que continuamos extendiendo el estándar.

Fuente: http://isocpp.org/std/the-committee

paercebal
fuente
Hay esto: peren.com/pages/products_set.htm . No intentaré una respuesta, ya que no la he usado y no estoy seguro de su estado en la comunidad C ++.
Yannis
1
Boost funciona en los principales compiladores de C ++. Tal vez no sean versiones antiguas de esos compiladores, y tal vez no en compiladores relativamente oscuros en los que confía su empresa, pero solo mire esa enorme lista de compiladores probados en las notas de la versión. ¡Y esos son solo los que probaron los chicos de Boost! Boost no tiene el sentido académico, y no es necesario evaluar a los compiladores para descartar esa declaración.
44
Casi me caigo de la silla riéndome de esta pregunta ... Es una pregunta muy válida, me interesan las respuestas ..... Es 2013, seguramente algo tan fundamental como nuestras cadenas de herramientas usan TDD, o es un caso de "Haz lo que digo, no lo que hago ......"
mattnz
66
¿Por qué los votos cerrados? Creo que esta es una pregunta muy válida y relevante. La prueba del cumplimiento de las normas es obligatoria para la mayoría de las herramientas utilizadas por la mayoría de los profesionales.
mattnz
1
Creo que este es uno de los mayores errores / fallas recurrentes del comité de C ++. Me sorprende que muchas personas realmente inteligentes sigan haciendo lo mismo una y otra vez.

Respuestas:

5

Una forma de probar el cumplimiento de un compilador de C ++ dado es ejecutar un conjunto de pruebas (grande), es decir, un montón de archivos C ++ que prueban todos los aspectos del lenguaje.

Los conjuntos de prueba bien conocidos son los conjuntos de prueba gcc y llvm. Estos prueban todo tipo de aspectos del compilador, incluyendo obviamente la conformidad. Sin embargo, es difícil evaluar especialmente la conformidad, ya que (según mi leal saber y entender) no se generan informes especiales sobre la conformidad.

En este reino tienes:

  • las pruebas de C-tortura de GCC utilizadas para probar el compilador de gcc
  • el conjunto de pruebas LLVM: una combinación de pruebas dirigidas para el compilador clang y el backend llvm más un conjunto de aplicaciones completas para probar el compilador.
  • la prueba LLVM libcxx (parte del repositorio libcxx) para probar el soporte de C ++ 11.

Existen algunos conjuntos de pruebas extensos que para probar la conformidad C / C ++ disponibles. Por desgracia, todas estas son licencias comerciales del orden de 10k-40k.

  • SuperTest : El más extenso de esta lista. Aproximadamente 3 millones de pruebas dirigidas a la conformidad con C99, C ++, EmbeddedC, DSP-C.
  • Salón de ciruelas . C y C ++, incluida la biblioteca C ++. Incluye conformidad con ANSI C, generador de programas aleatorios, plantillas de prueba y un intérprete de secuencias de comandos para controlar el proceso de prueba general.
  • Perenne . C y C ++.
  • Piedra nula . C solamente.
Martijn Rutten
fuente
4

Lo más parecido que conozco es en el contexto de una versión estándar específica . Del mismo modo, hay publicaciones de blog que contienen contenido similar. Sin embargo, no conozco un cuerpo, prueba o conjunto de pruebas de facto o de jure que rija sobre tales asuntos. Incluso isocpp.org no parece tener recursos de conformidad actualmente. Probablemente, lo más cerca que pueda llegar es probablemente de los gráficos de conformidad específicos de cada proveedor, que en el mejor de los casos es inconsistente.

por ejemplo , Clang , GCC , MSVC , Intel

En realidad, solo hay unos pocos compiladores competitivos (al menos en el espacio x86 / x64; supongo que también es el caso de las plataformas menos populares), pero estoy de acuerdo en que sería muy bueno tener una referencia, especialmente ahora que el estándar es aumentando la velocidad.

Joel
fuente
0

No conozco ninguna prueba de estándares, aunque la siguiente URL es el comité oficial del sitio web de estándares http://www.open-std.org/jtc1/sc22/wg21/ .

Además, muchas cosas que se encuentran en Boost llegan al estándar C ++. Según el Dr. Kenneth Sundberg de la Universidad Estatal de Utah.

Todavía no puedo verificar la credibilidad de la misma, todavía estoy tratando de averiguar si es creíble, pero el Grupo de Google en https://groups.google.com/forum/?fromgroups#!forum/comp.std .c ++ afirma que no existe una prueba oficial.

Travis Pessetto
fuente
Dr. Sundberg? ¿Como en el Dr. No o el Dr. Guttenberg?
ott--
44
@ott No, como en un Ph.D. en informática.
Travis Pessetto