Cree un programa C corto que tome un tiempo absurdamente largo para compilar con gcc. Las entradas se puntuarán cronometrando la compilación y luego restando el tiempo de compilación del programa de referencia.
Reglas
- Cualquier característica del lenguaje C o extensión gcc
- gcc 4.2.1
code-challenge
c
charliehorse55
fuente
fuente
Respuestas:
fuente
main(){char*z=j;}
hacer de este un programa c válido./Zm
lo arreglaríaTanto la respuesta de Charlie como la anterior funcionan sobre el principio de permitir que el preprocesador escriba mucho código, pero en su mayoría ejercen el preprocesador en sí, el lexer (buena idea, ya que este paso ha sido tradicionalmente lento) y el analizador. El mío también intenta trabajar los pasos de optimización y generación de código, pero claramente no está ganando mucho allí.
Pensando en cómo funciona un compilador c típico, me di cuenta de que no le estábamos dando nada al código relacionado con la tabla de símbolos. Esta entrada es un intento de remediar eso. Se supone que recuerda a la orientación básica de objetos en la implementación de c, pero no hace nada interesante: justifica la técnica de expansión previa al procesador para declarar e inicializar trivialmente (e incorrectamente) un grupo de objetos. Objeto que usa tipos complicados, en muchos niveles de alcance, sombreándose entre sí en varias eliminaciones. Debería darle a la tabla de símbolos un verdadero trabajo.
El tiempo de compilación en mi máquina es superior a 4 segundos con
-O3
y más de 1 segundo sin optimización.Obviamente, el siguiente paso sería terminar la implementación de OO para las clases BCD y volver a hacer los cálculos pi utilizándolo para que los dos efectos funcionen con fuerza.
fuente
Aquí hay un riff del tema de expansión de preprocesador exponencial que hace algo mínimamente interesante: calcula dos aproximaciones a pi por métodos en serie y se compara con el valor
math.h
y el encantamiento habitual.Sin golf.
Asume que está usando
gcc
yglibc
puede o no funcionar con otros arreglos. Toma aproximadamente 1.0-1.1 segundos de tiempo de procesador (evaluado contime (1)
) para compilar con-03
1 en mi MacBook Intel Core 2 Duo de 2.4 GHz. Una compilación predeterminada tarda aproximadamente 0,4 segundos de tiempo de procesador.Por desgracia, no puedo obtener gcc para evaluar, ya sea
pow
otgamma
en el momento del compilador, el cual sería de gran ayuda.Cuando lo ejecutas, la salida es:
que muestra cuán lentamente converge la serie ingenua.
1 Para obtener la mayor eliminación constante de plegado y subexpresión posible.
fuente