Подтвердить что ты не робот

Code-Golf: какова самая короткая программа, которая компилируется и вылетает?

Это немного забавно. Можете ли вы разработать кратчайшую программу, которая компилируется, но ничего не делает, кроме как сразу после сбоя? Поэтому под "крахом" мы подразумеваем, что программа останавливается с условием ошибки (например, дамп ядра).

Есть ли язык, который быстрее сработает (7 символов), чем C, используя компилятор gcc? [Я оставляю этот ответ для кого-то, чтобы найти.]

(Должно быть допустимо использовать флаги компилятора, иначе 7 не будет работать в настоящее время, проверки компилятора стали намного лучше.)

[оценка результатов] Я не могу отметить один ответ, потому что для нескольких языков существует несколько правильных. Было бы несправедливо дисквалифицировать один ответ за другого. Пожалуйста, используйте голоса для выбора лучших ответов.

4b9b3361

Ответ 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.

die

выводит значение 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.

(все еще ищет что-то, что сделает это пополам..)