118
\$\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\$
  • 41
    \$\begingroup\$ I've got to start posting programs with a negative byte count to beat all these empty files! \$\endgroup\$ – CJ Dennis Oct 3 '15 at 4:32
  • 3
    \$\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 '15 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\$ – ThisSuitIsBlackNot Oct 6 '15 at 13:05
  • 1
    \$\begingroup\$ @ThisSuitIsBlackNot Yes, file input is allowed. \$\endgroup\$ – Cows quack Oct 6 '15 at 16:47
  • \$\begingroup\$ Can you print "", an empty string? \$\endgroup\$ – OldBunny2800 Mar 7 '16 at 23:39

450 Answers 450

2
\$\begingroup\$

Alice, 0 bytes

Try it online!

The empty program in Alice does nothing... in particular it doesn't terminate.

\$\endgroup\$
2
\$\begingroup\$

Triangular, 3 bytes

\/<

Triangular is my first attempt at a two-dimensional esoteric language. Code is formatted into the smallest possible triangle - in this case, a triangle of size two. The IP starts moving Southeast from the top of the triangle.

The above code arranges into this triangle:

 \
/ <

Commands:

  • \ direct IP Southeast (towards the <)
  • < direct IP West (towards the /)
  • / direct IP Northeast (towards the \)
\$\endgroup\$
  • \$\begingroup\$ I think you mean a triangle of size two. \$\endgroup\$ – Leaky Nun Jun 16 '17 at 16:51
  • \$\begingroup\$ @LeakyNun Oh... duh. \$\endgroup\$ – MD XF Jun 16 '17 at 16:52
  • \$\begingroup\$ 2 bytes with ,/ \$\endgroup\$ – squid Jun 3 at 15:52
2
\$\begingroup\$

Brain-Flak, 8 bytes

(()){()}

Explanation: 

(())   - Puts one on the top of the stack
{  }   - Runs until the top of the stack is zero
 ()    - Filler so that the above function runs

Try it online!

\$\endgroup\$
2
\$\begingroup\$

Piet, 2 codels

Can be interpreted and executed using, for example, PietDev, by either

  • setting the canvas' width to 2, height to 1 and coloring the codels yourself or
  • clicking on "Open", setting the codel width to 25 and uploading the above image.

Click the step button repeatedly to see the program rotate and loop or the run button to freeze the page.

Edit: Try It Online

Edit 2: Just saw that someone already beat me to it.

\$\endgroup\$
2
\$\begingroup\$

Retina, 10 bytes

I'm pretty sure this can be made shorter.


0
+T`d`10
\$\endgroup\$
  • \$\begingroup\$ Can't you just do + followed by nothing? \$\endgroup\$ – kirbyfan64sos Oct 2 '15 at 19:06
  • \$\begingroup\$ @kirbyfan64sos + loops until the input no longer changes. \$\endgroup\$ – TheNumberOne Oct 2 '15 at 19:07
  • \$\begingroup\$ I know. But, if you're replacing nothing with nothing, the input will never change, right? \$\endgroup\$ – kirbyfan64sos Oct 2 '15 at 19:08
  • \$\begingroup\$ Ah, nevermind. I was thinking backwards. \$\endgroup\$ – kirbyfan64sos Oct 2 '15 at 19:09
  • \$\begingroup\$ @kirbyfan64sos Exactly; therefore it would only loop once. \$\endgroup\$ – TheNumberOne Oct 2 '15 at 19:09
2
\$\begingroup\$

Forth, 21 bytes

Unfortunately, you can't make a word that calls itself without using the keyword recursive, so I use a standard infinite loop instead.

: f begin 0 until ; f

Try it online

\$\endgroup\$
  • \$\begingroup\$ Errors with stack overflow on gforth. What did you test this on? \$\endgroup\$ – NieDzejkob Mar 6 '18 at 14:20
2
\$\begingroup\$

C (tcc), x86_64, 10 bytes

main=-277;

Try it online!

How it works

This writes the int -277 (ebfeffff in little endian) to the memory location of main.

eb is JMP and is to be followed by a signed 8-bit address indicating where to jump to. fe is -2, so we jump back to eb and start over.

\$\endgroup\$
2
\$\begingroup\$

Javascript, 8 bytes

for(;;);

An empty for with no condition does the trick.

\$\endgroup\$
  • 1
    \$\begingroup\$ Welcome to PPCG! \$\endgroup\$ – Martin Ender Mar 1 '18 at 16:21
  • \$\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\$ – Cows quack Apr 14 '18 at 19:16
2
\$\begingroup\$

beeswax, 3 bytes

O_O

or alternatively

j_j

or

>_<

All three create two bees that get reflected back and forth indefinitely.

\$\endgroup\$
2
\$\begingroup\$

TI-BASIC, 4 Bytes

While 1
End

Also:

Lbl A
Goto A



This last language isn't really an answer, as the language does not exist… yet. So, yeah, just some information, and how one might accomplish this task

Simplex, 1 Byte

O

Simple enough. Simplex has the O command, which goes to the _N_th character in the source code, with N being the current byte. Since, by default, a byte is 0, this continues to go to the first character in the source code (zero-based).

\$\endgroup\$
  • 1
    \$\begingroup\$ TI-BASIC is 4 bytes. The 10-byte program header is counted in the MEM menu, but not here. \$\endgroup\$ – lirtosiast Oct 2 '15 at 19:39
  • \$\begingroup\$ Oh! Thanks. ^_^ \$\endgroup\$ – Conor O'Brien Oct 2 '15 at 20:35
  • \$\begingroup\$ Why not simply, for a program named W, :pgrmW? \$\endgroup\$ – DDPWNAGE Feb 17 '16 at 7:38
  • \$\begingroup\$ @DDPWNAGE because then (1) I would have to include the ten byte header, and/or (2) because the calculator will run out of resources. \$\endgroup\$ – Conor O'Brien Feb 17 '16 at 12:47
2
\$\begingroup\$

Pepe, 6 bytes

REEReE

Try it online!

Begin loop, end loop. No need to explain it much.

Also, for fun: REE ReE reeE makes the permalink #FBI.

\$\endgroup\$
2
\$\begingroup\$

Shakespeare Programming Language, 61 bytes

,.Ajax,.Act I:.Scene I:.[Exeunt][Enter Ajax]Ajax:Let usAct I.

Try it online!

It's totally legal to only ever use one character in a play; just don't make him do anything other than loop the program forever, exiting and entering the stage constantly.

\$\endgroup\$
2
\$\begingroup\$

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.
\$\endgroup\$
  • \$\begingroup\$ 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. \$\endgroup\$ – Unrelated String May 31 at 6:56
  • 1
    \$\begingroup\$ You can save a byte by using a {} loop, removing the need for -. \$\endgroup\$ – negative seven May 31 at 8:50
  • \$\begingroup\$ Ah, thanks! I was sure that was the right loop until I actually figured out what I was doing, and then I promptly forgot. \$\endgroup\$ – Unrelated String May 31 at 8:54
1
\$\begingroup\$

Swift, 12 bytes

while(1>0){}
\$\endgroup\$
  • 1
    \$\begingroup\$ What about while(1){}? \$\endgroup\$ – user63571 Jan 30 '17 at 17:58
1
\$\begingroup\$

Ada, 49 47 bytes

procedure L is begin loop null;end loop;end L;

I'm guessing there aren't many Ada entries on Code Golf!

Naturally it should look like

procedure L is 
begin 
   loop 
      null; 
   end loop; 
end L;

and do exactly what it says on the tin.

\$\endgroup\$
  • 1
    \$\begingroup\$ Can you remove the spaces after the semicolons? \$\endgroup\$ – kirbyfan64sos Oct 2 '15 at 20:30
  • \$\begingroup\$ Yes ... 47 bytes. Thanks! (even though it's making me grind my teeth to look at :-) \$\endgroup\$ – Brian Drummond Oct 2 '15 at 21:01
1
\$\begingroup\$

Snowman 1.0.2, 6 chars

~:1;bD

~ sets all the variables to active, :...;bD is a "do" loop (i.e. continues looping while the block returns a truthy value), and 1 is 1.

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

Rust, 17 chars

fn main(){loop{}}

Nothing much interesting to see here.

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

FlogScript, 6 bytes

This creates a string containing code for duplicating the top value on the stack, then popping it and executing it as code. Then it is duplicated, popped, and executed as code.

{.~}.~
\$\endgroup\$
1
\$\begingroup\$

Lua, 11 bytes

In Lua, you can set labels that can be used with the goto statement!

::y::goto y
\$\endgroup\$
1
\$\begingroup\$

HALT, 7 bytes

1 SET 1

This set's the pointer to 1, this is run forever because there is no HALT; command. This will bybass fail-safes to prevent infinite looping.

Try This

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

CoffeeScript, 6 bytes

loop 0

Interesting fact thanks to Martin Büttner, not sure if there's any practical use to it though.

Previous attempt (8 bytes):

1while!0

There is only a while loop, no for (though there are for..in and for..of).

\$\endgroup\$
  • \$\begingroup\$ CoffeeScript actually has a keyword for infinite loops: loop 1 \$\endgroup\$ – Martin Ender Oct 2 '15 at 19:19
1
\$\begingroup\$

Basilisk, 5 bytes

:A1gA

Pretty simple.

Explanation

  • :A

Defines position A.

  • 1gA

Pushes one and goes to position A in code. Since the gA pops the top value in stack, if the loop were ever to end, it would not print anything.

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

STATA, 10 bytes

while 1{
}

Apparently for loops in STATA always halt, but while loops can be infinite.

\$\endgroup\$
  • \$\begingroup\$ Is the line break needed? I've never used STATA \$\endgroup\$ – Albert Renshaw May 12 '16 at 20:14
  • 1
    \$\begingroup\$ @AlbertRenshaw The line break is required, and it will throw a syntax error if it is not there. See stata.com/manuals13/pwhile.pdf#pwhile for details. \$\endgroup\$ – bmarks May 17 '16 at 14:19
  • \$\begingroup\$ What about a: goto a? :D 9 bytes —— stata.com/manuals14/m-2goto.pdf \$\endgroup\$ – Albert Renshaw May 17 '16 at 17:42
  • \$\begingroup\$ In-fact, the space after a: might not be needed, I don't have STATA so I can't test but I'd imagine it's possible to omit the space and get it down to 8 bytes \$\endgroup\$ – Albert Renshaw May 17 '16 at 17:44
1
\$\begingroup\$

Objective-C, 1716

-(id)a{for(;;);}
\$\endgroup\$
1
\$\begingroup\$

Java6 : 50 Bytes

In Java 6 and previous versions you can execute static initialization block without having main in your class file.

class A{static{for(int i=1;i>0;);System.exit(0);}}
\$\endgroup\$
  • 1
    \$\begingroup\$ Wouldn't for(;;); work just as well as for(int i=1;i>0;);, or is there some restriction in Java 6? \$\endgroup\$ – ETHproductions Oct 4 '15 at 0:00
  • 1
    \$\begingroup\$ while(true) is shorter than and as valid as for(int i=1;i>0;). \$\endgroup\$ – dorukayhan May 29 '16 at 15:47
1
\$\begingroup\$

VBScript, 17 bytes

do
loop while 1
\$\endgroup\$
1
\$\begingroup\$

Pascal, 32 bytes

program l;begin while 1=1do;end.

A full program in just one line.

  • program l;: Start a new Pascal program
  • begin: Begin a code section
  • while 1=1do;: Do nothing (; / NOP) as long as 1=1, which shorter than true. Identifiers (do for instance) are not allowed to begin with a digit, so we can omit the space here and save one byte.
  • end.: End the code section
\$\endgroup\$
1
\$\begingroup\$

C++, 15 bytes

Same as C:

main(){main();}
\$\endgroup\$
  • 4
    \$\begingroup\$ stackoverflow.com/a/2532922 says "The C++ Standard says that you may not call main() from your own code." \$\endgroup\$ – Neil Oct 3 '15 at 20:50
  • 2
    \$\begingroup\$ PPCG says "if your code works on some environment, it's fine", and it works for me. A standards-complying solution would be int main(){for(;;);}, I think. \$\endgroup\$ – Lynn Oct 4 '15 at 19:21
1
\$\begingroup\$

F#, 14 bytes

while 0<1 do()

Self-explanatory.

\$\endgroup\$
  • \$\begingroup\$ Also works in Standard ML \$\endgroup\$ – Demi Oct 11 '15 at 0:05
  • \$\begingroup\$ Nice one. I thought doing it via recursion would be shorter, but this beats it by a byte. =) \$\endgroup\$ – Roujo Feb 15 '16 at 22:26
1
\$\begingroup\$

AHK, 4 bytes

loop

quick and simple

\$\endgroup\$
  • 1
    \$\begingroup\$ I'm going to disagree with this answer here as this won't execute persistently without a #persistent directive present or a Hotkey (which forces a #Persistent) defined in your script. . AHK is a bracket based language, your loop has no defined brackets and will simply exit after the first iteration, in fact your code won't even perform a single loop. This answer is just wrong. \$\endgroup\$ – errorseven Nov 28 '15 at 20:21
  • 1
    \$\begingroup\$ @ahkcoder wrong,add a msgbox under it to see it does run forever \$\endgroup\$ – downrep_nation Nov 28 '15 at 20:37
  • 1
    \$\begingroup\$ Exactly, you have to add code in order for it execute correctly. Your program is an incomplete implementation, therefore wrong. \$\endgroup\$ – errorseven Nov 28 '15 at 20:45

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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