Вдохновленный я не тот язык, который вы ищете!
Вызов
Выберите два разных языка программирования и напишите программу, которая выводит следующую строку в стандартный вывод (или эквивалентный):
This program errors out in <the current language> :P
а затем генерирует различные виды ошибок в каждом из двух языков.
правила
Некоторые правила взяты из оригинальной задачи.
- В выводе должны точно следовать названия языков:
- Имя, указанное в TIO , возможно, за исключением номера версии и / или имени реализации (например, если вы используете
JavaScript (Node.js)
один из ваших языков, вы можете использовать егоJavaScript
для названия языка, но неJS
илиJavascript
.) - Полное имя на официальном сайте (или GitHub Repo), если ваш язык не доступен на TIO.
- Имя, указанное в TIO , возможно, за исключением номера версии и / или имени реализации (например, если вы используете
- Ни одна из программ не должна принимать никаких данных от пользователя.
- Вы можете использовать комментарии на любом языке.
- Две разные версии одного и того же языка считаются разными языками.
- Если это сделано, программа должна вывести основной номер версии, а если она запущена на двух разных второстепенных версиях, должна также сообщить младшую версию.
- Вы не должны использовать встроенные функции версии (это включает переменные, которые уже были оценены во время выполнения).
- Два разных флага командной строки на одном и том же языке также считаются разными языками в соответствии с этим мета-консенсусом , если флаги не включают фрагменты кода (например,
-Dblahblah...
в C).- Если это сделано, программа также должна вывести используемый флаг.
- Две ошибки считаются разными, если только обе ошибки не генерируются одной и той же семантикой (например, «деление на ноль», «ошибка сегментации» или «индекс вне диапазона»).
- Если среда выполнения языка не завершается после ошибки, но каким-то образом сообщает об ошибке пользователю, это допустимая ошибка.
- Если язык не различает сообщения об ошибках, но имеет известный список причин, которые вызывают ошибку, вы должны указать причину, а не сообщение об ошибке.
Примером может служить><>
только одно сообщение об ошибкеsomething smells fishy...
, но на вики-странице esolangs есть список причин ошибок.
- Синтаксическая ошибка не допускается, если она не генерируется вызовом
eval()
или подобным. - Бросать что-то вручную (через
throw
(JS),raise
(Python),die
(Perl) или подобное) разрешено, но все они рассматриваются как один вид ошибки. - Ошибка недопустимой команды в 2D или golflangs также допускается (и рассматривается как один из видов ошибок).
Примеры
Python и Ruby
- Python:
This program errors out in Python :P
в стандартный вывод, затем неопределенный идентификатор - Ruby:
This program errors out in Ruby :P
в стандартный вывод, затем индексировать за пределы
С89 и С99
- C89:
This program errors out in C 89 :P
в стандартный вывод, затем деление на ноль - C99:
This program errors out in C 99 :P
в стандартный вывод, затем ошибка сегментации
Обратите внимание, что номер версии всегда должен быть отделен от имени языка пробелом.
Python 2.7.9 и Python 2.7.10
- Python 2.7.9:
This program errors out in Python 2.7.9 :P
в стандартный вывод, затем синтаксическая ошибка на eval - Python 2.7.10:
This program errors out in Python 2.7.10 :P
в стандартный вывод, затем ключевая ошибка в dict
Perl и Perl -n
- Perl:
This program errors out in Perl :P
в стандартный вывод, затем неверный формат времени - Perl
-n
:This program errors out in Perl -n :P
в стандартный вывод, затем попробуйте открыть файл, который не существует
Выигрышное условие
Это код-гольф , поэтому выигрывает самый короткий код в байтах. Но вы всегда можете опубликовать ответ, который будет веселым или интересным, даже если он не очень короткий.
This program errors out in ...
содержать смешанные табуляции / пробелы вместо просто пробелов?Ответы:
Python 2 / Python 3 , 60 байт
NameError: name 'a' is not defined
unsupported operand type(s) for *: 'NoneType' and 'int'
Python 2:
/
целочисленное деление, 3/2 получил 1; int (3/2 * 2) равно 2.print((...)*1)
, здесь*1
означает повторение строки один раз.Python 3:
(print(...))*1
.print
возвращаетNone
; Умножение не работает наNone x int
, поэтому он сообщает «неподдерживаемый операнд».источник
С и С ++,
114101 байт-13 байт благодаря l4m2 !
Ошибка сегментации в C ++, исключение с плавающей точкой в C.
auto
по умолчаниюint
в C так(int).5
становится0
, поэтому попытка деления на него в основном делится на ноль.В C ++
1/d
есть 2, добавив его по адресуd
и попытка изменить значение этого адреса приводит к возникновению ошибки.Попробуйте это в C ++!
Попробуйте это в C!
источник
"++"+n
, гдеn
это0
на C ++ и2
для Cd?"++":""
9 символов,"++"+4*d
8 символов Но получает C / C ++ задом наперед. Вздох.int main(){auto d=.5;printf("This program errors out in C%s :P",d?"++":"");2[&d]+=1/d;}
(105), хотя я не знаю, почемуint
может быть опущеноL"⬫"+!d
вместоd?"++":""
JavaScript + HTML / HTML + JavaScript, 160 байт
Не уверен, если это считать два языка, но это смешно.
источник
<!-- ... -->
качестве однострочных маркеров комментариев (я знаю, что это в спецификации по причинам обратной совместимости)Java 8 & C99, 172 байта
На основании моего ответа на вызовы «abc» и «cba» .
Попробуйте это в Java 8 - в результате ArrayIndexOutOfBoundsException: 1 .
Попробуйте в C - в результате возникнет исключение с плавающей точкой: деление на ноль не определено .
Объяснение:
Как вы можете видеть в выделенном Java-коде выше, первая строка представляет собой комментарий из-за
//
, а C-код - из-за комментария/* ... */
, что приводит к:Таким образом, он печатает в STDOUT, а затем пытается получить доступ ко второму аргументу программы (если он не задан), поэтому он создает исключение ArrayIndexOutOfBoundsException .
Не уверен, как правильно включить C-подсветку, потому что
lang-c
приводит к той же подсветке, что и Java. Но//\
закомментирует следующую строку, которая является Java-кодом, в результате:Таким образом, он выводится в STDOUT, а затем выдает ошибку деления на ноль.
источник
//
Был добавлен в C с C99.C99
.a[1]
вместоa[0]
?1
с самого начала. Может быть использован0
,9
и т.д. , а также. Если у меня есть что-то, чтобы отредактировать этот пост, я тоже поменяю его на0
.Java 8 & Whitespace ,
439431428408 байтПопробуйте это в Java 8 - в результате ArrayIndexOutOfBoundsException: 0 .
Попробуйте в пробеле - в результате пользовательская ошибка (не могу сделать Infix Plus) .
Объяснение:
Java 8:
Таким образом, он печатает в STDOUT, а затем пытается получить доступ к первому аргументу программы (если он не задан), поэтому он создает исключение ArrayIndexOutOfBoundsException .
Пробелы:
Буквы
S
(пробел),T
(табуляция) иN
(новая строка) добавляются только как подсветка.[..._some_action]
добавлено только для пояснения.Попробуйте эту выделенную версию.
Пробелы - это основанный на стеке язык, который игнорирует все, кроме пробелов, вкладок и новых строк. Вот та же программа в псевдокоде:
Он выдаст ошибку, как только завершит печать всех значений и стек станет пустым, когда он попытается сделать Add (
TSSS
), для чего требуются два элемента в стеке.Я сгенерировал константу
111
с помощью этой программы Java , которую я также использовал для предыдущих задач, связанных с ASCII, которые я делал в Whitespace. Кроме того, я использовал несколько копий для пробелов, чтобы сохранить байты.Одна важная вещь, которую стоит отметить, - это трюк, который я использовал, чтобы поместить Java-программу в ответ Whitespace. Позвольте мне начать с объяснения того, как число вводится в пустое пространство:
S
в начале: включить управление стеками;S
: Нажмите то, что следует как число;S
илиT
: положительный или отрицательный соответственно;Некоторые
S
и / илиT
, а затемN
: число в двоичном виде, гдеT=1
иS=0
.Вот несколько примеров:
SSSTN
;SSTTN
;SSSTTSTTTTN
.SSSSN
,SSTSN
,SSSN
,SSTN
,SSSSSSSSSSSSN
и т.д. (При использованииSSSN
(илиSSTN
), мы не должны указывать бинарную часть, потому что это неявно 0 после того, как мы заявили знак.)Так что
SSSN
достаточно просто нажать значение0
(o
в данном случае используется для буквы ). Но, чтобы поместить программу Java в этой программе golfed WHITESPACE, мне нужно дополнительное пространство, поэтому первые дваo
s выталкиваются сSSSN
, но третий один проталкиваются сSSSSN
, поэтому у нас есть достаточно мест для предложения программы Java.источник
CBM BASIC и машинный код 6502 (C64),
142144 байтаПришлось добавить 2 байта после того, как синтаксическая ошибка не была допущена ....
Hexdump
.prg
файла:Представление CBM BASIC , как указано в редакторе C64:
Внимание : невозможно правильно ввести эту программу в бейсик редакторе. Даже не пытайтесь редактировать эту программу в редакторе BASIC, она вылетит. Тем не менее, это работоспособная ОСНОВНАЯ программа;)
Вид машинного кода 6502 :
Демо-версия в сети , введите
run
для запуска как BASIC,sys 2049
чтобы запустить как машинный код,list
чтобы показать, что он интерпретируется как BASIC-код.Запуск как BASIC производит
division by zero error in 1
, запуск как машинный кодcan't continue error
Объяснение:
Первые два байта
.prg
файла - это адрес загрузки с прямым порядком байтов, здесь он$0801
(десятичный2049
), который является начальным адресом для программ BASIC на C64.run
запускает эту программу в интерпретаторе BASIC, в то времяsys 2049
как это команда для запуска программы машинного кода по адресу2049
.Как видите, первая строка в представлении BASIC - это комментарий (
rem
), содержащий «мусор» и часть необходимой выходной строки. Это программа машинного кода и несколько байтов заполнителя. Вы видите некоторые «случайные» команды BASIC, потому что программы CBM-BASIC содержат команды, «tokenized» в виде однобайтовых значений, и некоторые из этих значений совпадают с кодами операций, используемыми в машинном коде. Машинный код повторно использует строку, представленную во второй строке кода, для его вывода.Первые два байта строки базовой программы - это указатель на следующую строку
$0850
. Это тщательно выбрано, потому что50 08
это также инструкция 6502 ветвления, перепрыгивающая через следующие 8 байтов, когда флаг переполнения не установлен - это используется для перехода где-то посередине этой строки «комментария» при выполнении в виде машинного кода. Здесь50
используется код операции, поэтому вторая строка должна начинаться,0850
чтобы трюк работал. Вот почему вы видите последовательность из 520
байтов (пробелов) для заполнения. Машинный код активно переходит к процедуре обработки ошибок ПЗУ, чтобы выдать ошибку «невозможно продолжить».Базовый код довольно прост; в качестве второго аргумента для «печати» две неинициализированные переменные (имеющие значение
0
в CBM BASIC) делятся, вызывая ошибку «деление на ноль».источник
> <> и Foo , 42 байта
Попробуйте это в> <>!
Попробуйте это в Foo!
Foo печатает все
"
, что хорошо документировано, и в конце пытается делить на ноль. Это игнорирует'><>'
.><>
помещает «Foo» в стек, но сразу же выдает его, используяp
. После того, как он печатает все в стек,#o<
он выходит, когда стек пуст с единственным сообщением об ошибке, которое он знает,something smells fishy...
источник
><>
есть список причин ошибок, поэтому я считаю, что вы должны указать одну из них, а неsomething smells fishy...
.p
для поп-музыкиFoo
очень умно!C и Python,
126116 байт-10 байт благодаря @Bubbler!
В Python print () - None, поэтому пытаться получить отрицательный результат не имеет смысла, поэтому Python выдает ошибку.
В C printf () возвращает int, поэтому деление его на ноль дает исключение с плавающей запятой.
Попробуйте это в C!
Попробуйте это на Python!
источник
-print(...)
для поднятия aTypeError
в Python, и тогда вы можете сделать ошибку с плавающей точкой (деление на ноль) в C. В сочетании с некоторыми избыточными символами новой строки, здесь 116 байтов ( Python , C ).Attache + Wolfram Language (Mathematica) , 82 байта
Попробуйте Attache онлайн! Попробуйте Mathematica онлайн!
Это основывается на значении оператора
=
на двух языках. В Attache он сравнивается на равенство, но в Mathematica он выполняет присваивание переменных.:=
выполняет присваивание переменных на обоих языках.Теперь в Attache
Print
возвращает напечатанный массив строк, и вычитание невозможно со строками и целыми числами (а именно,0
). Итак, ошибка типа выбрасывается. В MathematicaPrint
возвращаетсяNull
, и Mathematica прекрасно вычитает0
из этого. Но, мы вручную забросить , что нуль сThrow
, что даетnocatch
ошибку.источник
Python (2) и QB64 , 82 байта
Чтобы проверить версию Python, вы можете попробовать его онлайн! Чтобы протестировать версию QB64, вам нужно скачать QB64.
Что видит Python
Первая строка - это просто голое выражение
1
(без операции), за которым следует комментарий.Вторая строка устанавливает
s
строку"QB64"
, но третья строка немедленно меняет ее на"Python"
. Четвертая строка печатает сообщение соответственно.Пятая строка - еще одно голое выражение, но оно вызывается
NameError
из-за неопределенного имениCLS
.Что видит QB64
Первая строка, пронумерованная
1#
, определяет каждую переменную, имя которой начинается сS
(без учета регистра) как строковую переменную. Это означает, что нам не нужно использоватьs$
, что было бы синтаксической ошибкой в Python.Вторая строка устанавливает
s
строку"QB64"
.'
начинает комментарий в QB64, поэтому третья строка ничего не делает. Четвертая строка печатает сообщение соответственно.Пятая строка пытается
CLS
(очистить экран) с аргументом-1
. Но так какCLS
принимает только аргументы0
,1
или2
, это приводит к ошибкеIllegal function call
. Ошибка создает диалоговое окно, спрашивающее пользователя, хотят ли они продолжить выполнение или прервать выполнение. Технически это означает, что ошибка не является фатальной (в этом случае вы можете выбрать «продолжить выполнение», и программа просто завершится без дальнейших проблем); но OP явно разрешил языки, которые могут продолжаться после ошибки, поэтому поведение QB64 должно быть в порядке.источник
Perl 5 и JavaScript (Node.js) , 96 байт
Это использует тот факт, что
(...)
это список в Perl, которыйprintf
будет использовать самый левый элемент, и тот факт, что это оператор запятой в JavaScript, который будет возвращать самый правый аргумент.Вызывает ошибку деления на ноль в Perl и ReferenceError, потому что
$
не определено в JavaScript.Попробуйте Perl онлайн!
Попробуйте JavaScript онлайн!
источник
Октава и MATLAB, 67 байт
Попробуйте онлайн!
Примечания: Код предполагает, что MATLAB установлен без наборов инструментов (или что имена любого установленного набора инструментов не начинаются с букв от A до M).
Как это работает:
Код получает данные о версии для интерпретатора и наборов инструментов
ver
. Запускv(1).Name
извлекает имя первого продукта, он вернет либо,Octave
либо,MATLAB
если примечание выше верно.Затем программа отобразит требуемую строку, дополненную
Octave
илиMATLAB
как требуется.Наконец мы делаем
v(--pi)
.В октаве
--
есть оператор предварительного декремента. Как таковой, он пытается предварительно уменьшить, который терпит неудачу как переменнаяpi
не существует (pi
на самом деле это функция, а не переменная).В MATLAB оператор предварительного декремента не существует. Как таковое утверждение интерпретируется как
v(-(-pi))
равное справедливостиv(pi)
. Однакоpi
не является целым числом, поэтому не может использоваться для индексации вv
массиве, что приводит к ошибке.источник
C ++ 14 (gcc) / C ++ 17 (gcc) ,
107105 байтПопробуйте онлайн! (C ++ 14)
Попробуйте онлайн! (C ++ 17)
Предполагается, что
<cstdio>
объявляетprintf
в глобальном пространстве имен (в дополнение кstd
) и что базовый набор символов выполнения использует значения ASCII, которые являются истинными при использовании g ++ в Linux.Основная проблема здесь в том, что C ++ 17 исключил триграфы из языка.
В C ++ 14
"??/0"
содержит триграф и эквивалентен"\0"
. Так*"??/0"
что ноль, иc
устанавливается на ноль. Число 4 передается в качестве аргументаprintf
, затем деление наc
вызывает неопределенное поведение. В Linux это происходит до того, как это*p
входит в картину, и программа получаетSIGFPE
.В C ++ 17
"??/0"
это строка длиной 4, как представляется. So*"??/0"
is'?'
or 63 иc
установлен в 3. Число 7 передается в качестве аргументаprintf
, и на этот раз деление наc
является действительным. Поскольку онp
является членом пространства имен, он инициализируется нулями в начале программы и имеет нулевое значение указателя,*p
как и неопределенное поведение. В Linux, поскольку программа пытается изменить память по нулевому адресу, программа получаетSIGSEGV
.источник
main
Возвращаемый тип может быть опущен, поэтому -3 байта.Perl 5 и Perl 6 , 55 байт
Попробуйте Perl 5 онлайн! (Незаконное деление на ноль)
Попробуйте Perl 6 онлайн! (Нет такого метода)
Префикс
~
- это строковое форматирование в Perl 6 и, по сути, запрет на использование в приведенной выше программе. В Perl 5 это не поразрядно, преобразовывая -1 в 0..
это синтаксис вызова метода в Perl 6 и конкатенация в Perl 5.источник
C (gcc) / Stax , 109 байт
Попробуйте онлайн! (C (GCC))
Попробуйте онлайн! (Stax) или запустить и отладить его! (Stax)
Segfault в C. Неправильная операция в Stax. Мне нравится, что все, что не является комментарием, на самом деле используется в Stax.
С
Вот как С это видит. Первая строка не работает. Во второй строке печатается сообщение с,
printf
а затем с ошибками из-за=0
.Stax
Программа Stax завершает работу всякий раз, когда она пытается выскочить или посмотреть из пустого стека. Это немного усложняет задачу, и мы должны подготовить не пустой стек.
AA=~1;
делает это, оставаясь действительным утверждением в C.Что действительно полезно, так это то
~
, что он подготавливает непустой стек ввода, чтобы его;
можно было выполнить без выхода из программы. Тем не менее, два1
s в основном стеке также используются позже.Вторая строка начинается с вкладки и начинается с комментария в Stax.
Недопустимая операция пытается выполнить
/
операцию для строки в качестве TOS (2-й операнд) и числа1
из (*) в качестве 1-го операнда, что недопустимо.Если два операнда поменялись местами, это будет действительная операция в Stax.
источник
Желе и М , 39 байт
Попробуйте это в желе!
Попробуйте в М!
Оба языка применить обратный
İ
к0
что приводитinf
к Желе иzoo
для М. я не знаю , почемуzoo
представляет бесконечность в М. Ask Деннис.Важным отличием является то, что бесконечность желе равна самой себе, а бесконечность М - нет. Таким образом, монада "равно себе"
=`
дает1
в желе и0
в м. Отсюда:Ошибка желе
EOFError: EOF when reading a line
.Ошибка M является
TypeError: '>' not supported between instances of 'str' and 'int'
.источник
Foo / CJam ,
5150 байтЭто завершается с ошибкой деления на ноль в Foo, и
NumberFormatException
в CJam.Для CJam:
/
пытается разбить строкуThis program errors out in
на подстрокуFoo
. Поскольку строка не содержит подстроки, это приводит к массиву синглтона, содержащему исходную строку, которая отображается точно так же.'x
символьный литерал дляx
, который печатается так же, как и односимвольная строка. Таким образом, мы можем передать данные для CJam, которые игнорируются Foo (я не выяснил, как заставить цикл не выполняться в Foo).Li
пытается привести пустую строку к целому числу, что не удается. Все из стека печатается.Для Foo:
/
пытается разделить текущую ячейку на верхний элемент стека (который является неявным0
). По какой-то причине ошибки деления на 0 не являются фатальными в Foo, поэтому это просто печатает сообщение в STDERR и продолжает идти.'C'J'a'm
иLi
) игнорируются.источник
Only Jon Skeet can divide by zero.
meta.stackexchange.com/a/9138Питон и Луа ,
111110102989585 байтОшибки: Python 3:
Lua:
Ясно отчетливо
Злоупотребляет множественными различиями:
<var>=<a>,<b>,...
создает кортеж в Python, но в Lua создает список аргументов, из которого берется только первый член.#
начинает комментарий в Python, но является оператором длины в Lua. Дополнительные реквизиты для Python, позволяющие кортежам заканчиваться запятой.[[...]]
многострочный синтаксис Lua, означающий, что он даже не видит функцию печати Python; это необходимо из-за использования Lua..
для конкатенации строк, а не+
.a
неопределенной переменной; Луа послеz=#print(x.."Lua :P")
. Использование только#print(x.."Lua :P")
для Lua не работает, так как это вызывает ошибку еще до того, как код будет выполнен.Редактирование:
"".join
в Python, -1 байтx
строку на обоих языках и поместитеPython
в строковый литерал в функции печати, -8 байт#[[]]
короче#""
и--[[]]
, -4 байта#1
в качестве ключа таблицы, -3 байтаprint(x.."Lua :P")
работ, по-видимому; -1 байтисточник
Java и C #
242235Злоупотребление различной обработкой escape между java и C # (экранирование unicode анализируется перед синтаксическим анализом кода в java, а не в c #) как своего рода препроцессор, вот и работа
\u0027
магии, остальные - это некоторые "комментарии-переключатели"Редактировать: Гольф от 8 байтов благодаря указателю @KevinCruijssen
Редактировать: правило сумасшедшего исправлено
источник
String
вvar
(Java 10 поддерживает это). (Или 5, изменивString s="...";
кString s="...",x;
и удалитьString
передx=
в Java 9 или ранее).AutoHotKey / C #,
155133128122 байтовПодсветка синтаксиса объясняет это лучше, чем я мог:
C # RuntimeBinderException: «Невозможно вызвать тип без делегата»
Ошибка AutoHotkey : возникла исключительная ситуация.
Редактирование:
источник
i+=i[-1]
. System.IndexOutOfRangeException: 'Индекс находился за пределами массива.'dynamic
вместоvar
и выбросить Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: «Невозможно вызвать тип без делегата» сi()
.PHP 7+ / JavaScript,
9089 байтПри этом используются 2 языка с очень похожим синтаксисом, что позволяет писать этот код на обоих языках.
Разделение языка выполняется с помощью свойства, отсутствующего в JavaScript: PHP считает
[]
(пустой массив) ложным значением, в то время как оно истинно в JavaScript (потому что это объект, а объекты всегда верны, дажеnew Boolean(false)
)Исполнение:
Остановлюсь на следующий фрагмент кода:
([]?console.log($X,'JavaScript'):printf($X,PHP))();
.Атрибуция строк работает одинаково на обоих языках.
Этот код использует «троичный оператор» ( Javascript , PHP ), который в большинстве языков работает в основном одинаково.
Javascript
Javascript будет запускать
console.log($X,'JavaScript')
часть, которая возвращаетсяundefined
.Позже, когда вы попытаетесь выполнить
(...)()
, вы получитеUncaught TypeError: (intermediate value)(intermediate value)(intermediate value) is not a function
(в Google Chrome).PHP
PHP выполнит
printf($X,PHP)
кусок.В PHP
printf
функция возвращает длину вывода .PHP имеет интересную функциональность: он может выполнять функции, чье имя хранится в переменной (или, начиная с PHP7, как результат выражения), что предотвращает синтаксическую ошибку.
Затем PHP попытается запустить функцию, имя которой является результатом выражения
[]? ... :printf($X,PHP)
(которое является числом33
).Но у этой интересной функциональности есть предостережение: принимаются только строки (да!).
Это вызывает
Fatal error: Function name must be a string
, потому что33
являетсяint
.Спасибо Шиеру Асакото за то, что он спас мне 1 байт!
источник
[]
короче'0'
и также оценивается по-разному в JS и PHP, так что, может быть, здесь -1 байт?[]
нужно использовать вместо'0'
,'\0'
,'\0'=="0"
и использовал это[]
до того, как хорошо. Но спасибо, что заметили этот вопрос.Perl 5 и C, 95 байт
//;
это в основном NOP в Perl, и комментарий на C.Таким образом, программа C эффективно:
Который печатает требуемую строку, затем пытается запустить
puts(32)
. Это технически неопределенное поведение в C, но оно вызывает ошибку сегментации в TIO и в каждой системе, к которой у меня есть доступ.Perl-программа обрабатывает всю C-программу как строку, использует регулярное выражение
/T.*n /
для сопоставления,This program errors out in
а затем печатает это иperl :P
.die
вызывает сбой программы с ошибкойDied at script_name line 2
.Если вам не нравится это как ошибка,
1/0
имеет ту же длину и вылетает сIllegal division by zero
ошибкой. мне просто нравитсяdie
больше ;)Попробуйте онлайн! (С)
Попробуйте онлайн! (Perl)
источник
VBScript, JScript, 72 байта
VBScript выведет «Ошибка времени выполнения Microsoft VBScript: Несоответствие типов:« y »»
JScript выведет «Ошибка времени выполнения Microsoft JScript:« y »не определено»
источник
JavaScript & Python 3,
10591 байтОшибки в
NameError: name 'console' is not defined
в Python 3Попробуйте онлайн!
... и
TypeError: console.log(...) is not a function
в JavaScript.Попробуйте онлайн!
источник
Java (JDK) / JavaScript (Node.js), 154 байта
Попробуйте онлайн! (Джава)
Попробуйте онлайн! (JavaScript)
Вывод на Java:
Вывод в JavaScript (в stderr):
Это позволяет использовать слабую типизацию JavaScript (
1=='1'
) для определения языка, а также те же ключевые слова в Java и JavaScript (var
,class
) и аналогичные конструкторы ошибок (new Error()
) для создания полиглота.источник
PowerShell v6 и PowerShell v2, 73 байта
Попробуйте онлайн!
Это приведет к ошибке синтаксического анализа на v2, потому что
-shl
был введен в v3. Тогда v3 + сможет корректно сместить значение, прежде чем пытаться разделить его на 0, что приводит к ошибке деления на ноль. Обе версии имеют хэш-таблицу $ PSVersionTable, которая содержитPSVersion
полеисточник
C (gcc) в Linux / C (gcc) в Mac (160)
Untested on Mac; basically, John Cook pointed out (in his blog) that POSIX doesn't define gamma; Linux uses the log of the gamma function (log(gamma(1)) will return 0 which will trigger a floating point exception); OSX uses the "true" gamma function, (which is officially called tgamma per POSIX); this returns 1 which will then hit the abort statement; I tried to get it to throw a different floating point error (e.g. sqrt(-1) but I'm forgetting how to make that throw an error vs just return zero)
источник
Perl, Bash (78 bytes)
Output in Perl:
Output in Bash:
(Note that Bash is indeed displaying the
line 4
error, despite the fact that line 3 does not end with a line feed...)источник
C and ECPP, 112 bytes
Hangup
.Illegal instruction
.источник
C (gcc) and Haskell, 135 bytes
Try it online (С)! Try it online (Haskell)!
The result is achieved by interweaving the comments, the C version being essentially this:
(Failure is achieved by writing before the beginning of the string).
Haskell version, on the other hand, reduces to the following:
(Failure is achieved by taking tail of an empty list)
источник