Pour commémorer le lancement public de Stack Overflow, quel est le code le plus court pour provoquer un débordement de pile? Toute langue est la bienvenue.
ETA: Juste pour être clair sur cette question, vu que je suis un utilisateur occasionnel de Scheme: la "récursion" de l'appel final est en fait une itération, et toute solution qui peut être convertie en une solution itérative de manière relativement triviale par un compilateur décent ne le sera pas Être compté. :-P
ETA2: J'ai maintenant sélectionné une «meilleure réponse»; voir ce post pour la justification. Merci à tous ceux qui ont contribué! :-)
la source
"
il charge 79 copies du numéro 32 toutes les deux fois qu'il s'enroule, plutôt que 2 copies du numéro 1.Lisez cette ligne et faites ce qu'elle dit deux fois .
la source
Vous pouvez également essayer ceci en C # .net
la source
Nemerle :
Cela plante le compilateur avec une exception StackOverflowException:
la source
Mon meilleur actuel (en assemblage x86) est:
ce qui donne 3 octets de code objet (
50 EB FD
). Pour le code 16 bits, cela est également possible:ce qui donne également 3 octets (
E8 FD FF
).la source
PIC18
La réponse PIC18 donnée par TK entraîne les instructions suivantes (binaire):
Cependant, CALL seul effectuera un débordement de pile:
PIC18 plus petit, plus rapide
Mais RCALL (appel relatif) est encore plus petit (pas de mémoire globale, donc pas besoin des 2 octets supplémentaires):
Ainsi, le plus petit sur le PIC18 est une seule instruction, 16 bits (deux octets). Cela prendrait 2 cycles d'instructions par boucle. À 4 cycles d'horloge par cycle d'instruction, vous avez 8 cycles d'horloge. Le PIC18 a une pile de 31 niveaux, donc après la 32ème boucle, il débordera de la pile, en 256 cycles d'horloge. À 64 MHz, vous déborderiez la pile en 4 microsecondes et 2 octets .
PIC16F5x (encore plus petit et plus rapide)
Cependant, la série PIC16F5x utilise des instructions 12 bits:
Encore une fois, deux cycles d'instruction par boucle, 4 horloges par instruction donc 8 cycles d'horloge par boucle.
Cependant, le PIC16F5x a une pile à deux niveaux, donc sur la troisième boucle il déborderait, en 24 instructions. À 20 MHz, il déborderait en 1,2 micro seconde et 1,5 octets .
Intel 4004
L' Intel 4004 a une instruction de sous-programme d'appel 8 bits:
Pour les curieux qui correspond à un ascii 'P'. Avec une pile à 3 niveaux qui prend 24 cycles d'horloge pour un total de 32,4 micro secondes et un octet . (Sauf si vous overclockez votre 4004 - allez, vous savez que vous voulez.)
Ce qui est aussi petit que la réponse befunge, mais beaucoup, beaucoup plus rapide que le code befunge exécuté dans les interpréteurs actuels.
la source
C #:
la source
Hoot trop-plein!
la source
Chaque tâche a besoin du bon outil. Découvrez le langage SO Overflow , optimisé pour produire des débordements de pile:
la source
Texas:
Résulte en:
Latex:
Résulte en:
la source
~
est actif, il peut être utilisé à la place de\a
. Et j'ai découvert le code LaTeX complètement par accident. :)Assembleur Z-80 - à l'emplacement de mémoire 0x0000:
un octet - 0xC7 - boucle sans fin de poussée du PC actuel vers la pile et de saut à l'adresse 0x0000.
la source
En anglais:
la source
Un autre exemple PHP:
la source
Que diriez-vous de ce qui suit en BASIC:
(Je n'ai pas d'interprète BASIC, je crains donc c'est une supposition).
la source
GOSUB
, pas unGOTO
. Puisqu'ilRETURN
est de là où il a été appelé, il utilise sûrement une pile?J'ai adoré les tas de réponses de Cody, alors voici ma contribution similaire, en C ++:
Pas une entrée de code de golf en aucun cas, mais quand même, quoi que ce soit pour un débordement de méta-pile! :-P
la source
Voici ma contribution C, pesant 18 caractères:
C'est beaucoup plus difficile à optimiser! :-P
la source
À l'aide du fichier de commandes d'une fenêtre nommé "s.bat":
la source
Javascript
Pour couper quelques caractères de plus et nous faire expulser de plus de boutiques de logiciels, allons-y avec:
la source
Sensationnel:
$ groovy stack.groovy:
la source
Veuillez me dire ce que signifie l'acronyme « GNU ».
la source
En espérant aucune récursion de queue!
la source
C - Ce n'est pas le plus court, mais il est sans récursivité. Ce n'est pas non plus portable: il plante sous Solaris, mais certaines implémentations d'alloca () peuvent renvoyer une erreur ici (ou appeler malloc ()). L'appel à printf () est nécessaire.
la source
perl en 12 caractères:
bash en 10 caractères (l'espace dans la fonction est important):
la source
essayez de mettre plus de 4 galettes sur un seul hamburger. débordement de pile.
la source
Python :
Alternativement:
Et si Python optimisé tail appelle ...:
la source
Je sélectionne la «meilleure réponse» après cet article. Mais tout d'abord, je tiens à remercier quelques contributions très originales:
Tout comme j'aime ce qui précède, le défi consiste à faire du golf codé, et pour être juste envers les répondants, je dois attribuer la «meilleure réponse» au code le plus court, qui est l'entrée Befunge; Je ne pense pas que quiconque puisse battre ça (bien que Konrad ait certainement essayé), alors félicitations Patrick!
Voyant le grand nombre de solutions de débordement de pile par récursivité, je suis surpris que personne n'ait (à l'heure actuelle) évoqué le combinateur Y (voir l'essai de Dick Gabriel, The Why of Y , pour une introduction). J'ai une solution récursive qui utilise le combinateur Y, ainsi que l'approche f (f (x)) d'aku. :-)
la source
En voici un autre intéressant de Scheme:
la source
Java
Version légèrement plus courte de la solution Java.
la source
la source
3 octets:
Mettre à jour
D'après la (ancienne?) Documentation Intel (?) , C'est aussi 3 octets:
la source