145
\$\begingroup\$

Your task is to create the shortest infinite loop!

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>

\$\endgroup\$
14
  • 52
    \$\begingroup\$ I've got to start posting programs with a negative byte count to beat all these empty files! \$\endgroup\$
    – CJ Dennis
    Oct 3, 2015 at 4:32
  • 4
    \$\begingroup\$ 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 \$\endgroup\$
    – slebetman
    Oct 5, 2015 at 9:36
  • \$\begingroup\$ Are programs that read and execute their own source code allowed, or does file I/O break the "must take no input" rule? \$\endgroup\$ Oct 6, 2015 at 13:05
  • 1
    \$\begingroup\$ @ThisSuitIsBlackNot Yes, file input is allowed. \$\endgroup\$
    – user41805
    Oct 6, 2015 at 16:47
  • \$\begingroup\$ Can you print "", an empty string? \$\endgroup\$
    – AAM111
    Mar 7, 2016 at 23:39

568 Answers 568

1
11 12
13
14 15
19
1
\$\begingroup\$

XSLT, 173 bytes

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"><xsl:template name="a" match="/"><xsl:call-template name="a"/></xsl:template></xsl:stylesheet>

Requires a trivial XML file as input (<root /> will suffice), since XSLT won't actually do anything unless given input. You can test it here. It's possible to remove some of the spaces or the xmlns:xsl attribute and still have it parse, but most XSLT lint programs will reject the shorter versions, so this is the shortest "correct" XSLT script I could come up with that loops forever.

\$\endgroup\$
1
\$\begingroup\$

Lean Mean Bean Machine, 3 bytes

O
~

Marble spawns at O, drops to ~, which teleports it back up to the top of the column.

\$\endgroup\$
1
\$\begingroup\$

Newline, 3 bytes

i[]

Same as brainfuck answer. Adds one and loops

[i]

also works

{} 

works only if loops[0]=infinity

\$\endgroup\$
1
\$\begingroup\$

Emojicode, 28 bytes

🏁🍇🔁👍🍇🍉🍉
\$\endgroup\$
1
\$\begingroup\$

Cubically, 2 1 byte

)

This should not work, but it does due to how the interpreter handles the number of loops. With no jump points, ) jumps to the beginning of the file, which is )... cue infinite loop.

This is the proper version that will work if I fix the interpreter:

()

( can be jumped to if all provided arguments are truthy (none are provided so they all are). ) can jump back to the most recent ( if all provided arguments are truthy. Once again, none provided so it jumps regardless.

\$\endgroup\$
1
\$\begingroup\$

Java, 23 bytes

enum L{L;L(){for(;;);}}

Works with Java 5 and 6. Not with later versions, not with earlier versions. Just another variation of my "Hello, World!" answer.

Proof of correctness

$ java -version
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
$ cat L.java
enum L{L;L(){for(;;);}}
$ javac L.java
$ java L

Then it hangs.

\$\endgroup\$
1
\$\begingroup\$

JavaScript, 9 bytes

while(1);

Infinite while loop using 1 as a true value

\$\endgroup\$
1
  • \$\begingroup\$ It seems I have been beaten by 1 byte \$\endgroup\$
    – xDest
    Nov 10, 2017 at 20:44
1
\$\begingroup\$

Java (OpenJDK 8), 50 bytes

interface J{static void main(String[]a){for(;;);}}

Try it online!

Since Java 8 interfaces can have method bodies. As they are always public, we save 3 bytes.

\$\endgroup\$
1
\$\begingroup\$

Husk, 2 bytes

ƒI

Try it online!

Explanation

This is the Haskell equivalent of the following

fix :: (a -> a) -> a
fix f = f $ fix f

fix id

where ƒ is fix and I the identity function (id).

\$\endgroup\$
1
  • \$\begingroup\$ achieves the same. \$\endgroup\$ Dec 3, 2017 at 1:01
1
\$\begingroup\$

Whispers, 16 bytes

> 1
>> While 1 1

Try it online!

\$\endgroup\$
1
\$\begingroup\$

Aceto, 1 byte

O

O jumps to the origin of the script. Alternative solutions: Any of v^<>NSEW;§j@

\$\endgroup\$
1
\$\begingroup\$

SNOBOL4 (CSNOBOL4), 10 bytes

L	:(L)
END

Try it online!

Line L is just a goto L, which works perfectly.

\$\endgroup\$
1
\$\begingroup\$

Aceto, 1 byte

O
O jumps back to the origin, which conveniently is where the O is!

Try it online!

I didn't see @L3viathan's post so...

Some multi-byte solutions

  • @1$
  • 1§uu
  • 1§##

  • 3§ _
    | |
    _

Try It Online!

\$\endgroup\$
1
\$\begingroup\$

Swift, 11 bytes

while 0<1{}

Works both compiled and as a shell script.

\$\endgroup\$
2
  • \$\begingroup\$ Welcome to PPCG! \$\endgroup\$
    – 0 '
    Feb 12, 2018 at 10:53
  • \$\begingroup\$ Thanks, @0 '! I'm starting to explore CG-possibilities in Swift despite of its annoying "Expression is too complex" :) \$\endgroup\$ Feb 13, 2018 at 11:26
1
\$\begingroup\$

FALSE, 5 bytes

[1]$#

Explanation:

[ {function start}
 1 {push 1}
] {push function}
$ {duplicate}
# {while loop: pop two functions, run them while the first returns true}

This will quickly use up memory since the body function of the while loop pushes a value which is never popped.

Here's one of the same size which doesn't cause a memory leak, but only works on certain interpreters/compilers:

[1]1#

The second 1 is read as a function pointer, which causes the while loop to jump to the ], skipping the other 1.

\$\endgroup\$
1
\$\begingroup\$

Clojure, 9 bytes (old 15 bytes) thank to @Dennins

(while 1)
\$\endgroup\$
3
  • 1
    \$\begingroup\$ A simple (while 1) would work as well. Try it online! \$\endgroup\$
    – Dennis
    Feb 13, 2018 at 2:51
  • \$\begingroup\$ @Dennins, upvoted \$\endgroup\$
    – NTCG
    Feb 13, 2018 at 3:08
  • 1
    \$\begingroup\$ That was intended as a golfing suggestion; feel free to edit it into your post. \$\endgroup\$
    – Dennis
    Feb 13, 2018 at 3:33
1
\$\begingroup\$

ORK, 132 bytes

There is such a thing as a y.
A y can z.

When a y is to z:
I am to loop.

When this program starts:
I have a y called X.
X is to z.

Try it online!

Defines a class y with a member function z that does nothing but loop. Then instantiates y and calls its z function.

\$\endgroup\$
1
\$\begingroup\$

mIRC v.7.49, 18 16 13 bytes

y while (1) y

This produces an infinite loop when no input is given.

The code is written in the mirc alias window, and to use it, just write /y in any chat window or status window. Also note that mIRC freezes when an infinite loop is encountered.

\$\endgroup\$
0
1
\$\begingroup\$

VBA 7 Bytes

Do
Loop

I like VBA; it does exactly what you tell it

\$\endgroup\$
1
\$\begingroup\$

Javascript, 8 bytes

for(;;);

An empty for with no condition does the trick.

\$\endgroup\$
2
  • 1
    \$\begingroup\$ Welcome to PPCG! \$\endgroup\$ Mar 1, 2018 at 16:21
  • 1
    \$\begingroup\$ Welcome. There already exists an existing answer with the same code, see here. You can check the leaderboard snippet out to see which languages already have answers. \$\endgroup\$
    – user41805
    Apr 14, 2018 at 19:16
1
\$\begingroup\$

Gol><>, 0 bytes

Try it online!

Just for completeness. This works just like zero-byte Befunge infinite loop.

\$\endgroup\$
1
\$\begingroup\$

C (gcc), 16 bytes

main(){for(;;);}

Try it online!

\$\endgroup\$
1
\$\begingroup\$

DUP, 6 bytes

[1][]#                            {infinite while loop}

This is a proper and implementation independent solution. Mama Fun Roll’s 2 byte solution only works with the quirkster Javascript implementation that behaves a bit strangely in some cases.

\$\endgroup\$
1
\$\begingroup\$

Q'Nial7, 22 bytes

WHILE =1 DO 1 ENDWHILE
\$\endgroup\$
1
\$\begingroup\$

Ahead, 1 byte

l

l turns the head left 45 degrees. Since the board is 1x1, the head will keep trying to move but go nowhere. The head never stops until it encounters a @, so this "loops" forever.

I figured this would be more interesting than the alternative solution, one space character.

\$\endgroup\$
1
\$\begingroup\$

HadesLang, 15 bytes

while[true]
end
\$\endgroup\$
1
\$\begingroup\$

LOLZ, 9 Characters

lolloolol

lol: creates the loop statement

loolol: returns the value "1"

\$\endgroup\$
1
\$\begingroup\$

JavaScript (Node.js), 9 bytes

while(1);

Try it online!

\$\endgroup\$
7
  • \$\begingroup\$ The TIO link shows a syntax error. \$\endgroup\$
    – Dennis
    Apr 14, 2018 at 18:22
  • \$\begingroup\$ Weird. I think it broke something in TIO since my code doesn't have any braces. The error is SyntaxError: Unexpected token } <--- my code has no } \$\endgroup\$ Apr 14, 2018 at 18:25
  • \$\begingroup\$ Where does this work then? \$\endgroup\$
    – Dennis
    Apr 14, 2018 at 18:39
  • 1
    \$\begingroup\$ @MuhammadSalman The reason the code doesn't work is because you are declaring a loop with no contents which is not valid syntax for JavaScript. The semicolon is required so that the loop contains a single empty statement. \$\endgroup\$ Apr 15, 2018 at 1:49
  • 1
    \$\begingroup\$ Oh yeah , I forgot. \$\endgroup\$ Apr 15, 2018 at 4:05
1
\$\begingroup\$

Piet, 0 bytes

An empty image will make Piet loop around forever...

\$\endgroup\$
1
\$\begingroup\$

INTERCAL, 16 bytes

(1)DOCOMEFROM(1)

Try it online!

Probably the first time I've managed to get away with not GIVING UP. This program goes to line 1 after line 1 finishes executing. (The shorter (1)DO(1)NEXT very quickly maxes out the NEXT stack and disappears into the black lagoon.)

\$\endgroup\$
1
11 12
13
14 15
19

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.