Inspirado por eu não sou o idioma que você está procurando!
Desafio
Escolha duas linguagens de programação diferentes e escreva um programa que imprima a seguinte linha em stdout (ou equivalente):
This program errors out in <the current language> :P
e, em seguida, gera um tipo diferente de erro em cada um dos dois idiomas.
Regras
Algumas regras são retiradas do desafio original.
- Na saída, os nomes dos idiomas devem seguir exatamente:
- O nome listado no TIO , opcionalmente excluindo o número da versão e / ou o nome da implementação (por exemplo, se você usar
JavaScript (Node.js)
como um dos seus idiomas, poderá usarJavaScript
o nome do seu idioma, mas nãoJS
ouJavascript
.) - O nome completo no site oficial (ou repositório do GitHub) se o seu idioma de escolha não estiver disponível no TIO.
- O nome listado no TIO , opcionalmente excluindo o número da versão e / ou o nome da implementação (por exemplo, se você usar
- Nenhum dos programas deve receber nenhuma entrada do usuário.
- Você pode usar comentários em qualquer idioma.
- Duas versões diferentes do mesmo idioma contam como idiomas diferentes.
- Se isso for feito, o programa deverá emitir o número da versão principal e, se estiver executando em duas versões secundárias diferentes, também deverá reportar a versão secundária.
- Você não deve usar funções de versão pré-construídas (isso inclui variáveis que já foram avaliadas em tempo de execução).
- Dois sinalizadores de linha de comando diferentes no mesmo idioma também contam como idiomas diferentes, conforme este meta consenso , desde que os sinalizadores não incluam fragmentos de código (como
-Dblahblah...
em C).- Se isso for feito, o programa também deve exibir a bandeira usada.
- Dois erros são considerados diferentes, a menos que ambos sejam gerados pela mesma semântica (como "divisão por zero", "falha de segmentação" ou "índice fora do intervalo").
- Se o tempo de execução de um idioma não sair após um erro, mas relatar o erro de alguma forma ao usuário, é um erro válido.
- Se um idioma não discrimina as mensagens de erro, mas possui uma lista conhecida dos motivos que causam o erro, você deve especificar o motivo, não a mensagem de erro.
Um exemplo é><>
, que possui apenas uma mensagem de errosomething smells fishy...
, mas a página wiki do esolangs possui uma lista de motivos de erro.
- O erro de sintaxe não é permitido, a menos que seja gerado por chamada
eval()
ou similar. - Lançar algo manualmente (via
throw
(JS),raise
(Python),die
(Perl) ou similar) é permitido, mas todos eles são considerados como um tipo de erro. - O erro por comando inválido em 2D ou golflangs também é permitido (e tratado como um tipo de erro).
Exemplos
Python e Ruby
- Python:
This program errors out in Python :P
para stdout, identificador indefinido - Ruby:
This program errors out in Ruby :P
para stdout, depois indexe fora dos limites
C89 e C99
- C89:
This program errors out in C 89 :P
para stdout, depois divisão por zero - C99:
This program errors out in C 99 :P
para stdout, falha de segmentação
Observe que o número da versão sempre deve ser separado do nome do idioma por um espaço.
Python 2.7.9 e Python 2.7.10
- Python 2.7.9:
This program errors out in Python 2.7.9 :P
para stdout e erro de sintaxe no eval - Python 2.7.10:
This program errors out in Python 2.7.10 :P
para stdout, erro de chave no dict
Perl e Perl -n
- Perl:
This program errors out in Perl :P
para stdout, formato de hora inválido - Perl
-n
:This program errors out in Perl -n :P
para stdout, tente abrir um arquivo que não existe
Condição vencedora
Isso é código-golfe , então o código mais curto em bytes vence. Mas você sempre é incentivado a postar uma resposta que seja divertida ou interessante, mesmo que não seja muito curta.
This program errors out in ...
conter tabulações / espaços mistos em vez de apenas espaços?Respostas:
Python 2 / Python 3 , 60 bytes
NameError: name 'a' is not defined
unsupported operand type(s) for *: 'NoneType' and 'int'
Python 2:
/
é divisão inteira, 3/2 obteve 1; int (3/2 * 2) é 2.print((...)*1)
aqui*1
significa repetir a string uma vez.Python 3:
(print(...))*1
.print
retornaNone
; A multiplicação não funciona eNone x int
, portanto, informa "operando não suportado".fonte
C e C ++,
114101 bytes-13 bytes graças a l4m2 !
Falha na segmentação em C ++, exceção de ponto flutuante em C.
auto
é padronizadoint
em C, então(int).5
se torna0
, então tentar dividir por isso é basicamente divisão por zero.Em C ++
1/d
é 2, adicionando-o ao endereço ded
e tentar alterar o valor desse endereço 'lança um segfault.Experimente em C ++!
Experimente em C!
fonte
"++"+n
, em quen
é0
para C ++ e2
para Cd?"++":""
9 caracteres,"++"+4*d
8 caracteres. Mas obtém C / C ++ ao contrário. Suspiro.int main(){auto d=.5;printf("This program errors out in C%s :P",d?"++":"");2[&d]+=1/d;}
(105) embora eu não saiba o porquêint
pode ser omitidoL"⬫"+!d
vez ded?"++":""
JavaScript + HTML / HTML + JavaScript, 160 bytes
Não tenho certeza se isso conta dois idiomas, mas é engraçado.
fonte
<!-- ... -->
como marcadores de comentários de linha única (eu sei que este é na especificação por razões de compatibilidade com versões anteriores)Java 8 e C99, 172 bytes
Com base na minha resposta para os desafios 'abc' e 'cba' .
Experimente no Java 8 - resultando em ArrayIndexOutOfBoundsException: 1 .
Experimente em C - resultando na exceção de ponto flutuante: a divisão por zero é indefinida .
Explicação:
Como você pode ver no código destacado em Java acima, a primeira linha é um comentário devido a
//
, e o código C é um comentário devido a/* ... */
, resultando em:Portanto, ele imprime em STDOUT e tenta acessar o segundo argumento do programa (quando não é fornecido), e produz o ArrayIndexOutOfBoundsException .
Não tenho certeza de como habilitar corretamente o realce C, porque
lang-c
resulta no mesmo realce que Java. Mas//\
comentaremos a próxima linha, que é o código Java, resultando em:Portanto, ele imprime em STDOUT e, em seguida, fornece uma divisão por erro zero.
fonte
//
foi adicionado a C, com C99.C99
.a[1]
invés dea[0]
?1
desde o início. Poderia ter usado0
,9
etc. também. Se eu tiver algo para editar sobre este post, vou alterá-lo para0
também ao mesmo tempo.Java 8 e espaço em branco ,
439431428408 bytesExperimente no Java 8 - resultando em ArrayIndexOutOfBoundsException: 0 .
Experimente no espaço em branco - resultando em erro do usuário (Impossível executar o Infix Plus) .
Explicação:
Java 8:
Portanto, ele imprime em STDOUT e tenta acessar o primeiro argumento do programa (quando não é fornecido), e produz o ArrayIndexOutOfBoundsException .
Espaço em branco:
Letras
S
(espaço),T
(tabulação) eN
(nova linha) adicionadas apenas como destaque.[..._some_action]
adicionado apenas como explicação.Experimente esta versão destacada.
Espaço em branco é uma linguagem baseada em pilha que ignora tudo, exceto espaços, tabulações e novas linhas. Aqui está o mesmo programa no pseudo-código:
Irá ocorrer um erro assim que terminar de imprimir todos os valores e a pilha estiver vazia quando tentar fazer o Add (
TSSS
), que requer dois itens na pilha.Eu criei a constante
111
com este programa Java , que também usei para desafios anteriores relacionados ao ASCII que fiz no Whitespace. Além disso, usei algumas cópias para os espaços para salvar bytes.Uma coisa importante a ser observada é o truque que usei para colocar o programa Java na resposta Whitespace. Deixe-me começar explicando como um número é enviado no espaço em branco:
S
no início: ative a manipulação de pilha;S
: Empurre o que segue como Número;S
ouT
: positivo ou negativo, respectivamente;Alguns
S
e / ouT
, seguidos por umN
: Number as binary, whereT=1
andS=0
.Aqui estão alguns exemplos:
SSSTN
;SSTTN
;SSSTTSTTTTN
.SSSSN
,SSTSN
,SSSN
,SSTN
,SSSSSSSSSSSSN
, etc. (Quando você usaSSSN
(ouSSTN
), não temos para especificar a parte binária, porque é implicitamente 0 depois de termos declarado o seu sinal.)Então, basta apenas
SSSN
empurrar o valor0
(usado para a letrao
neste caso). Mas, para colocar o programa Java nesse programa Whitespace, eu precisava de um espaço adicional; portanto, os dois primeiroso
s são pressionadosSSSN
, mas o terceiro é pressionadoSSSSN
, para que tenhamos espaço suficiente para a frase do programa Java.fonte
Código de máquina CBM BASIC e 6502 (C64),
142144 bytesTeve que adicionar 2 bytes depois de perceber um erro de sintaxe não era permitido ....
Hexdump do
.prg
arquivo:A visualização CBM BASIC , conforme listada no editor do C64:
Atenção : É impossível inserir corretamente este programa no editor BASIC. Nem tente editar este programa no editor BASIC, pois ele trava. Ainda assim, é um programa BASIC executável;)
A exibição do código da máquina 6502 :
Demonstração online , digite
run
para executar como BASIC,sys 2049
para executar como código de máquina,list
para mostrá-la interpretada como código BASIC.Executando como BASIC produz um
division by zero error in 1
, executando como código de máquina umcan't continue error
Explicação:
Os dois primeiros bytes de um
.prg
arquivo são o endereço de carregamento em little endian, este é$0801
(decimal2049
) aqui, que é o endereço inicial dos programas BASIC no C64.run
inicia esse programa no intérprete BASIC, enquantosys 2049
é o comando para executar um programa de código de máquina no endereço2049
.Como você pode ver, a primeira linha na visualização BASIC é um comment (
rem
) contendo "lixo" e parte da cadeia de saída necessária. Este é o programa de código da máquina e alguns bytes de preenchimento. Você vê alguns comandos BASIC "aleatórios" lá porque os programas CBM-BASIC contêm os comandos "tokenizados" como valores de byte único, e alguns desses valores são iguais aos códigos de operação usados no código da máquina. O código da máquina reutiliza a cadeia presente na segunda linha de código para sua saída.Os dois primeiros bytes de uma linha de um programa básico são um ponteiro para a próxima linha, aqui
$0850
. Isso é escolhido com cuidado, porque50 08
também é uma instrução de ramificação 6502 pulando nos próximos 8 bytes quando o sinalizador de estouro não está definido - isso é usado para pular em algum lugar no meio dessa linha de "comentário" quando executado como código de máquina. Como50
é o opcode usado aqui, a segunda linha deve começar0850
para que o truque funcione. É por isso que você vê uma sequência de 520
bytes (caracteres de espaço) para preencher. O código da máquina salta ativamente para a rotina de tratamento de erros da ROM para fornecer um erro "não pode continuar".O código BASIC é bastante direto; como um segundo argumento para "imprimir", duas variáveis não inicializadas (com um valor
0
no CBM BASIC) são divididas, acionando o erro "divisão por zero".fonte
> <> e Foo , 42 bytes
Experimente em> <>!
Experimente em Foo!
O Foo imprime tudo
"
, como está bem documentado, e tenta dividir por zero no final. Ignora o'><>'
.><>
empurra o "Foo" para a pilha, mas aparece imediatamente usandop
. Depois de imprimir tudo na pilha,#o<
ela sai quando a pilha está vazia com a única mensagem de erro que ela conhece,something smells fishy...
fonte
><>
tem uma lista de razões de erro, portanto acredito que você deve especificar uma delas, nãosomething smells fishy...
.p
popFoo
é muito inteligente!C e Python,
126116 bytes-10 bytes graças a @Bubbler!
No Python, print () é None, portanto, tentar obter seu negativo não faz sentido; portanto, o Python gera um erro.
Em C printf () retorna um int, então dividi-lo por zero gera uma exceção de ponto flutuante.
Experimente em C!
Experimente em Python!
fonte
-print(...)
para aumentar umTypeError
em Python e, em seguida, pode fazer um Erro de Ponto Flutuante (divisão por zero) em C. Combinado com algumas novas linhas redundantes, aqui estão 116 bytes ( Python , C ).Attache + Wolfram Language (Mathematica) , 82 bytes
Experimente o Attache online! Experimente o Mathematica online!
Isso gira em torno do significado do operador
=
nos dois idiomas. No Attache, ele se compara à igualdade, mas no Mathematica, ele executa a atribuição de variáveis.:=
faz atribuição de variável nos dois idiomas.Agora, no Attache,
Print
retorna uma matriz de cadeias impressas, e a subtração não é possível com cadeias e números inteiros (ou seja,0
). Portanto, um erro de tipo é gerado. No Mathematica,Print
retornaNull
, e o Mathematica está subtraindo muito bem0
disso. Mas, jogamos manualmente esse nulo comThrow
, dando umnocatch
erro.fonte
Python (2) e QB64 , 82 bytes
Para testar a versão Python, você pode experimentá-lo online! Para testar a versão QB64, você precisará fazer o download do QB64.
O que o Python vê
A primeira linha é apenas a expressão vazia
1
(no-op) seguida de um comentário.A segunda linha define
s
a sequência"QB64"
, mas a terceira linha a altera imediatamente para"Python"
. A quarta linha imprime a mensagem de acordo.A quinta linha é outra expressão simples, mas gera um
NameError
por causa do nome indefinidoCLS
.O que o QB64 vê
A primeira linha, numerada
1#
, define cada variável cujo nome começa comS
(sem distinção entre maiúsculas e minúsculas) como uma variável de sequência. Isso significa que não precisamos usars$
, o que seria um erro de sintaxe no Python.A segunda linha é definida
s
como a sequência"QB64"
.'
inicia um comentário no QB64, para que a terceira linha não faça nada. A quarta linha imprime a mensagem de acordo.A quinta linha tenta
CLS
(limpar a tela) com um argumento de-1
. Mas desde queCLS
só aceita argumentos de0
,1
ou2
, isso produz o erroIllegal function call
. O erro cria uma caixa de diálogo perguntando ao usuário se ele deseja continuar a execução ou abortar. Tecnicamente, isso significa que o erro não é fatal (nesse caso, você pode escolher "continuar a execução" e o programa simplesmente termina sem maiores problemas); mas o OP permitiu explicitamente idiomas que podem continuar após um erro; portanto, o comportamento do QB64 deve ser bom.fonte
Perl 5 e JavaScript (Node.js) , 96 bytes
Isso faz uso do fato de que
(...)
há uma lista no Perl queprintf
usará o elemento mais à esquerda e o fato de ser o operador de vírgula no JavaScript, que retornará o argumento mais à direita.Causa erro de divisão por zero no Perl e no ReferenceError porque
$
não está definido no JavaScript.Experimente o Perl online!
Experimente o JavaScript online!
fonte
Oitava e MATLAB, 67 bytes
Experimente online!
Notas: O código supõe que o MATLAB está instalado sem caixas de ferramentas (ou que os nomes de qualquer caixa de ferramentas instalada não começam com as letras A a M).
Como funciona:
O código obtém os dados da versão para o intérprete e as caixas de ferramentas usando
ver
. A execuçãov(1).Name
extrai o nome do primeiro produto; isso retornará umOctave
ouMATLAB
assumindo que a nota acima seja verdadeira.O programa exibirá a sequência necessária, completa com
Octave
ouMATLAB
conforme necessário.Finalmente nós fazemos
v(--pi)
.No Octave,
--
é o operador de pré-decremento. Como tal, ele tenta pré-diminuir o que falha, pois a variávelpi
não existe (pi
na verdade é função, não uma variável).No MATLAB, o operador de pré-decréscimo não existe. Como tal, a afirmação é interpretada como
v(-(-pi))
sendo igual a justav(pi)
. No entanto,pi
não é um número inteiro, portanto, não pode ser usado para indexar nav
matriz, causando um erro.fonte
C ++ 14 (gcc) / C ++ 17 (gcc) ,
107105 bytesExperimente online! (C ++ 14)
Experimente online! (C ++ 17)
Assume que
<cstdio>
declaraprintf
no namespace global (além destd
) e que o conjunto de caracteres de execução básica usa valores ASCII, que são verdadeiros usando g ++ no Linux.O problema básico aqui é que o C ++ 17 eliminou os trigramas da linguagem.
No C ++ 14,
"??/0"
contém um trigrafo e é equivalente a"\0"
. Então*"??/0"
é zero ec
está definido como zero. O número 4 é passado como argumento paraprintf
, então a divisão porc
causa um comportamento indefinido. No Linux, isso acontece antes de*p
entrar em cena, e o programa recebe umaSIGFPE
.No C ++ 17,
"??/0"
é exatamente o comprimento 4 que parece ser. Assim*"??/0"
é'?'
ou 63 ec
está definido como 3. O número 7 é passado como argumento paraprintf
, e desta vez a divisão porc
é válida. Comop
é um membro do espaço para nome, ele é inicializado com zero no início do programa e possui um valor de ponteiro nulo, assim*p
como um comportamento indefinido. No Linux, como o programa tenta modificar a memória no endereço zero, o programa obtém aSIGSEGV
.fonte
main
O tipo de retorno pode ser omitido, portanto -3 bytes.Perl 5 e Perl 6 , 55 bytes
Experimente o Perl 5 online! (Divisão ilegal por zero)
Experimente o Perl 6 online! (Não existe esse método)
O prefixo
~
é a stringificação no Perl 6 e essencialmente um no-op no programa acima. No Perl 5, não é bit a bit, convertendo -1 em 0..
é uma sintaxe de chamada de método no Perl 6 e concatenação no Perl 5.fonte
C (gcc) / Stax , 109 bytes
Experimente online! (C (gcc))
Experimente online! (Stax) ou Executar e depurar! (Stax)
Segfault em C. Operação inválida no Stax. Eu amo como tudo o que não é um comentário é realmente usado no Stax.
C
É assim que C vê isso. A primeira linha é no-op. A segunda linha imprime a mensagem com
printf
e, em seguida, segfaults devido ao=0
.Stax
O programa Stax termina sempre que ele tenta aparecer ou espiar da pilha vazia. Isso torna um pouco complicado e temos que preparar uma pilha que não esteja vazia.
AA=~1;
faz isso enquanto permanece uma declaração válida em C.O que é realmente útil é
~
: ele prepara uma pilha de entradas não vazia para que;
possa ser executada sem sair do programa. No entanto, os dois1
s na pilha principal também são usados posteriormente.A segunda linha começa com uma guia e inicia um comentário de linha no Stax.
A operação inválida está tentando executar uma
/
operação para uma sequência como o TOS (2º operando) e o número1
de (*) como o 1º operando, que é inválido.Se os dois operandos forem trocados, seria uma operação válida no Stax.
fonte
Gelatina e M , 39 bytes
Experimente em geléia!
Experimente em M!
Ambos os idiomas se aplicam inversamente
İ
à0
que resulta eminf
para Jelly ezoo
para M. Eu não sei por quezoo
representa o infinito em M. Pergunte Dennis.A diferença importante é que o infinito de Jelly é igual a si mesmo, enquanto o infinito de M não é. Assim, a mônada "é igual a si mesma"
=`
produz1
em Jelly e0
em M. A partir daqui:O erro de Jelly é
EOFError: EOF when reading a line
.O erro de M é
TypeError: '>' not supported between instances of 'str' and 'int'
.fonte
Foo / CJam ,
5150 bytesIsso ocorre com um erro de divisão por zero no Foo e uma
NumberFormatException
no CJam.Para CJam:
/
tenta dividir a sequênciaThis program errors out in
na substringFoo
. Como a string não contém a substring, isso gera uma matriz singleton contendo a string original, exibida exatamente da mesma maneira.'x
é um caractere literal parax
, impresso da mesma maneira que uma sequência de um caractere. Dessa forma, podemos enviar dados para o CJam que são ignorados pelo Foo (não descobri como fazer um loop não ser executado no Foo).Li
tenta converter a cadeia vazia em um número inteiro, que falha. Tudo da pilha é impresso.Para Foo:
/
tenta dividir a célula atual pelo elemento da pilha superior (que é implícito0
). Por alguma razão, erros de divisão por 0 não são fatais no Foo, portanto, isso apenas imprime a mensagem para STDERR e continua.'C'J'a'm
eLi
) são ignorados.fonte
Only Jon Skeet can divide by zero.
meta.stackexchange.com/a/9138 #Python e Lua ,
111110102989585 bytesErros: Python 3:
Lua:
Claramente distinto.
Abusa de várias diferenças:
<var>=<a>,<b>,...
cria uma tupla em Python, mas em Lua ele cria uma lista de argumentos, da qual apenas o primeiro membro é retirado.#
inicia um comentário em Python, mas é o operador de comprimento em Lua. Adereços extras para o Python por permitir que as tuplas terminem em vírgula.[[...]]
é a sintaxe de cadeias multilinhas de Lua, o que significa que ele nem vê a função de impressão do Python; isso é necessário devido a Lua usar..
para concatenação de strings e não+
.a
, uma variável indefinida; Lua depoisz=#print(x.."Lua :P")
. Usar apenas#print(x.."Lua :P")
para Lua não funciona, pois isso gera um erro antes que o código seja executado.Edições:
"".join
em Python, -1 bytex
uma string nos dois idiomas e coloquePython
uma sequência literal na função de impressão, -8 bytes#[[]]
é mais curto que#""
e--[[]]
-4 bytes#1
como chave de tabela, -3 bytesprint(x.."Lua :P")
obras, aparentemente; -1 bytefonte
Java e C #
242235Abusar o manuseio de escape diferente entre java e C # (escapamentos unicode são analisados antes da análise de código em java e não em c #) como uma espécie de pré-processador, é o trabalho do
\u0027
mágica, o resto são alguns "comentários de alternância"Edit: Golfed off 8 bytes graças a um ponteiro de @KevinCruijssen
Editar: derp de regra corrigido
fonte
String
emvar
(o Java 10 suporta isso). (Ou 5 mudandoString s="...";
paraString s="...",x;
e removerString
em frentex=
em Java 9 ou antes).AutoHotKey / C #,
155133128122 bytesO destaque da sintaxe explica melhor do que eu poderia:
C # RuntimeBinderException: 'Não é possível chamar um tipo não delegado'
Erro de AutoHotkey : Uma exceção foi lançada.
Edições:
fonte
i+=i[-1]
. System.IndexOutOfRangeException: 'O índice estava fora dos limites da matriz.'dynamic
vez devar
e lançar Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'Não é possível chamar um tipo não delegado' comi()
.PHP 7+ / JavaScript,
9089 bytesEle usa 2 idiomas com sintaxe muito semelhante, permitindo escrever esse código nos dois idiomas.
A separação do idioma é feita por uma propriedade não presente no JavaScript: o PHP considera
[]
(matriz vazia) um valor falso enquanto é verdadeiro no JavaScript (porque é um objeto e os objetos são sempre verdadeiros, mesmonew Boolean(false)
).Execução:
Incidirá sobre o seguinte trecho de código:
([]?console.log($X,'JavaScript'):printf($X,PHP))();
.A atribuição de string funciona da mesma maneira nos dois idiomas.
Este código usa o "operador ternário" ( Javascript , PHP ), que funciona basicamente da mesma maneira nos dois idiomas.
Javascript
Javascript executará o
console.log($X,'JavaScript')
peça, que retornaráundefined
.Mais tarde, quando você tenta executar
(...)()
, recebe umUncaught TypeError: (intermediate value)(intermediate value)(intermediate value) is not a function
(no Google Chrome).PHP
O PHP executará o
printf($X,PHP)
peça.No PHP, a
printf
função retorna o comprimento da saída .O PHP tem uma funcionalidade interessante: ele pode executar funções cujo nome está armazenado em uma variável (ou, desde o PHP7, como resultado de uma expressão), o que evita um erro de sintaxe.
O PHP tentará executar a função cujo nome é o resultado da expressão
[]? ... :printf($X,PHP)
(que é o número33
).Mas essa funcionalidade interessante tem uma ressalva: só aceita strings (duh!).
Isso causa a
Fatal error: Function name must be a string
, porque33
é umint
.Obrigado a Shieru Asakoto por me salvar 1 byte!
fonte
[]
é mais curto que'0'
e também avaliado de maneira diferente em JS e PHP, então talvez um byte de -1 aqui?[]
precisa ser usado em vez de'0'
,'\0'
,'\0'=="0"
, e usado que[]
antes também. Mas obrigado por identificar esta pergunta.Perl 5 e C, 95 bytes
//;
é basicamente um NOP em perl e é um comentário em C.Portanto, o programa C é efetivamente:
Que imprime a sequência necessária e tenta executar
puts(32)
. Esse é um comportamento tecnicamente indefinido em C, mas causa uma falha de segmentação no TIO e em todos os sistemas aos quais tenho acesso.O programa perl trata todo o programa C como uma string, usa o regex
/T.*n /
para corresponderThis program errors out in
e depois imprime isso eperl :P
.die
faz com que o programa falhe com o erroDied at script_name line 2
.Se você não gostar disso como um erro,
1/0
é do mesmo tamanho e trava com umIllegal division by zero
erro. Eu só gosto dedie
mais;)Experimente online! (C)
Experimente online! (Perl)
fonte
VBScript, JScript, 72 bytes
O VBScript imprimirá "Erro de tempo de execução do Microsoft VBScript: incompatibilidade de tipo: 'y'" O
JScript imprimirá "Erro de tempo de execução do Microsoft JScript: 'y' está indefinido"
fonte
JavaScript e Python 3,
10591 bytesErros
NameError: name 'console' is not defined
no Python 3Experimente online!
... e por
TypeError: console.log(...) is not a function
em JavaScript.Experimente online!
fonte
Java (JDK) / JavaScript (Node.js), 154 bytes
Experimente online! (Java)
Experimente online! (JavaScript)
Saída em Java:
Saída em JavaScript (para stderr):
Isso aproveita a digitação fraca do JavaScript (
1=='1'
) para detectar a linguagem, as mesmas palavras-chave em Java e JavaScript (var
,class
) e os construtores de erro semelhantes (new Error()
) para criar o poliglota.fonte
PowerShell v6 e PowerShell v2, 73 bytes
Experimente online!
Isso gerará um erro de análise na v2 porque
-shl
foi introduzido na v3. O v3 + poderá alterar corretamente o valor antes de tentar dividi-lo por 0, gerando convenientemente um erro de divisão por zero. Ambas as versões têm o hashmap $ PSVersionTable que contém oPSVersion
campofonte
C (gcc) no Linux / C (gcc) no Mac (160)
Não testado no Mac; basicamente, John Cook apontou (em seu blog ) que o POSIX não define gama; O Linux usa o log da função gama (log (gamma (1)) retornará 0, o que acionará uma exceção de ponto flutuante); O OSX usa a função gama "true" (que é oficialmente chamada de tgamma por POSIX); isso retorna 1 que atingirá a instrução abortar; Eu tentei fazer com que ele lançasse um erro de ponto flutuante diferente (por exemplo, sqrt (-1), mas estou esquecendo como fazer com que esse erro seja disparado vs apenas retornar zero)
fonte
Perl, Bash (78 bytes)
Saída em Perl:
Saída no Bash:
(Observe que o Bash está realmente exibindo o
line 4
erro, apesar do fato de a linha 3 não terminar com um avanço de linha ...)fonte
C e ECPP, 112 bytes
Hangup
,.Illegal instruction
,.fonte
C (gcc) e Haskell , 135 bytes
Experimente online (С)! Experimente online (Haskell)!
O resultado é obtido entrelaçando os comentários, sendo a versão C essencialmente esta:
(A falha é obtida escrevendo antes do início da string).
A versão Haskell, por outro lado, reduz-se ao seguinte:
(A falha é alcançada seguindo uma lista vazia)
fonte