Code-Golf: какова самая короткая программа, которая компилируется и вылетает?
Это немного забавно. Можете ли вы разработать кратчайшую программу, которая компилируется, но ничего не делает, кроме как сразу после сбоя? Поэтому под "крахом" мы подразумеваем, что программа останавливается с условием ошибки (например, дамп ядра).
Есть ли язык, который быстрее сработает (7 символов), чем C, используя компилятор gcc? [Я оставляю этот ответ для кого-то, чтобы найти.]
(Должно быть допустимо использовать флаги компилятора, иначе 7 не будет работать в настоящее время, проверки компилятора стали намного лучше.)
[оценка результатов] Я не могу отметить один ответ, потому что для нескольких языков существует несколько правильных. Было бы несправедливо дисквалифицировать один ответ за другого. Пожалуйста, используйте голоса для выбора лучших ответов.
Ответы
Ответ 1
Bah - я могу разбивать C на 5 символов:
main;
Это объявляет неявную переменную int
, называемую "main".
Он глобальный, поэтому переменная имеет начальное значение 0
.
Это C имена не украшены - поэтому компоновщик не понимает, что это var, а не функция.
GCC дал мне предупреждение - но это все.
$ gcc crash.c
crash.c:1: warning: data definition has no type or storage class
$ ./a.exe
Segmentation fault (core dumped)
$
Ответ 2
Сбой с символами 0
:
$ > golf.c
$ gcc -Wl,--defsym=main=0 golf.c
$ ./a.out
Segmentation fault
Ответ 3
Интересно, если это считается...
a
Это в JavaScript. Это дает время выполнения ошибка "объект не найден". Поскольку JavaScript является динамическим языком, синтаксически это действительно правильно. По-прежнему кажется, что он искажает правила.: P
Ответ 4
с использованием python:
1/0
Ответ 5
машинный код X86: 1 байт
Из командной строки cmd в windows создайте файл a.com, содержащий байты F4, инструкцию по остановке x86:
F:\>debug
-a 100
0BFD:0100 hlt
0BFD:0101
-r cx
CX 0000
:1
-n a.com
-w
Writing 00001 bytes
-q
F:\>a.com
Процессор NTVDM столкнулся с нелегальной инструкцией
Ответ 6
$ cat > crash.S
hlt
$ as -o crash.o crash.S
$ ld crash.o
ld: warning: cannot find entry symbol _start; defaulting to 0000000008048054
$ ./a.out
Segmentation fault
Ответ 7
Perl
die
Died at test line 1.
выводит значение LIST на STDERR и выходит с текущим значением $! (Ошибка).
Ответ 8
Commodore 64 BASIC:
poke 2,2:sys2
или короче (с использованием графических ярлыков PETSCII graphic < char):
pO2,2:sY2
(сбой: недействительный код операции $02 на MOS/CSG6510). На самом деле это можно сделать в 7 байтах (3-х инструкций):
lda #$02
sta $02
jmp $0002
Ответ 9
Если вы находитесь в компьютерном магазине с TI-89, вы можете свернуть его, введя его в:
Exec "00000000"
(что 8 нулей)
Это даст "Неправомерную инструкцию". Нажмите 2nd + Left + Right + ON на reset calc.
Если вы хотите получить больше удовольствия, сделайте следующее:
Exec "4E4A4E750000"
Это запускает скрытое аппаратное тестовое меню, в том числе тесты памяти, тесты LCD (рисует шахматные доски и др.) и многое другое. К сожалению, строка состояния удаляется, и ничто в ОС ОС не возвращает ее, поэтому для очистки после себя, reset в соответствии с приведенными выше инструкциями, или выполните следующее:
Exec "307C56E670FF20C020C020C020C020C04E750000"
Ответ 10
Brainf * ск
5 символов
+[>+]
Это займет некоторое время, но в конечном итоге программа закончится с памятью и неизбежно сработает.
Ответ 11
Фактор (или Forth)
.
"Недостаток стека данных"
Ответ 12
Как насчет java Z
? Если файл не существует, он "сбой" с помощью java.lang.NoClassDefFoundError
. Поэтому мой ответ - это нулевые буквы. Если это недействительно, то...
class T{}
Будет "сбой" с
$ java T
Исключение в потоке "main" java.lang.NoSuchMethodError: main
Если вы хотите что-то, что действительно работает, тогда, если вы хотите немного оскорбить вещи
class T{static {int i =1/0;}}
Else
class T{public static void main(String[]a){main(a);}}
Ответ 13
чтобы процитировать этот ответ:
Все эти ответы и отсутствие Befunge? Я бы набрать минимальную сумму решение их всех:
1
Не шучу. Попробуй сам: http://www.quirkster.com/js/befunge.html
EDIT: Я думаю, мне нужно объяснить это один. 1 операнд нажимает 1 на Исключить внутренний стек и отсутствие чего-либо еще ставит в цикл по правилам языка.
Используя предоставленный переводчик, вы в конечном итоге - и я имею в виду в конечном итоге - попал в точку, где Массив Javascript, который представляет Стек Befunge становится слишком большим для браузер для перераспределения. Если у тебя есть простой интерпретатор Befunge с меньший и ограниченный стек - как и дело с большинством языков ниже - эта программа вызовет более заметное переполнение быстрее.
Ответ 14
В C, 20 символов:
void main(){main();}
Обновление: предлагается иконой, 15 символов:
main(){main();}
Примечание. Протестировано с помощью VС++ 2008.
Ответ 15
Поздно, но что угодно. PHP, 32 символа.
$r=function($z){$z($z);};$r($r);
дает Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 261900 bytes) in ...
Технически, я мог бы также сделать это в 29 с помощью
$r=function($z){$z();};$r(0);
Но это не так весело, как бесконечная рекурсия. Это, и я не думаю, что ошибки "undefined function" должны считаться "компиляцией" на языке сценариев, иначе:
Z();
будет наименьшим решением.
Кроме того, вместо сбоя, как насчет (как script) превышать максимальное время выполнения? 8 символов:
for(;;);
Мое первоначальное взятие, которое имело $i++
в третьем выражении цикла for, но потому, что PHP обрабатывает все целые числа как подписанные, а не переполняется, он просто отрицателен.
Ответ 16
Попробуйте это в сборке:
push 0
ret
конечно, добавьте весь другой мусор для компиляции в приложение.
Ответ 17
в windows powershell:
throw
Ответ 18
Схема:
(1)
Наполните текст, чтобы сделать это дольше.
Ответ 19
Perl всего 2 символа.
&a
Undefined subroutine &main::a called at test.pl line 1.
Ответ 20
В C, 33 символа:
int main(void){return*((int*)0);}
Ответ 21
В QBasic:
? 1/0
(По крайней мере, я думаю, что он все равно будет компилироваться, а затем разбиться с делением на ноль, это было довольно давно...)
Ответ 22
Golfscript - 1 Char
Множество операторов может это сделать, например
*
(eval):1:in `initialize': undefined method `class_id' for nil:NilClass (NoMethodError)
from ../golfscript.rb:285:in `call'
from ../golfscript.rb:285:in `go'
from (eval):1:in `initialize'
from ../golfscript.rb:285:in `call'
from ../golfscript.rb:285:in `go'
from ../golfscript.rb:477
Ответ 23
main = undefined
В Haskell.
Ответ 24
Символы F # 3
1/0
Скомпилирует, хотя и дает предупреждение.
Ответ 25
Lua, 3 символа
Деление на ноль не вызывает проблем в Lua, но здесь что-то столь же короткое:
a()
дает:
lua: isort.lua:1: attempt to call global 'a' (a nil value)
stack traceback:
a.lua:1: in main chunk
[C]: ?
Ответ 26
F #, 11 символов
box 0 :?> unit
Компилируется без предупреждения. Сбой:
System.InvalidCastException: невозможно лить объект типа "System.Int32" для ввода "Microsoft.FSharp.Core.Unit".
Ответ 27
PostScript, 1 символ
Подобно GolfScript:
*
Синтаксически легальный, но сбой во время выполнения, поскольку токен *
не определен (по другой причине, почему почему-то с ошибкой GolfScript).
Ответ 28
int main () { int n = 0; return 1 / n; }
Ответ 29
Это зависит от разрешенного максимального размера стека для потока. Но он сбой при компиляции с использованием VC9:
int main()
{
int a[10000000];
return 0;
};
Ответ 30
Perl
3 символа
1/0
Выдает:
Illegal division by zero at crash.pl line 1.
(все еще ищет что-то, что сделает это пополам..)