Intente escribir un código en su lenguaje y haga que ya no satisfaga nuestros criterios de ser un lenguaje de programación .
Un lenguaje satisface nuestros criterios (versión simplificada para este desafío) de ser un lenguaje de programación si:
- Puede leer la entrada del usuario que representa tuplas de enteros positivos de alguna manera.
- Puede generar al menos dos resultados posibles diferentes según la entrada.
- Puede tomar dos enteros positivos y agregarlos (y el resultado puede afectar la salida).
- Puede tomar un número entero positivo y decidir si es primo (y el resultado puede afectar la salida).
- Para el propósito de este desafío, se ignora cualquier tipo de salida que no sea un método de salida permitido para un desafío normal . Por lo tanto, no importa si el programa también puede reproducir una pieza musical, o publicar a través de HTTP, etc.
- Actualización: también puede elegir uno o algunos de los métodos de salida permitidos e ignorar todos los demás. Pero debe usar la misma definición en todas partes en los siguientes criterios. Y si su programa puede deshabilitar más de un método de salida, eso merece más votos a favor.
Ejemplos como hacer que no pueda salir, o deshabilitar todas las construcciones de bucle para que no pueda hacer una prueba de primalidad y asegurarse de que el usuario no pueda volver a habilitarlas.
Debe dejar un lugar para insertar un nuevo código. Por defecto, está al final de su código. Si consideramos poner el código fuente en ese lugar en su respuesta y ejecutar el código completo como un programa completo, el intérprete de un nuevo idioma, ese idioma no debería satisfacer los criterios.
Pero el código insertado debe ejecutarse de tal manera que un lenguaje que satisfaga los criterios:
- El código insertado debe ser gramaticalmente igual que algo (digamos que es un bloque de código en los siguientes criterios) que generalmente satisfacen los criterios, desde la perspectiva de quien quiera escribir un resaltador de sintaxis. Por lo tanto, no puede estar en una cadena, comentario, etc.
- El código insertado debe ejecutarse realmente, de una manera que se supone que satisface los criterios. Por lo tanto, no puede estar en una función no utilizada o
sizeof
en C, no puede ejecutar solo una parte no funcional en el código, y no puede colocarla después de un bucle infinito, etc. - No puede limitar el número de posibles programas gramaticalmente correctos generados de esta manera. Si ya hay algo así como un límite de longitud en el idioma que está utilizando, no debería satisfacer los criterios, incluso si se elimina este límite.
- No puede modificar o "usar" el contenido de entrada / salida, pero puede evitar que se acceda a ellos.
- Estos criterios generalmente solo se aplican a idiomas sin E / S explícitas:
- Su código debe redirigir la entrada del usuario (que contiene información de longitud arbitraria) al código insertado, si un bloque de código generalmente no puede obtener la entrada del usuario directa / explícitamente en el idioma que está utilizando.
- Su código debe imprimir el valor devuelto del código insertado, si un bloque de código generalmente no puede generar cosas directamente / explícitamente en el idioma que está utilizando.
- En caso de que imprima el valor devuelto y esté escrito en el idioma que está utilizando, el tipo devuelto debería poder tener 2 valores prácticamente posibles diferentes. Por ejemplo, no puede usar el tipo
struct {}
ostruct {private:int x;}
en C ++.
Este es un concurso de popularidad. La respuesta válida más votada (para que nadie haya detectado un error o se hayan solucionado todos los errores) gana.
Aclaraciones
- No debe modificar el código en forma de texto, pero puede cambiar la sintaxis antes de interpretar o compilar el código.
- Puede hacer otras cosas mientras se ejecuta el código. Pero la razón por la que no cumple con los criterios debería estar dentro del código insertado. Puede producirse un error debido a la interferencia de otro hilo, pero no solo ser eliminado por otro hilo.
- Básicamente, todas las especificaciones significan que debería ser gramaticalmente probable que satisfaga los criterios si no se modificaron todas las funciones incorporadas, pero en realidad no lo hacen. Está bien si encuentra soluciones alternativas no gramaticales, como pasar los parámetros al bloque de código correctamente, pero hacer que no puedan usarse de alguna manera.
- Nuevamente, el código insertado debe ejecutarse realmente. El código después de un bucle infinito o bloqueo se considera "no ejecutado realmente", por lo tanto, no es válido . Esas respuestas pueden ser interesantes, pero ya hay otras preguntas de bucle infinito o fallas en este sitio, y puede encontrar una más adecuada para responder. Si no, considere hacer una nueva pregunta. Ejemplos de esas preguntas son:
Tabla de clasificación
var QUESTION_ID=61115/*,OVERRIDE_USER=8478*/;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,/*getComments()*/(more_answers?getAnswers():process())}})}/*function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}*/function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),score:s.score,language:a[1],lang:jQuery('<div>').html(a[1]).text(),link:s.share_link})}),e.sort(function(e,s){var r=e.score,a=s.score;return a-r});var s={},r=1,a=null,n=1;e.forEach(function(e){e.score!=a&&(n=r),a=e.score,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",e.n=n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.score).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text())/*,s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}*/});var t=e/*[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o])*/;t.sort(function(e,s){return (e.lang.toUpperCase()>s.lang.toUpperCase())-(e.lang.toUpperCase()<s.lang.toUpperCase())||(e.lang>s.lang)-(e.lang<s.lang)});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{PLACE}}",o.n).replace("{{LANGUAGE}}",o.language).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.score).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<(?:h\d|(?!.*<h\d>)p)>\s*((?:[^,;(\s]| +[^-,;(\s])+)(?=(?: *(?:[,;(]| -).*?)?\s*<\/(h\d|p)>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;float:left}table{width:250px}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="https://cdn.sstatic.net/Sites/codegolf/all.css?v=7509797c03ea"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Score</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Sorted by Language</h2> <table class="language-list"> <thead> <tr><td></td><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{PLACE}}</td><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
fuente
Respuestas:
Shell de JavaScript
Esto hará que el lenguaje sea completamente inutilizable.
¿No es agradable cómo JavaScript tiene una función tan buena para autodestruirse?
Esto es bastante simple, la
clear
función vacía completamente un objeto.this
se refiere al objeto global que limpia todo, incluidos los constructores y las funciones.Debido a que esto borra todo , hacer cualquier cosa , incluso definir un literal arrojará un error, haciendo que el lenguaje sea completamente inútil: * No se requiere el entorno REPL . Utiliza el motor SpiderMonkey (shell no navegador), el motor JS original.
fuente
clear
función parece ser una adición específica de SpiderMonkey-shell, no una cosa genérica de JavaScript. Ciertamente no aparece en las especificaciones de ES5 § Propiedades de la función del objeto global . Intenté esto connode
y obtuve un "ReferenceError: clear no está definido". En la consola de Chrome y Firefox, laclear
función simplemente borra la consola, independientemente de los argumentos que se pasan. ¿O tal vez la herramienta que utilizó cumplió con una versión de ECMAScript anterior a 5.1?Emmental
Sé que esto no es código golf, pero es la herramienta adecuada para el trabajo, ya sabes ...
El código del usuario se puede insertar después de
!
.Emmental es un interesante esolang que se basa en reescribir el intérprete. Cada símbolo individual (incluidos los incorporados) se puede redefinir como un programa Emmental arbitrario. El lenguaje se basa tanto en esta característica que no proporciona ninguna construcción en bucle. En su lugar, define comandos recursivos que aparecen en sus propias definiciones.
Esta redefinición ocurre a través de
!
, que lee un personaje de la pila, y luego lee una cadena de la pila hasta que encuentra a;
. El carácter se redefine para que signifique el programa representado por esa cadena.Eso quiere decir, que podemos desactivar las funciones de bucle de Emmental mediante la redefinición de
!
sí mismo como el programa vacío. Si bien todos los demás códigos Emmental aún funcionan perfectamente bien, y muchos de los criterios de un lenguaje de programación aún se cumplen, es imposible redefinir más símbolos. Sin esta característica (y por lo tanto, sin poder hacer un bucle), Emmental ya no puede probar si un número es primo.fuente
PHP
Uno puede matar completamente a PHP configurando el límite de memoria en 1.
Morirá por completo.
Prueba esto:
Esto ni siquiera debería arrojar ningún error, ya que no hay suficiente memoria para eso.
Puedes leer más sobre la
memory_limit
directivaSi el anterior no es válido, se pueden usar memorias intermedias de salida:
Esto elimina completamente cualquier salida. Dado que el búfer de salida todavía está abierto, algunas otras cosas que quedan accidentalmente después del código tampoco se mostrarán.
Usando la idea de @fschmengler :
Esto evitará el problema de eliminar el búfer de salida iniciado automáticamente, que se usa para capturar la salida a comprimir.
Esto también evita que el búfer de salida se elimine o se vacíe (se envía al navegador). Para volver a informar eso, se agrega un controlador de salida, que siempre devuelve una cadena vacía.
La ejecución
ob_end_flush(); echo "Hello, world!";
no producirá nada, pero enviaría la salida con un planoob_start();
.¡Gracias a @LucasTrzesniewski por exponer este problema!
fuente
while(ob_get_level()) ob_end_flush();
se usa en marcos para vaciar todos los búferes de salida que pueden haberse dejado abiertos accidentalmente.ob_end_flush(); echo "Hello, world!";
This shouldn't even throw any error, since there isn't enough memory for that.
LOL'ed at that :)Código de máquina x86 en modo real (=> casi cualquier programa de DOS)
es decir
Espero que no estés demasiado apegado a tu mesa de interrupciones.
fuente
cli
, y luego arreglo la tabla de interrupciones, y luego calculo algunos números primos, etc.?cli
(yinp
, youtp
sólo por si acaso), pero no sé si eso se les permitiría por las reglas.clear(this);
, el límite de memoria en PHP, la recursividad límite en Python, el entorno de espacio aislado en Python y muchos otros), no vería esto como un problema.Java
Editar: Las contramedidas están haciendo que este gigante :(
Redirige stdin y stdout a flujos nulos y reemplaza args con una matriz vacía. También utiliza enormes cantidades de trucos de reflexión para asegurarse de que el IO estándar esté realmente oculto. Finalmente, establece un administrador de seguridad para asegurarse de que el IO estándar no se pueda volver a crear y eso asegura que los programas no puedan establecer el código de salida.
fuente
Lua
En Lua,
_ENV
es el entorno en el que se almacenan todas las variables, funciones, tablas, etc. globales. Definirlo como una cadena vacía significa que no puede definir nada nuevo, y todas las funciones y variables se borran. Esto significa que no puede generar nada, recibir entradas o prácticamente hacer nada.fuente
_ENV=5
? Si es así, es un personaje más corto.Lenguaje de programación de Shakespeare
En SPL, el analizador incorporado que se descarga con el programa sigue reglas muy específicas sobre lo que puede suceder en el script. Una de esas reglas es que solo dos personajes pueden estar en el escenario a la vez. Además, hacer que un personaje salga del escenario que nunca estuvo en el escenario lo confundirá. Lo mismo aplica para agregar un personaje al escenario que ya está en el escenario. Cuando el analizador recibe un error, se negará a hacer NADA más; literalmente, debe cerrar completamente el programa y el analizador y luego volver a iniciar todo.
PD: si no tienes idea de cómo funciona este lenguaje, búscalo en Google. Es impresionante.
fuente
Charla
No estoy seguro si esto califica:
Esto elimina todo el entorno de tiempo de ejecución, colgando el motor de objetos. La única forma de solucionar esto es terminar por la fuerza el proceso y reiniciar desde la copia de seguridad.
Para aquellos que no saben, la forma en que funciona [Visual Works] Smalltalk es un poco extraña. Es como un mini-sistema operativo. Cuando inicia Smalltalk, carga una "imagen de memoria" en la RAM y continúa ejecutándose desde donde se quedó. Todo el IDE de Smalltalk está escrito en Smalltalk y es modificable dinámicamente.
En particular,
Smalltalk
es un diccionario que contiene todas las variables globales. Más particularmente, cada vez que declara una nueva clase, se crea una variable global con ese nombre, apuntando alClass
objeto para su nueva clase. Por lo tanto, establecerSmalltalk
enNil
(básicamente nulo) elimina todas las clases en todo el sistema. Incluso los controladores de eventos de la GUI se vuelven tontos.No tengo idea de por qué esta variable es incluso editable. Probablemente porque es una variable global y, por lo tanto, existe como una entrada dentro de sí misma. (¿Le duele la cabeza todavía? ¿Mencioné que cada objeto tiene una clase, y las clases son objetos, por lo que cada clase tiene una clase? La clase de una clase se llama metaclase, pero una metaclase también es un objeto, que por lo tanto tiene una clase...)
Probablemente podría lograr un efecto similar al borrar el diccionario en lugar de reemplazarlo por nulo. De hecho, hay muchas cosas que puedes codificar para eliminar todas las clases en el sistema, dejándote incapaz de hacer nada. Pero dado que el compilador Smalltalk real también es una clase ... cualquier cosa que rompa el lenguaje también rompe un poco el IDE completo, así que ...
fuente
nil
lugar deNil
en Pharo.true become: false
, pero creo que esto no funciona en las versiones más nuevas del lenguaje. Podría matar SmallTalk / V 286 de esta manera.Haskell
Hay un par de posibilidades aquí.
Idea aburrida # 1: Definir
main
no hacer nada. Ahora, no importa qué otro código escriba, nunca se puede ejecutar. (A menos que lo ejecute manualmente desde REPL).Idea aburrida # 2: definir un módulo sin exportaciones públicas. Ahora, no importa qué otro código escriba, nunca se puede ejecutar.
Idea interesante: deshabilitar todas las importaciones.
Ahora puede definir funciones que son visibles y se pueden ejecutar ... pero no pueden hacer nada. Todos los tipos y funciones estándar de Haskell ahora están ocultos. (Con la excepción de algunas cosas realmente profundamente conectadas al lenguaje).
Más particularmente, no puede realizar ninguna E / S de ningún tipo. Tampoco puede hacer aritmética de precisión mecánica. (Dado que
Int
,Double
etc., ahora no están definidos).Sin embargo , aún puede escribir funciones de cálculo lambda que realicen algunos cálculos reales. Simplemente no puede ingresar ni sacar datos de la cosa. Pero, por supuesto, podría escribir otro módulo separado que llame al
Fubar
módulo anterior y haga E / S en su nombre (lo que demuestra que el código se ejecuta y hace cosas).Algunas sutilezas:
La
foo = foo
declaración ficticia es necesaria para evitar que alguien agregue importaciones adicionales. (Las importaciones no pueden aparecer después de las declaraciones).Existen varias extensiones de lenguaje Haskell no estándar que le permitirán salir de esta situación. Pero las extensiones de idioma deben activarse con un pragma compilador en la parte superior del archivo. (O con un cambio de línea de comandos al compilador. ¡Realmente no puedo evitarlo!)
fuente
foobar
, la ortografía que usaste tiene algunas ... connotaciones no deseadas.Posdata
Sí, PostScript es un lenguaje de programación. Además, es un lenguaje de programación donde todas las construcciones de lenguaje son funciones definidas por el sistema, que se pueden redefinir ...
En inglés:
Magic
.systemdict
, agregue la misma clave aMagic
, con una definición vacía ("{}
").Magic
hacia la parte superior de la pila del diccionario.A partir de este momento, cada comando de lenguaje PostScript está definido para no hacer nada. AFAIK, es imposible escapar de esta condición.
(Técnicamente, no estás "destruyendo" las definiciones antiguas, solo las estás sombreando. Si aún pudieras ejecutar
end
, eso saldríaMagic
de la pila del diccionario, eliminaría todas las órdenes y te devolvería la vida. Pero desdeend
en sí también está sombreado ... no hará nada ahora).Tenga en cuenta que todos los comandos aún se ejecutarán ... es solo que ahora están definidos para no hacer nada. No obtendrá ningún tipo de error, es solo que no pasará nada. (Bueno, supongo que el desbordamiento de la pila ocurrirá eventualmente ...)
fuente
Cualquier programa que se ejecute bajo Linux / x86 (-64)
Este programa está escrito en C, pero puede interrumpir la ejecución de cualquier programa que se ejecute en Linux / x86 (-32 o -64). Lo antepone a la invocación de la línea de comandos del programa que desea interrumpir.
Utiliza la API del depurador para evitar que el programa de destino produzca resultados. Específicamente, todas las llamadas del sistema que pueden comunicar algo al mundo fuera del proceso (más obviamente
write
, por supuesto, pero tambiénopen
al crear un archivo, la mayor parte de la API del socket,kill
cuando se aplica a otro proceso, ...) fallará como si no estuvieran implementados._exit
está permitido, pero el código de salida se sobrescribe con un cero.A diferencia de la edición anterior de esta respuesta, muchos programas pueden ejecutarse casi hasta su finalización en estas condiciones; es solo que todo su trabajo se desperdicia. Por ejemplo, si lo hace
./no-syscalls /bin/ls
(suponiendo que GNU coreutilsls
) lee todo el directorio y lo formatea, y luegowrite
fallan todas las llamadas para producir resultados. (Sin embargo, cualquier cosa que necesite abrir un canal de comunicación bidireccional, como todos los clientes X11, fallará en ese momento. Pensé en permitirsocket
pero nosend
, pero parecía demasiado probable que se abrieran las lagunas).Hay varias opciones de línea de comandos para modificar el comportamiento;
Los programas vinculados dinámicamente ni siquiera saldrán del vinculador dinámico en
-e
modo.-S
obviamente abre un gran vacío en la política, pero puede ser entretenido ver que los programas se quejan de que nada funciona, por ejemploTiene que leer la salida del registro con
/usr/include/asm*/unistd.h
abrir en otra ventana, porque esto ya es lo suficientemente largo.Lamentablemente, las interfaces del depurador que esto usa son solo débilmente consistentes en las implementaciones de Unix y son intrínsecamente específicas de la CPU. Sería relativamente sencillo portarlo a otras arquitecturas de CPU (solo agregue las definiciones apropiadas de
SYSCALL_*_REG
), y probablemente sea posibleptrace
portarlo a cualquier Unix que tenga , pero es posible que deba manipular la lista blanca de syscall ampliamente y lidiar con divergencias enptrace
.fuente
-DNO_EXIT
modo es para las personas que sienten lo mismo que usted. No hay salida significativa posible en ese modo.strace
?Texas
No estoy seguro de que esto realmente funcione, pero en teoría esto debería romperse
\
como personaje de escape, dejándote sin forma de arreglarlo. Normalmente, TeX puede leer y escribir archivos, ahora no puede escribir nada que dependa de la lógica. Por lo tanto, el lenguaje ahora está roto como lo define OP.EDITAR: Otros comandos kill tomados de los comentarios (aunque ambos pueden violar la regla del código debe ser ejecutado):
\def\fi{}\iffalse
by smpl crea una rama si no se puede cerrar\catcode13=9%
por iwillnotexist idonotexist crea un comentario interminablefuente
\def\fi{}\iffalse
. No puedo publicar respuestas sobre esto porque requiere al menos 10 repeticiones obtenidas de este sitio, pero esto ya no permitirá la salida también.\fi
su significado original, ¿verdad? Por lo tanto, el lenguaje no se rompe más allá de cualquier reparación.\fi
es una primitiva TeX. Y no, no se puede redefinir nada en este momento,\iffalse
se ha llamado.\catcode13=9%
que rompería el idioma por completo (todo lo que%
se comenta después y las nuevas líneas (ASCII char 13) se ignoran, por lo que el comentario se extiende hasta el infinito), quería publicarlo aquí. Pero ya tienes un comando un poco más largo aquí.Rasguño
Se
when [timer v] > (0)
ejecutará tan pronto como se inicialice el código, que si está en el editor es incluso antes de comenzar el código. Estowhen I receive (join[][])
provocará un error cada vez que se transmita algo, pausando la ejecución del código si tiene la versión para desarrolladores de Flash. Labreak
función creará clones y activará el error de transmisión. Cada clon durará dos segundos y luego se eliminará a sí mismo, ejerciendo presión sobre la pila. Y cada clon responderá alwhen [timer v] > (0)
, ejecutando labreak
subrutina y reiniciando el temporizador, lo que hace que el código del temporizador se ejecute nuevamente. Además, cada clon responderá también a cada error de transmisión, lo que significa que el número de errores por evaluaciónbreak
es el número de clones al cuadrado. ¿Olvidé mencionar que labreak
función tienerun without screen refresh
comprobado, haciendo que el editor se congele, se sacuda y se retrase, así como la memoria de captura y asignación. Y maximizando la CPU.Cualquier código agregado en cualquier lugar con esta ejecución se verá incapaz de crear clones (límite de 300 clones superado), así como de calentar y bloquear la computadora que lo ejecuta. Y agarrando memoria hasta que no haya más para agarrar, dejando que las variables se comporten mal.
Y, después de que haya demasiado retraso para activar el
when [timer v] > (0)
bloqueo, seguirá ejecutándosebreak
.Gracias a @towerofnix por recordarme el
when I receive
problema técnico que encontré hace un tiempo y por darme la idearun without screen refresh
. Si te gustó esto, aquí está el original: https://codegolf.stackexchange.com/a/61357/43394fuente
stop this script
él: Pwhen I receive
falla"?when I receive
bloque de sombreros solo está diseñado para recibir información de la lista desplegable. Eljoin[][]
bloque devuelve un tipo de datos que elwhen I recieve
bloque no está diseñado para aceptar. Cada vez que se transmite algo, todos los bloques de sombreros verifican y evalúan el valor de retorno del bloque, arrojando unincorrect type
error.join
bloque allí.n
" podría usarse para decir que(n-1)
funciona para positivon
<3, pero como esto está basado en algoritmos, un buen algoritmo debería ser lon
suficientemente grande como para poder ignorar ese argumento. No estoy seguro de si una máquina más rápida o más lenta la haría más utilizable. Sin embargo, estoy de acuerdo en que esta solución se puede solucionar. No es un policía y un ladrón , pero bien hecho de todos modos.Mathematica / Wolfram Language
Mathematica es un lenguaje interpretado en el que los nombres de los comandos son símbolos que el programador puede manipular. No puede eliminar operadores integrados, pero puede sobrecargarlos o modificar su función. Lo siguiente codifica el comando "Con", que es necesario para la asignación a variables incluso internamente. Este cambio evita que el núcleo contenga argumentos sin evaluar hasta que se complete la asignación, y mata el lenguaje completamente.
Si este comando se ejecuta en una sesión interactiva o dentro de un bloque de código, Mathematica ni siquiera podrá agregar
1+1
(el mensaje de error resultante es de una página, así que no lo incluiré aquí).fuente
PHP
Me sorprende que realmente funcione, pero al cerrar
STDOUT
ySTDERR
suprimir toda la salida. Para asegurarnos de que no se vuelvan a abrir, abrimos/dev/null
tres veces para reasignar los descriptores de archivo 0, 1 y 2:Más sobre eso: https://stackoverflow.com/questions/937627/how-to-redirect-stdout-to-a-file-in-php
fuente
Lote de DOS (antes de Windows 95, creo)
Emitido sin argumentos, esto desconecta la línea de comando del terminal. Cualquier otro intento de leer entradas o generar salidas no hace nada.
En caso de que quiera saber cómo usar CTTY correctamente:
Un archivo por lotes un poco más potente incluso podría responder al módem y conectar lo que haya marcado a CTTY.
fuente
Lisp común
Espero que no necesites esos paréntesis iniciales.
Esta es una macro de lector que le dice al Lisp Reader que reemplace cada instancia de
(
con una llamada a(lambda (x y) ())
, una función que toma dos argumentos y no devuelve nada. Así, por ejemplo, se leería(foo)
comofoo)
, interpretarfoo
como una variable y luego tirar un error entre paréntesis sin emparejar en el0
.fuente
)
como algo rompedor! De esa manera, habrá menos errores.Rasguño
Aquí hay un ejemplo bastante simple que bloqueará su navegador (y, en teoría, su computadora):
Dejé esto funcionando durante unos veinte segundos, luego perdí 2,65 GB de memoria para Scratch. Solo un momento después y 5 GB se habían ido.
Le recomiendo que tenga un medio para forzar el cierre de Adobe Flash o su navegador web antes de ejecutar esto.
Yo realmente quería hacer una respuesta fría como el
clear(this)
JS un rasguño, pero lamentablemente no tiene ningún maneras de hacer eso. ¡Siéntase libre de actualizar esta publicación (o hacer la suya propia) si SI encuentra otra forma de hacer que Scratch sea inutilizable!fuente
Jue
Con una nueva línea al final
El lenguaje se basa en definir conjuntos de reglas y
::=
denota el final del conjunto de reglas. Es imposible hacer NADA sin definir las reglas que lo hacen, así que, independientemente de lo que ponga después::=
, no puede pasar nada.Respuesta alternativa
(y así sucesivamente para cada carácter en todo Unicode, incluidos los anteriores al
A
carácter y los caracteres no imprimibles). Esto requiere la opción de línea de comandos-r
.fuente
MATLAB
El siguiente código hace que el entorno sea completamente inutilizable 1 :
Esto anula la
builtin
función y laclear
función con nuevos identificadores de funciones anónimas que simplemente regresanfalse
cada vez que intenta llamar a estas funciones. Labuiltin
función asegura que si hay algún funciones personalizadas se escriben en MATLAB que son el mismo nombre que los que están incorporados a MATLAB (cosas comosum
,max
,min
, etc.), que son capaces de llamar a estas ambigüedades en lugar de las funciones sobrecargadas . Del mismo modo,clear
le ofrece la posibilidad de borrar todas las variables que están declaradas actualmente para que pueda comenzar de nuevo. Al eliminar estas capacidades, no hay forma de que pueda usar MATLAB a menos que reinicie el programa.En MATLAB R2015a, también recibo el siguiente mensaje:
El espacio de trabajo son las variables que se declaran actualmente en el entorno para que pueda usarlas para más adelante. Esto deshabilita permanentemente el espacio de trabajo, por lo que las variables que intente crear no se guardarán y, por lo tanto, no se podrá avanzar al ejecutar líneas de código en MATLAB.
1: El crédito va al usuario Dev-iL que descubrió originalmente la idea.
fuente
feval('clear')
para arreglarlo. O:s=str2func('clear'); s()
.///
La única operación en /// se repite sustitución de cadenas, como esto:
/pattern/replacement/
.Este código elimina todos
/
, de esa manera no se puede usar la sustitución repetida de cadenas, por lo que básicamente todo lo que escriba después se imprimirá (excepto/
s).Todavía puedes usar
\
s, pero eso no te ayudará mucho.fuente
Befunge-96
El código del usuario puede seguir a cualquier parte después de esta secuencia, siempre que estos sean los primeros tres caracteres de la fuente.
El
'
comando (modo de cadena de un disparo) empuja el valor ASCII de la~
pila a la pila (es decir, 126), y elh
comando establece lo que se conoce como el Delta Holístico con ese valor. Para aquellos que no están familiarizados con Befunge-96, el Delta Holístico es un desplazamiento que se agrega al valor de cada byte de comando que encuentra el intérprete.Una vez que el delta se establece en 126, el único comando válido que se puede generar es
~
(entrada de caracteres), a través de un byte nulo en la fuente. Cualquier otra cosa que no sea un byte nulo se traduciría en un valor mayor que 126, y ninguno de esos valores serían comandos válidos de Befunge.Creo que es seguro decir que esto no permitiría calificar como lenguaje de programación.
fuente
Abucheo
Y luego, en otro lugar del proyecto,
Una macro simple con un nombre que suena inofensivo, pero un efecto increíblemente frustrante. El compilador de Boo utiliza una canalización de varios pasos que comienza con el análisis de la fuente en un AST y termina con la generación de código. (Generalmente. Se puede reconfigurar para varias aplicaciones). Cada paso intermedio realiza varias operaciones en el AST.
A mitad de camino está la etapa de expansión de macros, en la que las macros se ejecutan en el contexto del compilador. ¿Recuerdas el bit en el último párrafo, acerca de que la tubería es reconfigurable? Si, durante la expansión de macro, invoca una macro que borra la tubería, no se mostrará ningún error al usuario, pero todos los pasos posteriores a la expansión de macro (incluida la generación de código) ya no están allí. Así que terminas con algo que parece una compilación exitosa, no se muestran mensajes de error, ¡pero por alguna razón no se produce ningún binario! Garantizado para conducir incluso a los mejores solucionadores de problemas por el muro, si oculta bien la macro y la invocación.
fuente
NGN / APL
NGN / APL permite redefinir primitivas, por lo que redefinir (
←
) todas las funciones primitivas para⊢
("pasar a través": ambas⊢3
y2⊢3
da3
) hace que el lenguaje sea completamente inútil:Pruébalo aquí
fuente
Ruby (29 caracteres)
Como 'enviar' se usa internamente cada vez que se llama a un método dentro de Ruby, y dado que todos los objetos heredan de la clase Object. Esto debería detener cualquier método que se ejecute.
Dato curioso: esto es perfectamente sólido en teoría. Pero parece, por alguna razón, no obstaculizar el lenguaje Ruby. No tengo idea de por qué es posible ejecutar este código y luego seguir usando un entorno abierto de Ruby.
fuente
Tcl
Esto elimina todas las palabras clave del idioma excepto
if
yrename
.El código anterior haría que cualquier código nuevo produjera un error. Por lo tanto, es discutible si el nuevo código insertado realmente se "ejecuta". A continuación se muestra una versión que ejecuta un nuevo código pero no hace nada porque cambia todas las palabras clave (excepto
if
yproc
) a una no operación:En lugar de eliminar palabras clave, este código las reemplaza con una función que no hace nada.
(Nota: estoy usando "palabras clave" muy libremente aquí porque Tcl no tiene palabras clave, solo funciones)
fuente
if
yrename
después del ciclo. En la segunda versión, también debe hacerproc
una excepción.proc
aparece en la lista anteriorputs
. Técnicamente, el código también debería funcionar sin ellos,rename
pero los comandos integrados parecen estar protegidos de lo contrario. No estoy seguro de lo que está sucediendo, pero el código se prueba y funciona como se anuncia.rename
. Fue un brainfart de mi parte, olvidé excluirloproc
.if
porque poder hacerloif
solo es bastante inútil si quieres generar resultados.Hoon
Hoon es un extraño. Es bastante diferente a otros lenguajes de programación, no solo en sintaxis sino también en semántica. Sin embargo, a diferencia de los idiomas como Hexagony, no fue hecho para ser esotérico a propósito.
Hoon compila a Nock , una máquina virtual basada en un combinador mínimo. Nock es estúpido: la especificación se puede comprimir a 340 bytes. La única operación matemática está aumentando. Todo es un sustantivo: un átomo (bignum) o una celda (par de sustantivos), con todo el modelo de memoria dispuesto en un árbol binario acíclico inmutable. El único resultado es el sustantivo al que se reduce su expresión.
Debido al extraño objetivo de compilación, Hoon también es extraño: es completamente puro. Hoon compila una expresión de Nock que se evalúa en un "contexto". Todo el núcleo y stdlib, junto con todas las variables, se pasan implícitamente al programa por el contexto.
Para hacer que Hoon sea inutilizable solo usamos
=<
, que es "evaluar a en el contexto de b". Siempre estamos evaluando~
, que es cero. No importa lo queb
haga, no puede cambiar el valor al que se reduce, y dado que no puede tener efectos secundarios, no puede hacer entrada o salida.Nota al margen: como en realidad no se puede solicitar la entrada de Hoon (¡pureza!), Según las reglas, en realidad no es un lenguaje de programación. La entrada es a través de argumentos de función, la salida a través de valores de retorno (o
~&
, que es más una función de depuración de printf y es transparente para el programa).Para que un programa obtenga entrada en Urbit, en realidad escribe un programa que devuelve una función que acepta entrada, y el shell pregunta en su nombre y pasa a la devolución de llamada.
fuente
Taxi, 2354 bytes.
Este pequeño programa simplemente pasa el taxi en un gran viaje a través de Townsburg, quedando sin gasolina. Cualquier código que ejecute después de esto generará un error rápidamente
error: out of gas
. E incluso si pudieras llegar a una estación de servicio, lo cual no creo que sea posible, no podrías obtener gasolina, ya que no se ha recogido dinero, ya que no hay pasajeros.fuente
JavaScript en el navegador
Bueno, al menos en IE11.
Inhabilita la escritura en el documento, la escritura en la variable global y el regreso de la función.
¡Comenta si me he perdido un método de salida!
fuente
window.addEventListener('error',function(){});
document
aún debe ser accesible desde el ámbito exterior en el código introducido, y que no deben recibir sustituido hasta después del código introducido ha terminado de ejecutarse.Python 2, increíblemente grande
Esta cantidad increíblemente grande de código es una reactivación del
rexec
módulo antiguo (abandonado en Python 2.3) con un montón de módulos nuevos agregados a la lista "ok" y un montón de debilidades corregidas (incluido elobject.__subclasses__()
método que ha hecho al menos otras dos python respuestas no válidas).Gran parte de este código (el
__init__
método de laRExec
clase y toda laModuleImporter
clase) se copia de la biblioteca estándar de Python con pequeñas modificaciones.fuente
8064 bytes
por cierto