Halt and catch fire: Difference between revisions

Added Easylang
(Added a section for Liberty BASIC)
(Added Easylang)
 
(38 intermediate revisions by 25 users not shown)
Line 19:
{{trans|Nim}}
 
<syntaxhighlight lang ="11l">assert(0B)</langsyntaxhighlight>
 
=={{header|6502 Assembly}}==
Upon executing this byte as code, the processor will halt. No interrupts can occur either. This does not occur on 65c02-based hardware such as the Apple II or Atari Lynx.
<syntaxhighlight lang ="6502asm"> db $02</langsyntaxhighlight>
 
This version works on all 6502 models:
<langsyntaxhighlight lang="6502asm">forever:
jmp forever</langsyntaxhighlight>
 
This code is often written as <code>JMP $</code> which means the same thing. (In addition to the hexadecimal token, $ can refer to the value of the program counter at that instruction's address.
Line 33:
=={{header|8080 Assembly}}==
{{trans|Z80 Assembly}}
<langsyntaxhighlight lang="8080asm">di
hlt</langsyntaxhighlight>
 
=={{header|8086 Assembly}}==
{{trans|Z80 Assembly}}
Disabling interrupts prior to a <code>HLT</code> command will cause the CPU to wait forever.
<langsyntaxhighlight lang="asm">cli
hlt</langsyntaxhighlight>
 
=={{header|68000 Assembly}}==
If interrupts are disabled, a jump instruction that jumps to itself will do just fine.
The 68000 can only read words or longs at even addresses. Attempting to do so at an odd address will crash the CPU.
<syntaxhighlight lang="68000devpac">jmp * ;many assemblers allow * or $ to represent the address of this line of code.</syntaxhighlight>
<lang 68000devpac>CrashBandicoot equ $100001
LEA CrashBandicoot,A0
MOVE.W (A0),D0</lang>
 
=={{header|Ada}}==
<langsyntaxhighlight Adalang="ada">procedure Halt_And_Catch_Fire is
begin
raise Program_Error with "Halt and catch fire";
end Halt_And_Catch_Fire;</langsyntaxhighlight>
{{out}}
<pre>raised PROGRAM_ERROR : Halt and catch fire
Line 59 ⟶ 57:
=={{header|ALGOL 68}}==
This program will crash immediately on startup.
<langsyntaxhighlight lang="algol68">( print( ( 1 OVER 0 ) ) )</langsyntaxhighlight>
 
=={{header|ALGOL W}}==
This won't halt the CPU but the program will crash immediately on startup.
<syntaxhighlight lang ="algolw">assert false.</langsyntaxhighlight>
 
=={{header|Applesoft BASIC}}==
The $02 op code won't crash the Apple IIGS. Here is the [[6502_Assembly|6502 Assembly]] for a relocatable infinite loop consisting of 3 bytes:
<pre>
:B8 CLV
:50 FE BVC {-02}</pre>
This is a one-liner that embeds the 3 bytes in a string, and calls the code contained within the string.
<syntaxhighlight lang="gwbasic">HCF$ = CHR$ (184) + "P" + CHR$ (254): CALL PEEK ( PEEK (131) + PEEK (132) * 256 + 1) + PEEK ( PEEK (131) + PEEK (132) * 256 + 2) * 256</syntaxhighlight>
=={{header|Arturo}}==
 
<syntaxhighlight lang="rebol">0/0</syntaxhighlight>
 
{{out}}
 
<pre>>> Runtime | File: halt and catch fire.art
error | Line: 1
|
| uncaught system exception:
| division by zero</pre>
 
=={{header|AWK}}==
<syntaxhighlight lang="awk">
<lang AWK>
# syntax: GAWK -f HALT_AND_CATCH_FIRE.AWK
#
Line 77 ⟶ 95:
# Under TAWK 5.0 using AWKW will immediately abort.
BEGIN { abort(1) }
</syntaxhighlight>
</lang>
{{out}}
<pre>
gawk: C:\AWK\HALT_AND_CATCH_FIRE.AWK:5: error: division by zero attempted
</pre>
 
=={{header|Binary Lambda Calculus}}==
BLC forces normal programs to start with a closed lambda term, by mapping free variables to the divergent Omega = <code>(\x.x x)(\x.x x)</code>, the lambda calculus equivalent of an infinite loop. That makes the following 2-bit BLC program the smallest to catch fire:
 
<pre>10</pre>
 
=={{header|BQN}}==
The easiest way to terminate with an error is using assert (<code>!</code>):
<syntaxhighlight lang="bqn">! "Insert value that is not 1"
"Error Message" ! "Value that is not 1, again"</syntaxhighlight>
 
Other runtime errors are possible, but not as easy to use.
 
=={{header|Bruijn}}==
Bruijn does not have runtime errors. For debugging you can either write tests (which are run before evaluating main) or use tactical infinite loops:
<syntaxhighlight lang="bruijn">
:test ([[0]]) ([[1]])
 
main [[0 0] [0 0]]
</syntaxhighlight>
 
=={{header|C}}==
<langsyntaxhighlight lang="c">int main(){int a=0, b=0, c=a/b;}</langsyntaxhighlight>
 
=={{header|C++}}==
Use an unhandled exception to crash the program.
<langsyntaxhighlight lang="cpp">#include <stdexcept>
int main()
{
throw std::runtime_error("boom");
}</langsyntaxhighlight>
{{out}}
<pre>
Line 103 ⟶ 141:
{{works with|C sharp|9}}
This throws a DivideByZeroException at runtime.<br/>
<langsyntaxhighlight lang="csharp">int a=0,b=1/a;</langsyntaxhighlight>
This will throw a compile-time exception, so technically not a valid solution.
<langsyntaxhighlight lang="csharp">int a=1/0;</langsyntaxhighlight>
This one-liner also works
<syntaxhighlight lang ="csharp">throw new System.Exception();</langsyntaxhighlight>
 
=={{header|Computer/zero Assembly}}==
<syntaxhighlight lang="6502asm">STP</syntaxhighlight>
=={{header|Crystal}}==
<syntaxhighlight lang="crystal">raise "fire"</syntaxhighlight>
 
=={{header|Delphi}}==
{{works with|Delphi|6.0}}
{{libheader|SysUtils,SysUtils,StdCtrls}}
The program uses Delphi's builtin exception processing to throw an exception. Uncaught exceptions abort a program
 
<syntaxhighlight lang="Delphi">
procedure HaltAndCatchFire;
begin
raise Exception.Create('Burning to the ground');
end;
 
</syntaxhighlight>
{{out}}
[[File:DelphiHaltCatchFire.png|thumb|none]]
<pre>
 
</pre>
 
=={{header|EasyLang}}==
<syntaxhighlight>
a[] = [ ]
print a[1]
</syntaxhighlight>
{{out}}
<pre>
*** ERROR: index out of bounds
</pre>
 
=={{header|F_Sharp|F#}}==
<langsyntaxhighlight lang="fsharp">
0/0
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 122 ⟶ 193:
===REPL===
Causing a stack underflow is trivial; just call any word that expects arguments with an empty data stack.
<syntaxhighlight lang ="factor">+</langsyntaxhighlight>
 
{{out}}
Line 131 ⟶ 202:
===script===
This crashes because Factor expects the data stack to be empty at the end of a program. However, it is not here.
<syntaxhighlight lang ="factor">1</langsyntaxhighlight>
 
{{out}}
Line 157 ⟶ 228:
When deploying as a standalone executable, a main word and vocabulary must be declared. The stack effect checker must be satisfied, so we can't rely on either of the tricks used before. Therefore <code>die</code> is called instead.
 
<langsyntaxhighlight lang="factor">USE: kernel IN: a : b ( -- ) die ; MAIN: b</langsyntaxhighlight>
{{out}}
<pre>
Line 172 ⟶ 243:
>
</pre>
 
=={{header|FALSE}}==
Any function with the exception of <code>^</code> (read from stdin) or <code>ß</code> (flush stdin) will cause a stack underflow.
<syntaxhighlight lang="false">.</syntaxhighlight>
 
Alternatively, the FALSE interpreter expects the stack to be empty at the end of the program's execution, and so leaving a value on the stack is also a valid strategy for crashing the program.
<syntaxhighlight lang="false"> 0</syntaxhighlight>
 
=={{header|Fortran}}==
{{works with|Fortran|77,90,95,...}}
<syntaxhighlight lang="fortran"> PROGRAM A
CALL ABORT
END</syntaxhighlight>
 
=={{header|Fermat}}==
Defines, then calls, a function with no parameters that calls itself. A segfault occurs.
<langsyntaxhighlight lang="fermat">Func S=S. S;</langsyntaxhighlight>
This alternative is five bytes longer but crashes more thoroughly; after a warning about end of line inside a string literal it locks my computer up for a good 2-3 minutes before exiting to the command prompt.
<langsyntaxhighlight lang="fermat">while 1 do !' od;</langsyntaxhighlight>
 
=={{header|FreeBASIC}}==
Instant segfault.
<syntaxhighlight lang ="freebasic">poke 0,0</langsyntaxhighlight>
This alternative crashes the compiler.
<langsyntaxhighlight lang="freebasic">#define A() B()
#define B() A()
A()</langsyntaxhighlight>
 
=={{header|GDScript}}==
An empty script will run and immediately error due to not inheriting from Node:
<code>Script inherits from native type 'RefCounted', so it can't be assigned to an object of type: 'Node'</code>
 
A script with zero warnings:
<syntaxhighlight lang="gdscript">
extends Node
func _init():$a.a()
</syntaxhighlight>
<pre>
E 0:00:00:0321 halt_and_catch_fire.gd:2 @ _init(): Node not found: "a" (relative to "Node").
<C++ Error> Method/function failed. Returning: nullptr
<C++ Source> scene/main/node.cpp:1364 @ get_node()
<Stack Trace> halt_and_catch_fire.gd:2 @ _init()
</pre>
 
This attempts to call a method on a nonexistent child node (just accessing without calling will produce a warning <code>Standalone expression (the line has no effect).</code>
 
=={{header|Go}}==
This wouldn't survive ''go fmt'' which would stretch it out to 5 lines. However, that's not compulsory and the task says do it in as few lines as possible.
<langsyntaxhighlight lang="go">package main; import "fmt"; func main(){a, b := 0, 0; fmt.Println(a/b)}</langsyntaxhighlight>
<br>
An alternative shorter line would be:
<langsyntaxhighlight lang="go">package main; func main(){panic(0)}</langsyntaxhighlight>
 
=={{header|GW-BASIC}}==
<syntaxhighlight lang ="gwbasic">0 gosub 0</langsyntaxhighlight>
 
=={{header|Hare}}==
<syntaxhighlight lang="hare">export fn main() void = abort();</syntaxhighlight>
 
=={{header|Haskell}}==
An alternative to the following is to use ''undefined''.
<langsyntaxhighlight lang="haskell">main = error "Instant crash"</langsyntaxhighlight>
 
=={{header|J}}==
<syntaxhighlight lang="j"> (1e6$a.) memw (mema 1),0 1e6</syntaxhighlight>
In other words: allocate one byte of memory and write 1e6 bytes starting at that address.
 
It's probably more effective to use <syntaxhighlight lang="j"> exit 0</syntaxhighlight> -- this approach would eliminate dependence on a variety of implementation details.
 
=={{header|Java}}==
<syntaxhighlight lang="java">
public final class HaltAndCatchFire {
 
public static void main(String[] aArgs) {
// Any one of the lines below, when uncommented, will cause a program halt.
// throw new AssertionError("Stop now!");
// System.out.println(0/0);
// Runtime.getRuntime().exit(1);
}
 
}
</syntaxhighlight>
 
=={{header|jq}}==
{{works with|jq}}
 
Also works with gojq, the Go implementation of jq
 
The polite way to halt a running jq program is to use `error` or `halt_error`, both of which come in two flavors.
For example:
<syntaxhighlight lang=jq>
"whoops" | error
</syntaxhighlight>
or
<syntaxhighlight lang=jq>
0 | error("whoops")
</syntaxhighlight>
It is worth noting that the text of a run-time error can be captured using `error/1`, e.g.
 
<pre>
$ jq -n '0 as $x | try (1/$x) catch error("The error text is: \(.)")'
jq: error (at <unknown>): The error text is: number (1) and number (0) cannot be divided because the divisor is zero
</pre>
 
"Catching fire" is not so easily done.
 
=={{header|Julia}}==
To crash the running program:
<langsyntaxhighlight lang="julia">@assert false "Halt and catch fire."</langsyntaxhighlight>{{out}}<pre>ERROR: AssertionError: Halt and catch fire.</pre>
To crash the LLVM virtual machine running Julia with Exception: EXCEPTION_ILLEGAL_INSTRUCTION:
<langsyntaxhighlight lang="julia">unsafe_load(convert(Ptr{Int}, C_NULL))</langsyntaxhighlight>
 
=={{header|Liberty BASIC}}==
This is just one possibility.
This is just one possibility; it throws a syntax error. One could also introduce a non-printable character into the IDE to make it appear as if nothing was there. The "Filter Bad Characters" would have to be turned off in Preferences for the non-printable character trick to work.
<syntaxhighlight lang ="lb">.Let</langsyntaxhighlight>
 
=={{header|Lua}}==
Tricks could be used to shorten this, particularly from interactive REPL, where <code>-_</code> would be enough (i.e., attempt arithmetic on a nil global), or from a file <code>_()</code> would be enough (i.e., attempt to call a nil global). This instead focuses on the "be useful elsewhere" aspect of the task, because both seem short-enough as-is:
<syntaxhighlight lang="lua">error(1)</syntaxhighlight>
{{out}}
<pre>1
stack traceback:
[C]: in function 'error'
stdin:1: in main chunk
[C]: in ?</pre>
Or:
<syntaxhighlight lang="lua">assert(false)</syntaxhighlight>
{{out}}
<pre>stdin:1: assertion failed!
stack traceback:
[C]: in function 'assert'
stdin:1: in main chunk
[C]: in ?</pre>
 
=={{header|Mathematica}}/{{header|Wolfram Language}}==
<syntaxhighlight lang="mathematica">Abort[]</syntaxhighlight>
 
=={{header|Nim}}==
One possibility:
<syntaxhighlight lang Nim="nim">assert false</langsyntaxhighlight>
 
Another solution with the same number of characters (we could also use <code>mod</code> instead of <code>div</code>):
<syntaxhighlight lang="text">echo 1 div 0</langsyntaxhighlight>
 
But the shortest solution may be:
<syntaxhighlight lang="nim">assert 1==0</syntaxhighlight>
 
=={{header|Pascal}}==
{{Works with|Free Pascal}} Do an illegal memory access at $0
<langsyntaxhighlight lang="pascal">begin pByte($0)^ := 0 end.</langsyntaxhighlight>
{{out}}
<pre>Runtime error 216 at $0000000000401098</pre>
Line 225 ⟶ 399:
=={{header|Perl}}==
This is not a syntax error, it is a fatal run time error. See "perldoc perldiag".
<syntaxhighlight lang ="perl">&a</langsyntaxhighlight>
{{out}}
<pre>Undefined subroutine &main::a called at line 1.</pre>
Line 231 ⟶ 405:
=={{header|PL/M}}==
This will terminate the program by restarting CP/M.
<syntaxhighlight lang ="plm">100H: GOTO 0; EOF</langsyntaxhighlight>
 
=={{header|Phix}}==
I normally and quite often just use this:
<!--<langsyntaxhighlight Phixlang="phix">(phixonline)-->
<span style="color: #0000FF;">?</span><span style="color: #000000;">9</span><span style="color: #0000FF;">/</span><span style="color: #000000;">0</span>
<!--</langsyntaxhighlight>-->
The ? means print and/but obviously the 9/0 triggers a fatal error before it gets that far.
{{out}}
Line 250 ⟶ 424:
</pre>
Alternatives include crash("some message") which produces similar output, and abort(n) which is somewhat quieter with abort(0) meaning (immediately) terminate normally without an error. All of those can be caught by try/catch: should you want to get properly brutal and defeat any active exception handler you can/must resort to inline assembly:
<!--<langsyntaxhighlight Phixlang="phix">(phixonline)-->
<span style="color: #008080;">try</span>
#ilASM{
Line 272 ⟶ 446:
<span style="color: #0000FF;">?</span><span style="color: #000000;">e</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">try</span>
<!--</langsyntaxhighlight>-->
No output, the try/catch is just for show. ExitProcess/sys_exit are the only non-catchable things I know of, apart from a few other deliberates such as quitting the debugger, and aside from being technically difficult to catch it seems reasonable to classify them as direct actions rather than errors, and that way excuse the non-catchableness.<br>
<small>(I suppose [ok, actually know that] you could also write inline assembly that fubars the call stack to [effectively or quite deliberately] disable any active exception handler[s])</small>
=={{header|Python}}==
<syntaxhighlight lang Python="python">0/0</langsyntaxhighlight>
{{out}}
<pre>Traceback (most recent call last):
Line 303 ⟶ 477:
 
=={{header|Raku}}==
<syntaxhighlight lang="raku" perl6line>++8</langsyntaxhighlight>
Syntactically: Valid.
 
Line 325 ⟶ 499:
 
Alternately, and perhaps more community condoned, to end the program as soon as possible without trying to change the Laws of the Universe, you could just enter:
<syntaxhighlight lang="raku" perl6line>die</langsyntaxhighlight>
{{out|In REPL}}
<pre>Died
Line 350 ⟶ 524:
However when I tried to combine all to test against the Test module, the last one somehow lived through an EVAL,
 
<syntaxhighlight lang="raku" perl6line>use Test;
 
dies-ok { ++8 };
Line 358 ⟶ 532:
eval-dies-ok '++8';
eval-dies-ok 'die';
eval-dies-ok '…' ;</langsyntaxhighlight>
 
{{out}}
Line 373 ⟶ 547:
=={{header|REXX}}==
===Version 1===
<langsyntaxhighlight lang="rexx">_=1;_+=</langsyntaxhighlight>
<pre>
There is no output shown in the DOS window. &nbsp; This REXX program (using Regina REXX) also
Line 384 ⟶ 558:
===Version 2===
one statement is enough
<langsyntaxhighlight lang="rexx">_+=1</langsyntaxhighlight>
<pre>
H:\>regina crash
Line 397 ⟶ 571:
===Version 3===
even shorter
<syntaxhighlight lang ="rexx">+</langsyntaxhighlight>
<pre>
H:\>rexx crash
Line 409 ⟶ 583:
 
=={{header|Ring}}==
<langsyntaxhighlight lang="ring">
try
see 5/0
Line 415 ⟶ 589:
see "Catch!" + nl + cCatchError
done
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 422 ⟶ 596:
</pre>
=={{header|Ruby}}==
<langsyntaxhighlight lang="ruby">
raise
</syntaxhighlight>
</lang>
{{out}}
<pre>
1:in `<main>': unhandled exception
</pre>
 
=={{header|Rust}}==
Rust provides the panic! macro for stopping execution when encountering unrecoverable errors. This results in a crash, rather than a normal exit.
<syntaxhighlight lang="rust">
fn main(){panic!("");}
</syntaxhighlight>
{{out}}
<pre>
thread 'main' panicked at '', src\main.rs:1:12
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
</pre>
 
Line 434 ⟶ 619:
Swift provides a built-in function whose sole purpose is to stop execution in the event of unrecoverable errors. This is different from the standard exit function, as it causes an actual trap (i.e. program crash). As such, it uses the special return value of <code>Never</code>, which allows it to be used in returns that normally expect another type.
 
<langsyntaxhighlight lang="swift">fatalError("You've met with a terrible fate, haven't you?")</langsyntaxhighlight>
 
{{out}}
Line 443 ⟶ 628:
 
=={{header|Tiny BASIC}}==
<syntaxhighlight lang ="tinybasic">0 gosub 0</langsyntaxhighlight>
 
=={{header|V (Vlang)}}==
<syntaxhighlight lang="v (vlang)">fn main() { panic(0) }</syntaxhighlight>
 
=={{header|Wren}}==
<langsyntaxhighlight ecmascriptlang="wren">Fiber.abort("")</langsyntaxhighlight>
 
=={{header|XBS}}==
Calling the error function in the standard library should stop all running code.
<langsyntaxhighlight lang="xbs">error("Crashed");</langsyntaxhighlight>
{{out}}
<pre>
Line 460 ⟶ 648:
Pi OS, and just hangs (in some cases such that Ctrl+Alt+Del doesn't even
work) under MS-DOS.
<syntaxhighlight lang XPL0="xpl0">proc Recurse; Recurse; Recurse</langsyntaxhighlight>
 
=={{header|Z80 Assembly}}==
{{wont work with|Game Boy}}
The CPU will halt and will require a reset. (Earlier there was a mention that the Game Boy is different in this regard - that was an error; it is not.)
<langsyntaxhighlight lang="z80">di
halt</langsyntaxhighlight>
1,981

edits