Para conmemorar el lanzamiento público de Stack Overflow, ¿cuál es el código más corto para causar un desbordamiento de pila? Cualquier idioma de bienvenida.
ETA: Solo para ser claro en esta pregunta, ya que soy un usuario ocasional de Scheme: la "recursión" de cola es realmente una iteración, y cualquier solución que pueda convertirse en una solución iterativa relativamente trivialmente por un compilador decente no lo hará. ser contados. :-PAGS
ETA2: ahora he seleccionado una "mejor respuesta"; ver esta publicación para justificación. ¡Gracias a todos los que contribuyeron! :-)
fuente
"
carga 79 copias del número 32 cada dos veces que se envuelve, en lugar de 2 copias del número 1.Lea esta línea y haga lo que dice dos veces .
fuente
También puedes probar esto en C # .net
fuente
Nemerle :
Esto bloquea el compilador con una excepción StackOverflowException:
fuente
Mi mejor actual (en ensamblaje x86) es:
que da como resultado 3 bytes de código objeto (
50 EB FD
). Para el código de 16 bits, esto también es posible:que también da como resultado 3 bytes (
E8 FD FF
).fuente
PIC18
La respuesta PIC18 dada por TK da como resultado las siguientes instrucciones (binarias):
Sin embargo, CALL solo realizará un desbordamiento de pila:
PIC18 más pequeño y más rápido
Pero RCALL (llamada relativa) es aún más pequeña (no es memoria global, por lo que no es necesario los 2 bytes adicionales):
Entonces, el más pequeño en el PIC18 es una sola instrucción, 16 bits (dos bytes). Esto tomaría 2 ciclos de instrucción por ciclo. Con 4 ciclos de reloj por ciclo de instrucción, tiene 8 ciclos de reloj. El PIC18 tiene una pila de 31 niveles, por lo que después del ciclo 32 desbordará la pila, en 256 ciclos de reloj. A 64MHz, desbordaría la pila en 4 microsegundos y 2 bytes .
PIC16F5x (incluso más pequeño y más rápido)
Sin embargo, la serie PIC16F5x utiliza instrucciones de 12 bits:
Nuevamente, dos ciclos de instrucción por ciclo, 4 relojes por instrucción, entonces 8 ciclos de reloj por ciclo.
Sin embargo, el PIC16F5x tiene una pila de dos niveles, por lo que en el tercer bucle se desbordaría, en 24 instrucciones. A 20MHz, se desbordaría en 1.2 microsegundos y 1.5 bytes .
Intel 4004
El Intel 4004 tiene una instrucción de subrutina de llamada de 8 bits:
Para los curiosos que corresponde a una ascii 'P'. Con una pila de 3 niveles que toma 24 ciclos de reloj para un total de 32.4 microsegundos y un byte . (A menos que overclockees tu 4004, vamos, sabes que quieres).
Que es tan pequeño como la respuesta inicial, pero mucho, mucho más rápido que el código inicial que se ejecuta en los intérpretes actuales.
fuente
C#:
fuente
¡Desbordamiento de pitido!
fuente
Cada tarea necesita la herramienta adecuada. Conozca el lenguaje SO Overflow , optimizado para producir desbordamientos de pila:
fuente
Texas:
Resultados en:
Látex:
Resultados en:
fuente
~
está activo, se puede usar en lugar de\a
. Y descubrí el código LaTeX completamente por accidente. :)Ensamblador Z-80 - en la ubicación de memoria 0x0000:
un byte - 0xC7 - ciclo sin fin de empujar la PC actual a la pila y saltar a la dirección 0x0000.
fuente
En inglés:
fuente
Otro ejemplo de PHP:
fuente
¿Qué tal lo siguiente en BASIC:
(No tengo un intérprete BÁSICO, me temo que eso es una suposición).
fuente
GOSUB
, no unGOTO
. Ya queRETURN
es de donde fue llamado, ¿seguramente está usando una pila?Me encantaron los montones de respuestas de Cody, así que aquí está mi contribución similar, en C ++:
¡No es una entrada de código de golf de ninguna manera, pero aún así, cualquier cosa para un desbordamiento de meta stack! :-PAGS
fuente
Aquí está mi contribución en C, con un peso de 18 caracteres:
¡Esto es mucho más difícil de optimizar! :-PAGS
fuente
Usando un archivo por lotes de Windows llamado "s.bat":
fuente
Javascript
Para recortar algunos personajes más y sacarnos de más tiendas de software, vamos con:
fuente
Maravilloso:
$ groovy stack.groovy:
fuente
Por favor, dime qué significa el acrónimo " GNU ".
fuente
¡Esperamos que no haya recursión de la cola!
fuente
C - No es el más corto, pero no tiene recurrencia. Tampoco es portátil: se bloquea en Solaris, pero algunas implementaciones alloca () pueden devolver un error aquí (o llamar a malloc ()). La llamada a printf () es necesaria.
fuente
perl en 12 caracteres:
bash en 10 caracteres (el espacio en la función es importante):
fuente
intente poner más de 4 empanadas en una sola hamburguesa. desbordamiento de pila.
fuente
Python :
Alternativamente:
Y si Python optimiza las llamadas de cola ...:
fuente
Estoy seleccionando la "mejor respuesta" después de esta publicación. Pero primero, me gustaría agradecer algunas contribuciones muy originales:
Por mucho que me encante lo anterior, el desafío es hacer golf de código, y para ser justos con los encuestados, tengo que otorgar la "mejor respuesta" al código más corto, que es la entrada de Befunge; No creo que nadie pueda vencer eso (aunque Konrad lo ha intentado), ¡así que felicidades a Patrick!
Al ver la gran cantidad de soluciones de desbordamiento de pila por recursión, me sorprende que nadie (al momento de la redacción actual) haya presentado el combinador Y (ver el ensayo de Dick Gabriel, The Why of Y , para una introducción). Tengo una solución recursiva que utiliza el combinador Y, así como el enfoque f (f (x)) de aku. :-)
fuente
Aquí hay otro interesante de Scheme:
fuente
Java
Versión ligeramente más corta de la solución Java.
fuente
fuente
3 bytes:
Actualizar
De acuerdo con la documentación (¿antigua?) De Intel (?) , Esto también es de 3 bytes:
fuente