Escriba un programa que arroje un error StackOverflow o el equivalente en el idioma utilizado. Por ejemplo, en Java , el programa debería lanzar java.lang.StackOverflowError
.
No está permitido definir una función que se llame a sí misma o una nueva clase (excepto la que contiene main
en Java). Debe usar las clases del lenguaje de programación seleccionado.
Y no debe arrojar el error explícitamente.
def s{def t=s;t}
?Respuestas:
Befunge, 1
No sé Befunge, pero ...
del código de desbordamiento de pila golf
fuente
@
final para el programa.Python (2.7.3), 35 caracteres
Esta operación en sí tiene éxito, pero tanto el script como el interactivo se lanzarán inmediatamente
RuntimeError: 'maximum recursion depth exceeded'
como consecuencia.Inspirado por la respuesta de elssar.
fuente
Coq
70000
es solo azúcar sintáctico paraS (S ( ... (S O) ...))
70000S
's. Creo que es el verificador de tipos lo que causa el desbordamiento de la pila.Aquí hay una advertencia que se imprime antes de ejecutar el comando:
fuente
Java - 35
fuente
public static void main
ahí dentro. ¿O simplemente no entiendo Java?Javascript 24 caracteres
Respuesta dependiente del navegador (debe tener acceso a
apply
):eval
fue el nombre de función global más corto que pude encontrar (¿alguien sabe de uno que sea más corto?)apply
nos permite convertir una matriz en parámetros de función, siendo el primer parámetro el contexto de la función (this
)Array(999999)
creará una matriz con la longitud indicada. No estoy seguro de cuál es el número máximo de argumentos, pero es menor que esto y más de99999
IE9:
Chrome 24:
FireFox 18
Nota : Debido a la naturaleza de un solo subproceso de javascript, los bucles infinitos terminan bloqueando la interfaz de usuario y nunca lanzan una excepción.
Ninguno de estos califica.
Actualización : esto elimina tres caracteres:
fuente
eval
es el más corto.eval.apply(0,Array(1e6))
ahorra 3 caracteres, incluso puedes ir9e9
sin costoapply
es una característica estándar de ECMAScript. No hay nada que dependa del navegador. A menos que esté hablando de navegadores muy antiguos, pero deapply
todos modos esto no funcionaría en el hipotético Netscape 2 , porque laArray
clase no existe en Netscape 2.eval(...Array(9e9))
dir.apply(0,Array(1e7));
Python 2.7 (12 caracteres)
da como resultado un «s_push: desbordamiento de la pila del analizador»
fuente
SyntaxError: unexpected EOF while parsing
exec('{'*101)
I getMemoryError
exec
es una declaración, por lo que puede usarexec'{'*999
(99 no parece ser suficiente)Mathematica, 4 caracteres
fuente
Clojure, 12 caracteres
Ejecutando en la réplica:
fuente
(\x.xx)(\x.xx)
, pero no sé lo suficientemente bien como para decir con certeza si esto es lo que está sucediendo. Tampoco veo por qué la expresión mencionada daría como resultado un desbordamiento de la pila, ¿entonces tal vez estás haciendo algún truco con el combinador Y? Esta respuesta me interesa y una explicación sería buena.Java - 113 caracteres
Creo que esto se mantiene dentro del espíritu de la regla "sin métodos de auto-llamada". No lo hace explícitamente, e incluso pasa por una construcción de lenguaje Java.
Versión condensada:
fuente
""+this
es en realidad""+this.toString()
, así que el método se llama a sí mismo.StringBuilder
objeto allí.toString
probablemente será llamado desde adentro.toString()
método termina siendopublic java.lang.String toString() { return this.toString(); }
C, 19 bytes
fuente
main.c:1:16: error: size of array 'i' is negative
en gcc 4.8.1. La versión sin firmarmain(){int i[~0U];}
funciona.sizeof(i)
es de 16 GB. ¿El uso de un sufijoul
oull
hace alguna diferencia? Algunos sistemas sobre-confirman la memoria y solo se bloquean si se escribe en la memoria.GolfScript (8 caracteres)
Resultado:
Básicamente, esto crea una estructura de datos muy anidada y luego desborda la pila al intentar convertirla en una cadena.
fuente
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[""]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]]]]]]]]]]]] (and so on, output too long for comments)
333
y se romperá.333
fue el valor más pequeño que se rompió para mí, pero si tiene una versión diferente de Ruby (o tal vez la misma versión en un sistema operativo diferente, por lo que sé), podría manejar una cantidad diferente de marcos de pila antes de desbordarse.6.?
aún funciona sin agregar caracteres.Ensamblaje x86, sintaxis NASM, 7 bytes
"Pëý" es 50 EB FD en hexadecimal, y
en montaje x86.
fuente
Rubí, 12
Da
Presumiblemente depende del sistema, pero puede agregar órdenes de magnitud subiendo el último dígito (no recomendado).
Editar para explicación: de manera similar a algunos otros ejemplos, esto crea una cadena de
[][][]
... repetida 9000 veces, luego la evalúa: el extremo derecho[]
se analiza como una llamada de función al resto, y así sucesivamente. Si realmente llegara al principio, arrojaría un ArgumentError porque[]
es un objeto con un[]
método que requiere un argumento, pero mi máquina arroja un error un poco antes de que la pila supere los nueve mil.fuente
ruby
1.9.2 arroja "ArgumentError: número incorrecto de argumentos (0 para 1..2)".ruby
1.8.7. Allí el código publicado funciona como se describe.def f;f;end;f
Rebol (11 caracteres)
Rendimientos:
Aunque Rebol tiene funciones, cierres y objetos ... esto no define ninguno de esos. Define una estructura de datos, que en el paradigma de código como datos puede tratarse como código usando DO.
Podemos investigar la cuestión de "qué es S" con el REPL:
DO nunca convierte esto en una función, invoca al evaluador en el entorno actual de la estructura.
fuente
C, 35 caracteres
fuente
alloca(1)
se traduce básicamente parasub $1, %esp
que no se toque la pila.Lisp común, 7 caracteres
fuente
#1=(#1#)
para la terminal y(print #1=(#1#))
, pero su solución es mucho mejorPython - 11 caracteres
fuente
Calculadora Casio, 11 pulsaciones de teclas
Es bastante difícil contar bytes / tokens en este "idioma": he dado la cantidad de pulsaciones de teclas requeridas, excluyendo Shift, Alpha (la segunda tecla de mayúsculas) y
=
al final, esto ciertamente cabe en 1 byte por pulsación de tecla.Probado en el modelo fx-85GT PLUS , que es una calculadora científica estándar, no gráfica, "no programable". Otros modelos funcionarán.
Solo apila 11 raíces cúbicas:
3√ 3√ 3√ 3√
3√ 3√ 3√ 3√
3√ 3√ 3√
Ni siquiera da un error de sintaxis sobre el número que falta debajo de la raíz cuadrada.
Esto no parece funcionar con raíces cuadradas.
Alternativamente, repita cos(31 veces.
Salida
Creo que esto califica como un desbordamiento de pila. La pila parece ser pequeña ...
fuente
(((((((((((((((((((((((((
FORTH, 13 bytes
desborda la pila de valores
fuente
: X X ; X
(9) debe desbordar la pila de devolución:
...;
definición de palabras. Eso agrega al menos 6 caracteres, más al menos 2 más para que esto se ejecute como un programa. Usted puede ser capaz de hacerlo más corto, pero aquí está un ejemplo:: F BEGIN 1 AGAIN ; F
. Sugiero esto porque la pregunta es: "Escribe un programa". De todos modos, ¡te di un voto a favor para Forth, independientemente del recuento de char! :-)Postdata, 7
P.ej.
fuente
Haskell (GHC, sin optimización), 25
sum es vago en el total. Esto acumula un montón de thunks, luego intenta evaluarlos todos al final, lo que resulta en un desbordamiento de la pila.
fuente
LaTeX: 8 caracteres
Este es el mismo código utilizado en esta respuesta . Esencialmente, la
\end
macro se expande repetidamente, lo que resulta en un desbordamiento de pila:TeX capacity exceeded, sorry [input stack size=5000]
. Una explicación más detallada se puede encontrar aquí .fuente
PHP 5.4, 33 caracteres
Esto provoca un desbordamiento de la pila cuando los objetos stdClass anidados se destruyen automáticamente:
fuente
Q / k (16 caracteres)
No estoy seguro si esto está en el espíritu del desafío, pero no creo que rompa las reglas:
fuente
Un grupo del mismo estilo:
Python, 30
Javascript, 38
Lua, 44
fuente
x=lambda y:y(y);x(x)
es más corto (20 caracteres). Esta función no es recursiva. x llama a cualquier función que se le pase como argumento.->x{x[x]}[->y{y[y]}]
#@#&[#@#&]
C #:
106865846322832 : Getters puede SO su máquina fácil en C #:
fuente
public int a {get{return a;}}
int a { get { return a; } }
INTERCAL, 12 bytes
Explicación:
NEXT
es la versión de INTERCAL de una llamada de subrutina (o, al menos, la más cercana que puede obtener). Empuja la posición actual en laNEXT
pila y salta a la etiqueta dada.Sin embargo, si la
NEXT
longitud de la pila excede 80, obtienes lo que es más o menos la versión INTERCAL de un desbordamiento de pila:Pruébalo en Ideone. .
fuente
Mornington Crescent,
139133fuente
Conjunto X86 (AT&T), 33 caracteres
Tenga en cuenta que aunque estoy usando la etiqueta
main
como un objetivo de salto, esta no es una función recursiva.fuente
dd 0fdeb60
10 caracteres!Python (17):
fuente
KeyError: 'unknown symbol table entry'