Créez un programme C court qui prend un temps absurde à compiler avec gcc. Les entrées seront notées en chronométrant la compilation puis en soustrayant le temps de compilation du programme de référence.
Règles
- Toute fonctionnalité du langage C ou extension gcc
- gcc 4.2.1
code-challenge
c
charliehorse55
la source
la source
Réponses:
la source
main(){char*z=j;}
pour en faire un programme c valide./Zm
le corrigeraisLes deux la réponse de Charlie et moi plus tôt un travail sur le principe de laisser l'écriture pré-processeur a beaucoup de code, mais ils exercent la plupart du temps lui - même pré-processeur, le lexer (bonne idée que cette étape a toujours été lent) et l'analyseur. Le mien essaie également de travailler les étapes d'optimisation et de génération de code, mais il n'y a clairement pas grand-chose là-bas.
En pensant au fonctionnement d'un compilateur c typique, j'ai réalisé que nous ne donnions rien au code lié à la table des symboles. Cette entrée est une tentative pour y remédier. Il est censé rappeler l'orientation d'objet de base dans l'implémentation c, mais ne fait rien d'intéressant: utilise la technique d'expansion du pré-processeur pour déclarer et initialise trivialement (et incorrectement) un tas d'objets. Objet qui utilise des types compliqués, à de nombreux niveaux de portée, se surveillant mutuellement à divers suppressions. Cela devrait donner à la table des symboles un vrai travail.
Le temps de compilation sur ma machine dépasse 4 secondes avec
-O3
et plus de 1 seconde sans optimisation.Évidemment, la prochaine étape serait de terminer l'implémentation OO pour une classe BCD et de refaire les calculs pi en l'utilisant pour que les deux effets fonctionnent dur.
la source
Voici un riff du thème exponentiel-préprocesseur-expansion qui fait quelque chose de peu intéressant: calcule deux approximations de pi par des méthodes de série et compare avec la valeur dans
math.h
et l'incantation habituelle.Non golfé.
Suppose que vous utilisez
gcc
et que vousglibc
pouvez ou non travailler avec d'autres arrangements. Il faut environ 1,0 à 1,1 secondes de temps processeur (évalué avectime (1)
) pour compiler avec-03
1 sur mon MacBook Intel Core 2 Duo 2,4 GHz. Une compilation par défaut prend environ 0,4 seconde de temps processeur.Hélas, je ne peux pas gcc pour évaluer soit
pow
outgamma
au moment du compilateur, ce qui pourrait vraiment aider.Lorsque vous l'exécutez, la sortie est:
ce qui montre à quel point la série naïve converge lentement.
1 Pour obtenir autant de repliement constant et d'élimination de la sous-expression que possible.
la source