Crie um programa C curto que demore absurdamente para compilar com o gcc. As entradas serão pontuadas cronometrando a compilação e subtraindo o tempo de compilação do programa de referência.
Regras
- Qualquer recurso de idioma C ou extensão gcc
- gcc 4.2.1
code-challenge
c
charliehorse55
fonte
fonte
Respostas:
fonte
main(){char*z=j;}
tornar esse programa c válido./Zm
iria consertá-loTanto a resposta de Charlie quanto a anterior trabalham com o princípio de deixar o pré-processador escrever muito código, mas exercitam principalmente o próprio pré-processador, o lexer (boa ideia, como essa etapa é tradicionalmente lenta) e o analisador. A mina também tenta trabalhar as etapas de otimização e geração de código, mas claramente não está ganhando muito por lá.
Pensando em como um compilador c típico funciona, percebi que não estávamos dando ao código relacionado à tabela de símbolos nada para fazer. Esta entrada é uma tentativa de remediar isso. Supõe-se que seja uma reminiscência da orientação básica a objetos na implementação c, mas não faz nada de interessante: apenas a técnica de expansão pré-processador declara e inicializa (e incorretamente) trivialmente (e incorretamente) vários objetos. Objeto que usa tipos complicados, em vários níveis de escopo, sombreando um ao outro em várias remoções. Daria à tabela de símbolos um trabalho real.
O tempo de compilação na minha máquina é superior a 4 segundos
-O3
e mais de 1 segundo sem otimização.Obviamente, o próximo passo seria finalizar a implementação OO para uma classe BCD e refazer os cálculos de pi usando-a, para que os dois efeitos sejam difíceis de executar.
fonte
Aqui está um riff do tema exponencial-pré-processador-expansão, que faz algo minimamente interessante: calcula duas aproximações ao pi pelos métodos de série e compara-se com o valor
math.h
e o encantamento usual.Ungolfed.
Supõe que você está usando
gcc
eglibc
pode ou não trabalhar com outros arranjos. Demora cerca de 1,0 a 1,1 segundos de tempo do processador (avaliado comtime (1)
) para compilar com-03
1 no meu MacBook Intel Core 2 Duo de 2,4 GHz. Uma compilação padrão leva cerca de 0,4 segundos de tempo do processador.Infelizmente, não consigo fazer com que o gcc avalie um
pow
ou outrotgamma
no momento do compilador, o que realmente ajudaria.Quando você o executa, a saída é:
que mostra quão lentamente a série ingênua converge.
1 Para obter o máximo possível de eliminação constante de dobras e subexpressões.
fonte