# Shortest infinite loop producing no output

The point of this challenge is to create an infinite loop producing no output, unlike its possible duplicate. The reason to this is because the code might be shorter if no output is given.

## Rules

• Each submission must be a full program.
• You must create the shortest infinite loop.
• Even if your program runs out of memory eventually, it is still accepted as long as it is running the whole time from the start to when it runs out of memory. Also when it runs out of memory, it should still not print anything to STDERR.
• The program must take no input (however, reading from a file is allowed), and should not print anything to STDOUT. Output to a file is also forbidden.
• The program must not write anything to STDERR.
• Feel free to use a language (or language version) even if it's newer than this challenge. -Note that there must be an interpreter so the submission can be tested. It is allowed (and even encouraged) to write this interpreter yourself for a previously unimplemented language. :D
• Submissions are scored in bytes, in an appropriate (pre-existing) encoding, usually (but not necessarily) UTF-8. Some languages, like Folders, are a bit tricky to score - if in doubt, please ask on Meta.
• This is not about finding the language with the shortest infinite loop program. This is about finding the shortest infinite loop program in every language. Therefore, I will not accept an answer.
• If your language of choice is a trivial variant of another (potentially more popular) language which already has an answer (think BASIC or SQL dialects, Unix shells or trivial Brainf**k-derivatives like Alphuck), consider adding a note to the existing answer that the same or a very similar solution is also the shortest in the other language.
• There should be a website such as Wikipedia, Esolangs, or GitHub for the language. For example, if the language is CJam, then one could link to the site in the header like #[CJam](http://sourceforge.net/p/cjam/wiki/Home/), X bytes.
• Standard loopholes are not allowed.

(I have taken some of these rules from Martin Büttner's "Hello World" challenge)

Please feel free to post in the comments to tell me how this challenge could be improved.

## Catalogue

This is a Stack Snippet which generates both an alphabetical catalogue of the used languages, and an overall leaderboard. To make sure your answer shows up, please start it with this Markdown header:

# Language name, X bytes


Obviously replacing Language name and X bytes with the proper items. If you want to link to the languages' website, use this template, as posted above:

#[Language name](http://link.to/the/language), X bytes


Now, finally, here's the snippet: (Try pressing "Full page" for a better view.)

var QUESTION_ID=59347;var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";var COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk";var OVERRIDE_USER=41805;var answers=[],answers_hash,answer_ids,answer_page=1,more_answers=true,comment_page;function answersUrl(index){return"//api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+index+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(index,answers){return"//api.stackexchange.com/2.2/answers/"+answers.join(';')+"/comments?page="+index+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:true,success:function(data){answers.push.apply(answers,data.items);answers_hash=[];answer_ids=[];data.items.forEach(function(a){a.comments=[];var id=+a.share_link.match(/\d+/);answer_ids.push(id);answers_hash[id]=a});if(!data.has_more)more_answers=false;comment_page=1;getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:true,success:function(data){data.items.forEach(function(c){if(c.owner.user_id===OVERRIDE_USER)answers_hash[c.post_id].comments.push(c)});if(data.has_more)getComments();else if(more_answers)getAnswers();else process()}})}getAnswers();var SCORE_REG=/<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;var OVERRIDE_REG=/^Override\s*header:\s*/i;function getAuthorName(a){return a.owner.display_name}function process(){var valid=[];answers.forEach(function(a){var body=a.body;a.comments.forEach(function(c){if(OVERRIDE_REG.test(c.body))body='<h1>'+c.body.replace(OVERRIDE_REG,'')+'</h1>'});var match=body.match(SCORE_REG);if(match)valid.push({user:getAuthorName(a),size:+match[2],language:match[1],link:a.share_link,});else console.log(body)});valid.sort(function(a,b){var aB=a.size,bB=b.size;return aB-bB});var languages={};var place=1;var lastSize=null;var lastPlace=1;valid.forEach(function(a){if(a.size!=lastSize)lastPlace=place;lastSize=a.size;++place;var answer=jQuery("#answer-template").html();answer=answer.replace("{{PLACE}}",lastPlace+".").replace("{{NAME}}",a.user).replace("{{LANGUAGE}}",a.language).replace("{{SIZE}}",a.size).replace("{{LINK}}",a.link);answer=jQuery(answer);jQuery("#answers").append(answer);var lang=a.language;lang=jQuery('<a>'+lang+'</a>').text();languages[lang]=languages[lang]||{lang:a.language,lang_raw:lang,user:a.user,size:a.size,link:a.link}});var langs=[];for(var lang in languages)if(languages.hasOwnProperty(lang))langs.push(languages[lang]);langs.sort(function(a,b){if(a.lang_raw.toLowerCase()>b.lang_raw.toLowerCase())return 1;if(a.lang_raw.toLowerCase()<b.lang_raw.toLowerCase())return-1;return 0});for(var i=0;i<langs.length;++i){var language=jQuery("#language-template").html();var lang=langs[i];language=language.replace("{{LANGUAGE}}",lang.lang).replace("{{NAME}}",lang.user).replace("{{SIZE}}",lang.size).replace("{{LINK}}",lang.link);language=jQuery(language);jQuery("#languages").append(language)}}
body{text-align:left!important}#answer-list{padding:10px;width:500px;float:left}#language-list{padding:10px;padding-right:40px;width:500px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table>

• I've got to start posting programs with a negative byte count to beat all these empty files! – CJ Dennis Oct 3 '15 at 4:32
• This challenge is interesting because it brings out lots of 0 byte languages (some of which are NOT esolangs). FWIW, most declarative languages have an implicit infinite loop because declarative languages don't have loops in their syntax (they assume they're running in an infinite loop). Ladder diagrams are perhaps among the oldest such languages. Then you have the Instruction Language (IL), a sort of assembly for PLCs that also assume an infinite loop. ILs, like assembly are different between manufacturers – slebetman Oct 5 '15 at 9:36
• Are programs that read and execute their own source code allowed, or does file I/O break the "must take no input" rule? – ThisSuitIsBlackNot Oct 6 '15 at 13:05
• @ThisSuitIsBlackNot Yes, file input is allowed. – user41805 Oct 6 '15 at 16:47
• Can you print "", an empty string? – OldBunny2800 Mar 7 '16 at 23:39

# Linux shebang, 5 bytes

#!./a


Must be named as a.

Will run out of memory, but this is an infinite loop.

• I can't believe nobody's thought of this! +1 – Rɪᴋᴇʀ Jun 8 '16 at 9:02
• Which system? On Ubuntu exec is a Bash built-in, so I can't specify it as script interpreter. – manatwork Jun 8 '16 at 9:09
• @manatwork oh, sorry, i forgot that it is built-in. fixed – username.ak Jun 8 '16 at 9:11
• Not runs out of memory: “bash: ./a: ./: bad interpreter: Too many levels of symbolic links”. (Though no actual symlink involved.) Well, infinite for 0.001 second. – manatwork Jun 8 '16 at 12:55
• Not working ...bad interpreter... better put ./a alone in the script. If you want to avoid out of memory use ./a& . That's fun if you ps after. That last script will put your computer in a race of creating processes and managing dead processes – Emmanuel Sep 27 '16 at 22:23

# Brachylog, 2 bytes

=\


Takes no input and no output.

### Explanation

= will label the input with an integer. \ is always false and will therefore trigger backtracking. Since the input has no constraints, it will unify as following, through backtracking: 0, then 1, then -1, then 2, etc. This will go on forever.

# Sesos, 2 bytes

0000000: 080a                                              ..


Try it online! Check Debug to see the generated binary code.

### How it works

The binary file above has been generated by assembling the following SASM code.

nop       ; Set an entry marker.
add 1 ; Increment the current cell.
; (implicit jnz)
;     If the integer in the current cell is non-zero,


# Gaot++, 27 bytes

bleeeet bleeeeeet bleeeeeet


bleeeet enters the loop, and bleeeeeet bleeeeeet switches IP direction repeatedly.

• fun fact: if you're a goat and you say this program you will rotate in a circle forever – Downgoat Jul 26 '16 at 20:00

# Element, 3 bytes

!{}


The control stack is initially empty, the ! negates it to truthy, and {} is a loop-while-true which never ends.

## DC, 6 bytes

[dx]dx


...puts the constant string [dx] on the stack, duplicate it (d command), pop and interprete string (x command)...

# Bash or perl, 6 bytes

exec$0  I realize that are both bash solutions and perl solutions this length or shorter, but there are no dual-language solutions. Yup, it runs with either language. • Bash answers are always nice to see! Welcome to PPCG. – Steven H. Sep 28 '16 at 0:40 ## Bash, 10 2 bytes $0


# µ6, 1 byte

@+


Try it online!

### Explanation

The µ-operator takes a function and returns the least $n$ that results in a $0$ and since there is no $n$ such that $n+1 = 0$ this program won't terminate:

@   -- µ-operator applied to
+  -- | successor function


# Lua, 9 bytes

Here are all of the different ways (that I know of) to make an infinite loop in Lua, from shortest to longest:

Goto loop (Lua 5.2.0 beta-rc1 only) at 9 bytes:

@a:goto a


This is no longer possible in the latest version of Lua since the syntax for goto has changed, so this is now the shortest infinite loop at 11 bytes:

::a::goto a


The best that you can do using a while loop is 13 bytes by using an empty string, which Lua considers to be truthy, as the conditional:

while""do end


Here is a 14 byte repeat until loop using an uninitialized variable, which is always nil, as the conditional:

repeat until a


Tied with the return until loop, as well as my personal favorite, a recursive function using load() at 16 14 bytes: (-2 bytes thanks to Jonathan French)

f=load"f()"f()


An infinite for loop made by Jo King at 18 bytes:

for _=1,1,0 do end


Finally, the longest of the methods that I know of, a normal recursive function at 22 bytes:

function f()f()end f()


I'm curious to see if anyone can find some other methods.

• I think for _=1,1,1e-16 do end (22 bytes) could work as an infinite for loop. – Jonathan Frech Aug 6 '18 at 2:01
• Could the outer parentheses in f=load("f()")f() not be omitted? – Jonathan Frech Aug 6 '18 at 2:11
• Thanks for the suggestion with the load loop, that would work. However wouldn't the for loop that you suggested eventually end, given enough time? – GalladeGuy Aug 7 '18 at 2:09
• Well now I feel dumb for not thinking of that myself. Added. – GalladeGuy Aug 7 '18 at 2:24
• I based my loop on the fact that 1+1e-16 == 1; I guess using an actual zero works too ... – Jonathan Frech Aug 7 '18 at 12:38

# Stack Cats-m, 5 4 bytes

{>}I


Try it online!

-1 byte thanks to negative seven

        Since there is no input, the stack starts with nothing but -1 on the top.
{       Remember the current value on top of the stack, and loop:
>      Move the head right on the tape of stacks. (All of them are filled with zeroes.)
}     Repeat while the top of the stack is not as it was remembered.
I    Since the loop goes on forever, this is just to make the program legal.

• Since the choice of central involution doesn't matter, the shortest corresponding program without a flag to mirror is -(>)(<)-, which is not a cat program on account of failing to terminate. – Unrelated String May 31 '19 at 6:56
• You can save a byte by using a {} loop, removing the need for -. – negative seven May 31 '19 at 8:50
• Ah, thanks! I was sure that was the right loop until I actually figured out what I was doing, and then I promptly forgot. – Unrelated String May 31 '19 at 8:54

# Spin, 13 Bytes

File x.spin:

pub x
repeat


(without trailing newline)

Compile and download it to your P8x32a microcontroller or run it using spinsim.

# Scala, 12 bytes

while(1>0){}


# AutoIt3, 12 bytes

While 1
WEnd


Simply loop indefinitely. Nothing much to say.

# BBC Basic for Windows, 3 or 6

http://www.bbcbasic.co.uk/bbcwin/bbcwin.html

RUN

3 ASCII characters. Note in this version of BBC basic line numbers are not required.

If you don't consider termination and self-execution a loop, then the shortest program is

1GOTO1

6 ASCII characters.

One might expect these to be shorter in the tokenized version (1 byte per keyword), but it seems they are not, due to the way line numbers / internal ID's are stored.

• Why not 1G.1? – Neil Oct 3 '15 at 20:44

# GNU sed, 3 bytes

:;b


Using this meta answer as justification for the relaxation of the no-input rule.

: defines a (nameless) label, ; is a line/command separator, b jumps to the label.

Nameless labels seems to be a GNU extension.

• Nameless labels seems to be a bug. – Ben Oct 2 '15 at 20:33
• @Ben From your link "Not really a bug as such" - I prefer "undocumented feature" ;-) Fair game for codegolf, IMO... Don't use it in production code though. – Digital Trauma Oct 2 '15 at 20:42

# Math++, 3 bytes

1>\$


Basically a GOTO 1 statement- on line 1.

# R, 9 8 bytes

repeat 1


Saved 1 byte thanks to MickyT!

• You can use repeat 1 for 1 byte saving. – MickyT Oct 2 '15 at 20:24
• @MickyT Nice, I always forget about repeat. Thanks! – Alex A. Oct 2 '15 at 20:26

# Self-modifying Brainfuck, 3 bytes

Same effect as in regular BF. Increment the cell and loop forever. -[] is the same.

+[]


Since the source code in placed on the tape, this is also acceptable, and only works in SMBF:

<[]


If the tape were actually infinite, [ or ] would work, since the interpreter would search for the matching bracket forever. Unfortunately (fortunately?), you just get an "index out of bounds" error.

# AutoIt, 10 bytes

Do
Until 0


Lame.

• AutoIt was my first programming language and this solution is good as well... So Plus One! :) – Arjun May 12 '16 at 10:34

# Julia, 13 12 bytes

while 1<2end


Yawn. I tried a map and a for loop, but to no avail...

EDIT: Someone pointed out that I could shorten the program by removing parentheses. Thanks!

Alternatively, if stack-overflowing infinite recursion counts as infinite (11 bytes):

i()=i();i()

• You don't need the parentheses around 1<2 (in fact it's rather "un-Julian" to have them there). – Alex A. Oct 2 '15 at 21:24
• Why isn't 1 True, or why isn't 1<2 1? (That is, why doesn't Juila implement bool as a "subclass" of int, like Python does, which is endlessly useful?) – cat Mar 19 '16 at 18:38

# ferNANDo, 7 bytes

1 1
1
1


Line 1 initializes 1 to 1, line 2 marks the beginning of the loop, and line 3 marks the end (a single variable statement loops back to the previous occurrence, if any, for as long as the variable is true).

# StackStream, 21 bytes

{ dup exec } dup exec


Kind-of explanation thingy:

{ dup exec } # Push this piece of code onto the data stack.
dup # Duplicate it (stack: { dup exec } { dup exec })
exec # Execute it (stack: { dup exec })

• Oh, someone else made a badly-parsed stack-based language? Yay! – CalculatorFeline Mar 20 '16 at 2:18

# gs2, 2 bytes

CP437: ►3

Hex dump: 10 33

Tries to split whatever is on STDIN into chunks of length 0. We never actually split off any chunks, not even from an empty string, so this takes forever.

Note that gs2 doesn't have any traditional looping constructs.

(Mitch Schwartz found this and told me about it, and I thought it was a really cute feature.)

• What GS2 version is this? It immediately stops on the current version for me – LegionMammal978 Sep 22 '16 at 0:41