programming-languages - plus - langage de programmation 2019



Code-Golf: Quel est le programme le plus court qui compile et plante? (20)

C'est un peu amusant. Pouvez-vous concevoir le programme le plus court qui compile mais ne fait rien mais plante immédiatement lorsqu’il est exécuté? C'est pourquoi nous entendons par "crash" que le programme s'arrête avec une condition d'erreur (un vidage mémoire par exemple).

Existe-t-il un langage qui plante plus rapidement (7 caractères) que C en utilisant un compilateur gcc? [Je laisse cette réponse à quelqu'un à trouver.]

(Il devrait être permis d’utiliser les drapeaux du compilateur. Sinon, 7 ne fonctionnerait pas de nos jours, les vérifications du compilateur sont devenues bien meilleures.)

[évaluation des résultats] Je ne parviens pas à marquer une seule réponse car il existe plusieurs réponses correctes pour plusieurs langues. Il ne serait pas juste de disqualifier une réponse pour une autre. S'il vous plaît utiliser des votes pour choisir les meilleures réponses.


Brainf * ck

5 personnages

+[>+]

Cela prendra un certain temps, mais le programme finira par manquer de mémoire et se plantera inévitablement.


Perl

3 personnages

1/0

Produit:

Illegal division by zero at crash.pl line 1.

(cherche toujours quelque chose qui le fera en deux ..)


Perl dans seulement 2 caractères.

&a
Undefined subroutine &main::a called at test.pl line 1.

PostScript, 1 caractère

Comme GolfScript:

*

Syntaxiquement légal, mais se bloque pendant l'exécution car le jeton * n'est pas défini (raison différente de la cause du crash de GolfScript).


F # 3 personnages

1/0

Compile bien que donne un avertissement.


F #, 11 caractères

box 0 :?> unit

Compile sans avertissement. Se bloque avec: System.InvalidCastException: impossible de convertir l'objet de type 'System.Int32' en type 'Microsoft.FSharp.Core.Unit'.


Facteur (ou Forth)

.

"Débordement de la pile de données"


Bah - Je peux écraser C en 5 caractères:

main;

Ceci déclare une variable int implicite appelée 'main'. C'est global donc la variable a une valeur initiale de 0 . C'est C, les noms ne sont pas décorés - donc l'éditeur de liens ne réalise pas que c'est un var et non une fonction.

GCC m'a averti - mais c'est tout.

$ gcc crash.c 
crash.c:1: warning: data definition has no type or storage class
$ ./a.exe
Segmentation fault (core dumped)
$

Commodore 64 BASIC:

poke 2,2:sys2

ou plus court (en utilisant les raccourcis de charte graphique PETSCII):

pO2,2:sY2

(blocage: opcode non valide à 02 $ sur MOS / CSG6510). En fait, cela peut être fait en 7 octets (3 instructions):

lda #$02
sta $02
jmp $0002

Crash avec 0 caractères:

$ > golf.c
$ gcc -Wl,--defsym=main=0 golf.c
$ ./a.out
Segmentation fault

En C, 33 caractères:

int main(void){return*((int*)0);}

En QBasic:

? 1/0

(Au moins, je pense que ça va continuer à compiler et ensuite planter avec une division par zéro; ça fait pas mal de temps ...)


Essayez ceci en montage:

push 0
ret

bien sûr, ajoutez tous les autres déchets à compiler dans une application.


Golfscript - 1 Char

Beaucoup d'opérateurs peuvent le faire, par exemple

*
(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

Que diriez-vous de java Z ? Si aucun fichier n'existe, il se "bloque" avec une java.lang.NoClassDefFoundError . Donc, ma réponse est zéro lettre. Si ce n'est pas valide alors ...

class T{}

"Crash" avec $ java T Exception dans le fil "main" java.lang.NoSuchMethodError: main

Si vous voulez quelque chose qui fonctionne réellement, alors si vous êtes prêt à abuser un peu des choses

class T{static {int i =1/0;}}

Autre

class T{public static void main(String[]a){main(a);}}

Schème:

(1)

Remplissez le texte pour le rendre plus long.


dans windows powershell:

throw

en utilisant python:

1/0

$ 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

int main () { int n = 0; return 1 / n; }