Попробуйте написать какой-нибудь код на вашем языке и сделать так, чтобы он больше не отвечал нашим критериям быть языком программирования .
Язык удовлетворяет нашим критериям (упрощенная версия для этой задачи) быть языком программирования, если:
- Он может читать пользовательский ввод, представляющий наборы натуральных чисел в некотором роде.
- Он может выводить как минимум два разных возможных результата в зависимости от ввода.
- Он может взять два положительных целых числа и добавить их (и результат может повлиять на вывод).
- Он может взять положительное целое число и решить, является ли оно простым (и результат может повлиять на результат).
- Для этой задачи любой вид вывода, который не является допустимым методом вывода для обычного вызова , игнорируется. Таким образом, не имеет значения, может ли программа воспроизводить музыкальные произведения или отправлять сообщения через HTTP и т. Д.
- Обновление: вы также можете выбрать один или несколько разрешенных методов вывода и игнорировать все остальные. Но вы должны использовать одно и то же определение везде в следующих критериях. И если ваша программа может отключить более одного метода вывода - это стоит больше голосов.
Примеры, такие как отключение вывода или отключение всех конструкций цикла, чтобы он не смог выполнить тест на простоту, и проверка того, что пользователь не сможет их повторно включить.
Вы должны оставить место для вставки нового кода. По умолчанию это в конце вашего кода. Если мы рассмотрим возможность добавления исходного кода в это место в вашем ответе и запуска полного кода в качестве полной программы, переводчика нового языка, этот язык не должен удовлетворять критериям.
Но вставленный код должен быть выполнен таким образом, как язык, удовлетворяющий критериям:
- Вставленный код должен быть грамматически таким же, как что-то (скажем, это кодовый блок в следующих критериях), который обычно удовлетворяет критериям с точки зрения того, кто хочет написать подсветку синтаксиса. Так что это не может быть в строке, комментарии и т. Д.
- Вставленный код должен быть фактически выполнен таким образом, чтобы он удовлетворял критериям. Таким образом, это не может быть в неиспользуемой функции или
sizeof
в C, вы не можете просто выполнить только нефункциональную часть в коде, и вы не можете поместить ее после бесконечного цикла и т. Д. - Вы не можете ограничить количество возможных грамматически правильных программ, сгенерированных таким образом. Если в используемом языке уже есть что-то вроде ограничения длины, оно не должно удовлетворять критериям, даже если это ограничение будет снято.
- Вы не можете изменять или «использовать» содержимое ввода / вывода, но вы можете предотвратить доступ к ним.
- Эти критерии обычно применяются только к языкам без явного ввода-вывода:
- Ваш код должен перенаправить пользовательский ввод (который содержит информацию произвольной длины) на вставленный код, если блок кода обычно не может получить пользовательский ввод прямо / явно на языке, который вы используете.
- Ваш код должен напечатать возвращенное значение вставленного кода, если блок кода обычно не может выводить вещи прямо / явно на языке, который вы используете.
- Если вы печатаете возвращаемое значение, и оно набрано на языке, который вы используете, возвращаемый тип должен иметь 2 разных практически возможных значения. Например, вы не можете использовать тип
struct {}
илиstruct {private:int x;}
в C ++.
Это популярность-конкурс. Наибольшее количество голосов правильного ответа (так что никто не заметил ошибку или все ошибки исправляются) выигрывает.
Разъяснения
- Вы не должны изменять код в текстовой форме, но можете изменить синтаксис, прежде чем код будет интерпретирован или скомпилирован.
- Вы можете делать другие вещи во время работы кода. Но причина, по которой он не удовлетворяет критериям, должна быть в самом вставленном коде. Это может привести к ошибке из-за вмешательства другого потока, но не может быть просто уничтожено другим потоком.
- Все спецификации в основном означают, что оно должно быть грамматически вероятно удовлетворяющим критериям, если все встроенные модули не были изменены, но на самом деле не изменились . Это хорошо, если вы найдете какие-либо грамматические обходные пути, например, правильно передали параметры в блок кода, но не можете их использовать каким-либо образом.
- Опять же, вставленный код должен быть действительно выполнен. Код после бесконечного цикла или сбоя считается «фактически не выполненным», поэтому недействительным . Эти ответы могут быть интересными, но на этом сайте уже есть некоторые другие вопросы с бесконечным циклом или сбои, и вы можете найти более подходящий для ответа. Если нет, подумайте над тем, чтобы задать новый вопрос. Примеры этих вопросов:
Leaderboard
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>
источник
Ответы:
JavaScript Shell
Это сделает язык совершенно непригодным для использования.
Разве не хорошо, что в JavaScript есть такая замечательная функция, чтобы уничтожать себя?
Это довольно просто,
clear
функция полностью очищает объект.this
относится к глобальному объекту, очищающему все, включая конструкторы и функции.Поскольку это все очищает, все что угодно , даже определение литерала вызовет ошибку, что сделает язык совершенно бесполезным: * среда REPL не требуется. Использует движок SpiderMonkey (оболочка, а не браузер), оригинальный движок JS.
источник
clear
функция, кажется, является специфическим для оболочки SpiderMonkey дополнением, а не универсальной JavaScript-функцией. Это, конечно, не появляется в спецификации ES5 § Свойства функции глобального объекта . Я попытался это сnode
и получил «ReferenceError: clear не определен». В консоли Chrome и Firefoxclear
функция просто очищает консоль, независимо от того, какие аргументы ей переданы. Или, возможно, инструмент, который вы использовали, соответствовал версии ECMAScript старше 5.1?Эмменталь
Я знаю, что это не код гольф, но подходящий инструмент для работы, вы знаете ...
Код пользователя можно вставить после
!
.Emmental - интересный esolang, основанный на переписывании переводчика. Каждый отдельный символ (включая встроенные) может быть переопределен как произвольная программа Emmental. Язык настолько полагается на эту функцию, что не предоставляет циклических конструкций. Вместо этого вы определяете рекурсивные команды, которые появляются в их собственных определениях.
Это переопределение происходит через
!
, который читает символ из стека, а затем читает строку из стека, пока не встретит a;
. Затем символ переопределяется для обозначения программы, представленной этой строкой.Это означает, что мы можем отключить циклические функции Emmental, переопределив
!
себя как пустую программу. В то время как весь другой код Emmental все еще работает отлично, и многие критерии языка программирования все еще выполняются, невозможно переопределить другие символы. Без этой функции (и, следовательно, без возможности зацикливания) Эмменталь больше не может проверять, является ли число простым числом.источник
PHP
Можно полностью убить PHP, установив ограничение памяти на 1.
Это полностью умрет.
Попробуй это:
Это даже не должно выдавать ошибку, так как для этого недостаточно памяти.
Вы можете прочитать больше о
memory_limit
директивеЕсли предыдущий недействителен, можно использовать выходные буферы:
Это полностью удаляет любой вывод. Поскольку выходной буфер все еще открыт, некоторые другие вещи, случайно оставленные после кода, также не будут отображаться.
Используя идею @fschmengler :
Это позволит избежать проблемы удаления автоматически запускаемого буфера вывода, используемого для захвата вывода, подлежащего сжатию.
Это также предотвращает удаление или очистку буфера вывода (отправка в браузер). Для повторного информирования добавлен обработчик вывода, который всегда возвращает пустую строку.
Запуск
ob_end_flush(); echo "Hello, world!";
не даст ничего, но отправит вывод с простымob_start();
.Спасибо @LucasTrzesniewski за разоблачение этой проблемы!
источник
while(ob_get_level()) ob_end_flush();
используется в средах для очистки всех выходных буферов, которые могли остаться случайно открытыми.ob_end_flush(); echo "Hello, world!";
This shouldn't even throw any error, since there isn't enough memory for that.
LOL'ed в этом :)Машинный код x86 в реальном режиме (=> почти любая программа для DOS)
т.е.
Я надеюсь, что вы не были слишком привязаны к вашему столу прерываний.
источник
cli
, а затем я исправляю таблицу прерываний и продолжаю вычислять некоторые простые числа и т. Д.?cli
(inp
иoutp
только для хорошей меры), но я не знаю, будет ли это разрешено по правилам.clear(this);
, ограничение памяти в PHP, рекурсия ограничение в Python, среда для песочницы в Python и многие другие), я бы не увидел в этом проблемы.Ява
Редактировать: Контрмеры делают этот гигант :(
Перенаправляет stdin и stdout в нулевые потоки и заменяет аргументы пустым массивом. Также использует огромное количество рефлексов, чтобы убедиться, что стандартный ввод-вывод действительно скрыт. Наконец, он устанавливает диспетчер безопасности, чтобы убедиться, что стандартный ввод-вывод не может быть воссоздан, и это гарантирует, что программы не могут установить код выхода.
источник
Lua
В Lua
_ENV
- это среда, в которой хранятся все глобальные переменные, функции, таблицы и т. Д. Если вы зададите ее как пустую строку, значит, вы не сможете определить что-то новое, и все функции и переменные будут стерты. Это означает, что вы не можете ничего выводить, принимать данные или делать что-либо.источник
_ENV=5
? Если так, это на один символ короче.Шекспировский язык программирования
В SPL встроенный синтаксический анализатор, который загружается с программой, следует очень определенным правилам относительно того, что может происходить в сценарии. Одно из таких правил заключается в том, что только два персонажа могут быть на сцене одновременно. Кроме того, выход персонажа из сцены, который никогда не был на сцене, запутает его. То же самое касается добавления персонажа на сцену, который уже находится на сцене. Когда парсер получит ошибку, он откажется делать НИЧЕГО; Вы буквально должны полностью закрыть программу и анализатор, а затем снова запустить все.
PS Если вы не знаете, как работает этот язык, воспользуйтесь им. Это круто
источник
Болтовня
Я не уверен, имеет ли это право:
Это удаляет всю среду выполнения, вешая движок объекта. Единственный способ исправить это - принудительно завершить процесс и перезапустить из резервной копии.
Для тех, кто не знает, способ [Visual Works] Smalltalk работает немного странно. Это как мини-ОС. Когда вы запускаете Smalltalk, вы загружаете «образ памяти» в ОЗУ, и он продолжает выполняться с того места, где остановился. Вся среда разработки Smalltalk написана на языке Smalltalk и является динамически модифицируемой.
В частности,
Smalltalk
это словарь, содержащий все глобальные переменные. В частности, каждый раз, когда вы объявляете новый класс, создается глобальная переменная с таким именем, указывающая наClass
объект для вашего нового класса. Таким образом , установивSmalltalk
вNil
( в основном нулевой) удаляет все классы во всей системе. Даже обработчики событий GUI идут напрасно.Я понятия не имею, почему эта переменная даже доступна для записи. Вероятно, потому что это глобальная переменная, и, следовательно, существует как запись внутри себя. (Ваша голова еще болит? Я упоминал, что у каждого объекта есть класс, и классы являются объектами, поэтому у каждого класса есть класс? Класс класса называется метаклассом, но метакласс также является объектом, который поэтому имеет класс...)
Вероятно, вы могли бы добиться аналогичного эффекта, очистив словарь, а не заменив его нулевым. В самом деле, вы можете закодировать любое количество вещей, чтобы удалить все классы в системе, и вы не сможете ничего сделать. Но поскольку фактический компилятор Smalltalk также является классом ... все, что нарушает язык, также в некоторой степени нарушает всю IDE, поэтому ...
источник
nil
вместоNil
Pharo.true become: false
, но я думаю, что это не работает в более новых версиях языка. Вы можете убить SmallTalk / V 286 таким образом.Haskell
Здесь есть несколько возможностей.
Скучная идея № 1: Определить
main
ничего не делать. Теперь независимо от того, какой другой код вы пишете, он никогда не сможет выполняться. (Если вы не запускаете его вручную из REPL.)Скучная идея № 2: Определить модуль без публичного экспорта. Теперь независимо от того, какой другой код вы пишете, он никогда не сможет выполнить.
Интересная идея: отключить весь импорт.
Теперь вы можете определить функции , которые являются видимыми и могут быть запущены ... но они ничего не могут сделать. Все стандартные типы и функции Haskell теперь скрыты. (За исключением нескольких вещей, действительно глубоко встроенных в язык.)
В частности, вы не можете выполнять какие-либо операции ввода-вывода. Вы также не можете делать машинную арифметику. (Так как
Int
,Double
и т. Д. Теперь не определены.)Вы все еще можете написать функции лямбда-исчисления, которые выполняют некоторые реальные вычисления. Вы просто не можете получить какие-либо данные в или из вещи. Но вы, конечно, могли бы написать другой, отдельный модуль, который вызывает
Fubar
вышеупомянутый модуль и выполняет ввод-вывод от его имени (таким образом, доказывая, что код действительно выполняется и делает что-то).Некоторые тонкости:
Пустая
foo = foo
декларация необходима, чтобы никто не мог добавить дополнительный импорт. (Импорт не может появиться после деклараций.)Существуют различные нестандартные расширения языка Haskell, которые позволят вам выбраться из этой ситуации. Но языковые расширения должны быть включены с прагмой компилятора в верхней части файла. (Или с переключателем командной строки для компилятора. Я не могу предотвратить это!)
источник
foobar
, написание, которое вы использовали, имеет некоторые ... непреднамеренные коннотации.PostScript
Да, PostScript - это язык программирования. Кроме того, это язык программирования, где все языковые конструкции являются системными функциями, которые могут быть переопределены ...
По-английски:
Magic
.systemdict
добавьте один и тот же ключMagic
с пустым определением ("{}
").Magic
на вершину стека словаря.С этого момента каждая команда языка PostScript определена, чтобы ничего не делать. AFAIK, невозможно выйти из этого состояния.
(Технически, вы не «уничтожаете» старые определения, вы просто затеняете их. Если бы вы все еще могли выполнить
end
, это выскочило быMagic
из стека словаря, не затеняя все команды и вернув вам жизнь. Но так какend
сама тоже затенена ... сейчас ничего не поделаешь.)Обратите внимание, что все команды будут по-прежнему выполняться ... просто теперь они определены, чтобы ничего не делать. Вы не получите никакой ошибки, просто ничего не произойдет. (Ну, я полагаю, что переполнение стека произойдет в конце концов ...)
источник
Любая программа, выполняющаяся под Linux / x86 (-64)
Эта программа написана на C, но она может нарушить выполнение любой программы, работающей под Linux / x86 (-32 или -64). Вы добавляете его к вызову программы из командной строки, которую хотите прервать.
Он использует API-интерфейс отладчика, чтобы предотвратить вывод целевой программой. В частности, все системные вызовы, которые могут сообщать что-то окружающему миру за пределами процесса (разумеется
write
, конечно, но также иopen
при создании файла, основной части API сокетовkill
при применении к другому процессу, ...) завершатся ошибкой как будто они не реализованы._exit
разрешено, но код выхода перезаписывается нулем.В отличие от предыдущего выпуска этого ответа, многие программы могут работать почти до завершения при этих условиях; просто вся их работа напрасна. Например, если вы это сделаете
./no-syscalls /bin/ls
(при условии использования GNU coreutilsls
), он прочитает весь каталог и отформатирует его, а затем всеwrite
вызовы для создания вывода завершатся неудачно. (Однако все, что нужно для открытия двунаправленного канала связи, например, все клиенты X11, в этот момент потерпит неудачу. Я думал о разрешении,socket
но нетsend
, но казалось, что это слишком вероятно, чтобы открыть лазейки.)Есть несколько параметров командной строки для настройки поведения;
Динамически связанные программы даже не выйдут из динамического компоновщика в
-e
режиме.-S
очевидно, открывает огромную дыру в политике, но это может быть интересно смотреть программы стонать о том, что ничего не работает, напримерВы должны прочитать вывод журнала с
/usr/include/asm*/unistd.h
открытым в другом окне, потому что это уже достаточно долго.К сожалению, используемые им интерфейсы отладчика слабо согласованы во всех реализациях Unix и по своей сути зависят от процессора. Было бы относительно просто перенести его на другие архитектуры ЦП (просто добавьте соответствующие определения
SYSCALL_*_REG
), и, вероятно, возможно перенести его на любой Unix, который имеетptrace
, но вам, возможно, придется широко использовать белый список системных вызовов, а также бороться с расхождениями. вptrace
.источник
-DNO_EXIT
режим предназначен для людей, которые чувствуют то же, что и вы. В этом режиме невозможен значимый вывод.strace
?TeX
Я не уверен, что это на самом деле сработает, но в теории это должно сломаться
\
как побег персонажа, не оставив вам никакого способа это исправить. Обычно TeX может читать и записывать файлы, теперь он не может писать ничего, что зависит от логики. Таким образом, язык теперь нарушен, как определено OP.РЕДАКТИРОВАТЬ: Другие команды уничтожения, взятые из комментариев (хотя обе могут нарушать правило «код должен быть выполнен»):
\def\fi{}\iffalse
по smpl создает незамкнутую ветвь if\catcode13=9%
от iwillnotexist idonotexist создает бесконечный комментарийисточник
\def\fi{}\iffalse
. Я не могу публиковать ответы на это, потому что для этого требуется не менее 10 повторений, заработанных на этом сайте, но это больше не позволит выводить данные.\fi
его первоначальное значение, верно? Таким образом, язык не сломан без какого-либо ремонта.\fi
- это примитив TeX. И нет, вы не можете ничего переопределить в этот момент,\iffalse
был призван.\catcode13=9%
что полностью нарушил бы язык (все, что после%
комментируется, а символы новой строки (ASCII char 13) игнорируются, поэтому комментарий распространяется на бесконечность), я хотел опубликовать его здесь. Но у вас есть немного более длинная команда уже здесь.царапать
Он
when [timer v] > (0)
будет запущен, как только код будет инициализирован, что, если вы находитесь в редакторе, еще до того, как вы запустите код. Приwhen I receive (join[][])
каждом вещании будет выдаваться сообщение об ошибке, приостанавливая выполнение кода, если у вас есть версия Flash для разработчика.break
Функция будет создавать клоны, и вызвать ошибку вещания. Каждый клон будет длиться две секунды, а затем удалит себя, что приведет к нагрузке на стек. И каждый клон будет реагировать наwhen [timer v] > (0)
выполнениеbreak
подпрограммы и сброс таймера, что вызывает повторный запуск кода таймера. Кроме того, каждый клон будет реагировать на каждую широковещательную ошибку, а это означает, что число ошибок на оценкуbreak
равно числу квадратов клонов. Я забыл упомянуть, чтоbreak
функция имеетrun without screen refresh
проверяется, вызывая зависание, тряску и зависание редактора, а также захват и выделение памяти. И максимально использовать процессор.Любой код, добавленный в любом месте с этим запуском, окажется неспособным создавать клоны (превышено ограничение в 300 клонов), а также нагревать и сбивать компьютер, на котором он запущен. И захват памяти, пока нет больше, чтобы захватить, оставляя переменные неправильно себя ведущие.
И после того, как будет слишком много задержки, чтобы запустить
when [timer v] > (0)
блок, он все еще будет работатьbreak
.Спасибо @towerofnix за напоминание о сбое, которое
when I receive
я нашел некоторое время назад, и за идеюrun without screen refresh
. Если вам понравилось, вот оригинал: https://codegolf.stackexchange.com/a/61357/43394источник
stop this script
: Pwhen I receive
глюк»?when I receive
блок предназначен только для ввода данных из выпадающего списка.join[][]
Блок возвращает тип данных , чтоwhen I recieve
блок не предназначен для подтверждения. Каждый раз, когда что-то передается, все шляпные блоки проверяют и оценивают возвращаемое значение блока, выдаваяincorrect type
ошибку.join
блок.n
» можно использовать, чтобы сказать, что(n-1)
работает для положительногоn
<3, но, поскольку это основано на алгоритме, хороший алгоритм должен быть в состоянии сделатьn
достаточно большим, чтобы можно было игнорировать этот аргумент. Я не уверен, что более быстрая или медленная машина сделает ее более удобной в использовании. Тем не менее, я согласен, что это решение можно обойти. Это не полицейские и грабители , но, в любом случае, молодцы.Mathematica / Wolfram Language
Mathematica - это интерпретируемый язык, в котором имена команд являются символами, которыми может манипулировать программист. Вы не можете удалить встроенные операторы, но вы можете перегрузить их или иным образом изменить их функцию. Следующее шифрует команду «С», которая необходима для присваивания переменных даже внутренне. Это изменение не позволяет ядру удерживать аргументы без оценки до тех пор, пока назначение не будет завершено, и это убивает язык совершенно мертвым.
Если эта команда выполняется в интерактивном сеансе или в блоке кода, Mathematica даже не сможет добавить
1+1
(итоговое сообщение об ошибке занимает около страницы, поэтому я не буду включать его здесь).источник
PHP
Я удивлен, что это на самом деле работает, но закрывает
STDOUT
иSTDERR
подавляет весь вывод. Чтобы убедиться, что они не будут открыты снова, мы открываем/dev/null
три раза, чтобы переназначить файловые дескрипторы 0, 1 и 2:Подробнее об этом: https://stackoverflow.com/questions/937627/how-to-redirect-stdout-to-a-file-in-php
источник
Пакет DOS (до Windows 95, я верю)
Выдается без аргументов, это отключает командную строку от терминала. Любые дальнейшие попытки чтения ввода или генерации вывода ничего не делают.
Если вы хотите знать, как правильно использовать CTTY:
Несколько более мощный пакетный файл может даже отвечать на модем и подключать все, что было набрано, к CTTY.
источник
Common Lisp
Я надеюсь, что вам не нужны эти вводные скобки.
Это макрос для чтения, который сообщает Lisp Reader о необходимости замены каждого экземпляра
(
вызовом(lambda (x y) ())
функции, которая принимает два аргумента и ничего не возвращает. Так, например, он будет читать(foo)
какfoo)
, интерпретироватьfoo
как переменную и затем выдавать непревзойденную ошибку в скобках0
.источник
)
как что-то бред! Таким образом, будет меньше ошибок.царапать
Вот довольно простой пример сбоя вашего браузера (и, теоретически, вашего компьютера):
Я оставил его включенным примерно на двадцать секунд, а затем потерял 2,65 ГБ памяти для Scratch. Мгновение спустя и 5 Гбайт уже не было.
Я настоятельно рекомендую вам воспользоваться средством принудительного выхода из Adobe Flash или веб-браузера перед запуском этого!
Я действительно хотел сделать крутой ответ, как
clear(this)
JS, но, к сожалению, у Scratch нет никаких способов сделать это. Не стесняйтесь обновлять этот пост (или сделать свой собственный), если вы действительно находите другой способ сделать Scratch непригодным для использования!источник
Thue
С новой строкой в конце
Язык thue опирается на определение наборов правил, а a
::=
обозначает конец набора правил. Невозможно сделать НИЧЕГО в течение этого времени без определения правил, которые делают это, поэтому независимо от того, что вы поставили после::=
, ничего не может произойти.Альтернативный ответ
(и так далее для каждого символа во всем Unicode, включая символы перед
A
символом и непечатные символы). Для этого требуется опция командной строки-r
.источник
MATLAB
Следующий фрагмент кода делает среду полностью непригодной 1 :
Это переопределяет
builtin
функцию иclear
функцию новыми дескрипторами анонимной функции, которые просто возвращаютсяfalse
каждый раз, когда вы пытаетесь вызвать эти функции.builtin
Функция гарантирует , что если существуют какие - либо пользовательские функции , которые вы пишете в MATLAB, которые таким же именем , как те, которые встроены в MATLAB ( такие вещи , какsum
,max
,min
и т.д.), вы можете назвать это однозначно вместо перегруженных функций , Точно так жеclear
дает вам возможность очистить все переменные, которые в настоящее время объявлены, чтобы вы могли начать заново. Удалив эти возможности, вы не сможете использовать MATLAB, если не перезапустите программу.В MATLAB R2015a я также получаю следующее сообщение:
Рабочая область - это переменные, которые в настоящее время объявлены в среде, чтобы вы могли использовать их позже. Это навсегда отключает рабочую область, поэтому любые переменные, которые вы пытаетесь создать, не будут сохранены, и, следовательно, при выполнении строк кода в MATLAB не может быть никакого прогресса.
1: Кредит переходит к пользователю Dev-iL, который первоначально обнаружил эту идею.
источник
feval('clear')
исправить. Или:s=str2func('clear'); s()
.///
Единственная операция , в /// повторяется строка подстановки, например:
/pattern/replacement/
.Этот код удаляет все
/
, таким образом, вы не можете использовать повторную подстановку строк, поэтому в основном все, что вы пишете после этого, будет напечатано (кроме/
s).Вы все еще можете использовать
\
s, но это вам мало поможет.источник
Befunge-96
Код пользователя может следовать в любом месте после этой последовательности, если это первые три символа в источнике.
Команда
'
(однократный строковый режим) помещает значение ASCII~
в стек (т. Е. 126), аh
затем команда устанавливает так называемую целостную дельту с этим значением. Для тех, кто не знаком с Befunge-96, Holistic Delta - это смещение, которое добавляется к значению каждого командного байта, с которым сталкивается интерпретатор.Если для дельты задано значение 126, единственной действительной командой, которая может быть сгенерирована, является
~
(ввод символов) через нулевой байт в источнике. Все, кроме нулевого байта, будет преобразовано в значение, превышающее 126, и ни одно из этих значений не будет допустимым для команд Befunge.Я думаю, можно с уверенностью сказать, что это лишило бы его права квалифицироваться как язык программирования.
источник
Бу
А потом, где-то еще в проекте,
Простой макрос с безобидно звучащим названием, но удивительно разочаровывающим эффектом. Компилятор Boo использует многошаговый конвейер, который начинается с разбора исходного кода в AST и заканчивается генерацией кода. (Как правило, его можно перенастроить для различных приложений.) Каждый промежуточный шаг выполняет различные операции над AST.
На полпути проходит стадия расширения макроса, на которой макросы выполняются в контексте компилятора. Помните немного в последнем параграфе о том, что конвейер можно перенастроить? Если во время раскрытия макроса вы вызываете макрос, который очищает конвейер, пользователю не будет отображаться ошибка, но все шаги после раскрытия макроса (включая генерацию кода) больше не будут выполняться. Таким образом, в результате получается что-то, что выглядит как успешная компиляция - сообщения об ошибках не отображаются - но по какой-то причине не создается двоичный файл! Гарантировано, что даже самые лучшие специалисты по устранению неполадок будут доведены до уровня стены, если вы будете хорошо скрывать макрос и вызов.
источник
СПП / АПЗ
NGN / APL позволяет переопределение примитивы, поэтому переопределение (
←
) все примитивные функции⊢
( «пройти через»: как⊢3
и2⊢3
дает3
) делает язык совершенно бесполезен:Попробуй это здесь.
источник
Рубин (29 символов)
Как и «send» используется внутренне всякий раз, когда метод вызывается в Ruby, и поскольку все объекты наследуются от класса Object. Это должно остановить любой метод запуска.
Интересный факт: это совершенно правильно в теории. Но, похоже, почему-то не мешает языку Ruby. Я понятия не имею, почему можно запустить этот код, а затем по-прежнему использовать открытую среду Ruby.
источник
Tcl
Это удалит все ключевые слова из языка, кроме
if
иrename
.Приведенный выше код приведет к ошибке любого нового кода. Так что это спорный вопрос , если на самом деле «выполнен» новый вставленный код получает. Ниже приведена версия, которая выполняет новый код, но ничего не делает, потому что она заменяет все ключевые слова (кроме
if
иproc
) на бездействие :Вместо удаления ключевых слов этот код заменяет их функцией, которая ничего не делает.
(Примечание: здесь я использую «ключевые слова» очень свободно, потому что у Tcl нет ключевых слов, только функции)
источник
if
иrename
после цикла. Во второй версии вы также должны сделатьproc
исключение.proc
появился в списке ранееputs
. Технически код также должен работать без,rename
но встроенные команды, похоже, защищены в противном случае. Не уверен, что происходит, но код протестирован и работает как рекламируется.rename
. С моей стороны это было нелепо - я забыл исключитьproc
.if
потому что возможность делать этоif
самостоятельно бесполезна, если вы хотите генерировать вывод.Hoon
Хун странный. Это почти полностью отличается от других языков программирования, не только в синтаксисе, но и в семантике. В отличие от таких языков, как гексагония, она не была специально сделана эзотерической.
Hoon компилируется в Nock , минимальную виртуальную машину на основе комбинатора. Нок глуп: спецификация может быть сжата до 340 байтов. Единственная математическая операция - приращение. Все является существительным: атом (bignum) или клетка (пара существительных) со всей моделью памяти, расположенной в неизменном ациклическом двоичном дереве. Единственный вывод - это существительное, к которому сводится ваше выражение.
Из-за странной цели компиляции, Hoon также странный: он абсолютно чистый. Hoon компилируется в выражение Nock, которое оценивается в «контексте». Все ядро и stdlib, вместе со всеми переменными, неявно передаются программе контекстом.
Чтобы сделать Hoon непригодным для использования, мы просто используем
=<
«оценить a в контексте b». Мы всегда оцениваем~
, что равно нулю. Независимо от тогоb
, что делает, он не может изменить значение, к которому он уменьшает, и, поскольку у него не может быть побочного эффекта, он не может выполнять ввод или вывод.Примечание: поскольку на самом деле вы не можете запрашивать ввод от Hoon (чистота!), По правилам это на самом деле не язык программирования. Ввод осуществляется с помощью аргументов функции, вывод - через возвращаемые значения (или
~&
, что больше относится к функции отладки printf и является прозрачным для программы).Для программы, которая получает ввод в Urbit, вы на самом деле пишете программу, которая возвращает функцию, которая принимает ввод, и оболочка запрашивает от вашего имени и передает обратный вызов.
источник
Такси, 2354 байта.
Эта маленькая программа просто управляет такси в большом метро через Таунсбург, у которого заканчивается бензин. Любой код, который вы запустите после этого, быстро выдаст ошибку
error: out of gas
. И даже если бы вы могли добраться до заправочной станции, что я не считаю возможным, вы не смогли бы получить бензин, так как деньги не собирались, поскольку пассажиров нет.источник
JavaScript в браузере
Ну, по крайней мере, в IE11.
Запрещает запись в документ, запись в глобальную переменную и возврат из функции.
Прокомментируйте, если я пропустил метод вывода!
источник
window.addEventListener('error',function(){});
document
все равно должен быть доступен из внешней области в вставленного кода, и он не должен получить заменить до после того, как вставленный код не закончит выполнение.Python 2, безумно большой
Этот безумно большой объем кода является возрождением древнего
rexec
модуля (заброшенного в python 2.3) с кучей новых модулей, добавленных в список «ok», и с исправлением множества слабых мест (включаяobject.__subclasses__()
метод, который сделал как минимум два других Python ответы недействительны).Весь этот код (
__init__
методRExec
класса и всегоModuleImporter
класса) скопирован из стандартной библиотеки Python с небольшими изменениями.источник
8064 bytes
кстати