144
\$\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

566 Answers 566

1
8 9
10
11 12
19
1
\$\begingroup\$

C, 16 bytes

main(){for(;;);}

A simple C loop construct. A for loop does not require curly brackets. 

\$\endgroup\$
2
  • \$\begingroup\$ Is there a particular dialect of C that lets you omit the parenthesis after main? GCC throws an error if I try to compile this. \$\endgroup\$
    – Mark
    Oct 5, 2015 at 7:25
  • \$\begingroup\$ @Mark Whoops, I missed that. Editing \$\endgroup\$
    – awd123
    Oct 5, 2015 at 12:04
1
\$\begingroup\$

Poslin, 20 bytes

[ .true ! | ]while !

This does the part between | and ] as long as the part between [ and | returns the true value.

.true ! creates the true value at compile time.

[ .true & | ]while !

works just the same, but here the operation .true is called on every iteration.

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

Prelude, 3 bytes

1()

Any other non-zero digit could replace the 1. This is essentially the same as the Brainfuck solution (just adding it for completeness).

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

PHP, 10 8 bytes

The for(;;) solution has been posted enough, Time for this one:

while(1)

while(1){}

\$\endgroup\$
1
  • 2
    \$\begingroup\$ You're missing a trailing ;. This will produce a parse error. \$\endgroup\$ Nov 15, 2015 at 9:51
1
\$\begingroup\$

D , 21 bytes

void main(){for(;;);}

No language used with D in it name.

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

Octave, 10 bytes

1 byte shorter than @flawr's answer ...

do until 0

(Haven't tested it in Matlab though...)

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

Sclipting, 6 bytes

Encoded in UTF-16.

到終

This is a while-false loop with an empty body. This assumes that the program input is falsy, but I interpret the problem statement as saying that the input will be empty, so this is fine.

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

Emily, 12 bytes

while^(1)^()

I was a character short of 30 for the body of this post. :/

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

Delphi, 35 bytes

program P;begin while true do;end.

Managed to beat C# this time :)

\$\endgroup\$
1
  • \$\begingroup\$ Whoops just saw the pascal solution - more elegant :( \$\endgroup\$
    – James
    Oct 9, 2015 at 11:52
1
\$\begingroup\$

GOTO++, 19 bytes

§1 GOTOPASMALIN %1

§1 is the label 1

GOTOPASMALIN is a deterministic goto instruction that goes to the label X specified with the argument %X.

goto pas malin literally means Not-clever goto in French. It is named this way because there are keywords in GOTO++ to do goto at random, on a random label in a list, etc.

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

Coffee Script, 9 8 bytes

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

HP48's RPL, 18 bytes

« DO UNTIL 0 END »

You may remove the spaces around the « and » but the calculator will add them again for you.

That's the source size; "binary" size when stored in the calculator is actually longer (25.5 bytes).

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

MIPS, 6 bytes

I didn't use mips for ages, but if i remember correctly, it will be something like that : a: j a;

\$\endgroup\$
1
  • \$\begingroup\$ Actually 4 bytes \$\endgroup\$
    – qwr
    Dec 24, 2015 at 3:34
1
\$\begingroup\$

ShadyAsFuck, 2 bytes

a]

This starts a for loop that never increases or decreases. This can also be represented by

+(

As this is a substitution language for Brainfuck (and there is a more popular answer in that language for this already), please do not consider this for the winning code.

\$\endgroup\$
4
  • \$\begingroup\$ Why the down vote? \$\endgroup\$ Oct 12, 2015 at 19:34
  • 1
    \$\begingroup\$ The downvote isn't mine, but I suppose it's because of this: 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 Brainfuck-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. \$\endgroup\$
    – Dennis
    Oct 12, 2015 at 19:41
  • 1
    \$\begingroup\$ No need for the giant header note. This challenge specifically says newer languages are allowed. \$\endgroup\$
    – Geobits
    Oct 12, 2015 at 20:07
  • \$\begingroup\$ Oh, whoops... Missed that. Thanks. \$\endgroup\$ Oct 12, 2015 at 20:16
1
\$\begingroup\$

Cardinal, 2 bytes

%$

or

$%

In Cardinal each pointer carries exactly 2 unsigned 8 bit values, one active, one inactive. Both are initialized to 0

% creates 4 pointers moving in the cardinal directions.

$ moves the pointer to x,y = active,inactive value of the pointer

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

Staq, 2 bytes

()

( jump to corresponding ) if the top stack value is greater than 0

) jump back to corresponding ( if the top stack value is 0 (or if it does not exist)

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

PARI/GP, 9 bytes

while(1,)

Or equivalently:

until(0,)
\$\endgroup\$
1
\$\begingroup\$

AppleScript, 10 Bytes

In Script Editor... it's 10 bytes, which is way better than I expected nonetheless.

repeat
end

Thanks to @Mark for pointing out that the 0 byte "loop" was no loop at all.

\$\endgroup\$
2
  • \$\begingroup\$ osascript -e "" doesn't loop forever. A quick check with Instruments shows that it's simply performing a blocking read on standard input. \$\endgroup\$
    – Mark
    Oct 19, 2015 at 20:02
  • \$\begingroup\$ Hmm. I'll update, seems that way. Thanks. \$\endgroup\$ Oct 19, 2015 at 20:24
1
\$\begingroup\$

GOLF, 10 bytes

didn't see a golf response

lx:
jmp lx

lx: sets a goto marker, jmp sends you to the marker. Note that the marker name cannot be a single character (as far as I know) because the alphabet characters are reserved for registers.

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

Gema, 18 15 characters

\A=@a{a};a:\P?=

Sample run:

bash-4.3$ gema '\A=@a{a};a:\P?='
\$\endgroup\$
1
\$\begingroup\$

Hassium, 17 Bytes

Calls the main() infinitely.

func main()main()

Run online and see here

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

JacobFck

:A_A

Expanded and commented here

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

ಠ_ಠ, 31 bytes

ಠ4ಠ
ಠ4ಠ
ಠ1ಠ
ಠ?ಠ

Explanation

ಠ4ಠ # Push 4 to the stack [4]
ಠ4ಠ # Push 4 to the stack [4,4]
ಠ1ಠ # Push 1 to the stack [4,4,1]
ಠ?ಠ # Essentially: go to line 4
\$\endgroup\$
7
  • \$\begingroup\$ This needs a special encoding. \$\endgroup\$ Nov 18, 2015 at 10:33
  • \$\begingroup\$ What does that mean? \$\endgroup\$ Nov 18, 2015 at 14:37
  • \$\begingroup\$ As in, a special encoding should be made for this so that it's not too long in bytes. \$\endgroup\$ Nov 18, 2015 at 14:37
  • \$\begingroup\$ Ah, I see. Any suggestions? \$\endgroup\$ Nov 18, 2015 at 14:42
  • \$\begingroup\$ Are there any characters that ಠ_ಠ would never use? \$\endgroup\$ Nov 18, 2015 at 14:43
1
\$\begingroup\$

Pyth, as of 11/3/15: 1 byte

#

There is no trailing space in this version. The requirement that statements have a value has been removed.

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

Haystack, 2 bytes

v|

Haystack is a 2D-based grid language which starts executing in the upper left-hand corner. The characters <>v^ tells the "pointer" in which direction to go. It continues in the same direction until it hits another direction identifier or the needle |.

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

DStack, 3 bytes

skt

Language created by my few days ago

\$\endgroup\$
2
  • \$\begingroup\$ Is there an online interpreter for this language? \$\endgroup\$
    – user41805
    Nov 11, 2015 at 5:34
  • \$\begingroup\$ No, the only interpreter that exists is this, the language I created it a few days ago. \$\endgroup\$ Nov 11, 2015 at 5:40
1
\$\begingroup\$

Minecraft snap. Ver. 15w46a, 2 + 0 = 2 bytes

Note that this version of this "language" was created after the question was asked.

This is using this version of byte counting.

the system

Put inside of an always active repeating command block, it will, indeed, loop forever with no output.

\$\endgroup\$
1
  • \$\begingroup\$ might want to note that this is 1.9 only \$\endgroup\$ Nov 12, 2015 at 23:34
1
\$\begingroup\$

ShapeScript, 8 bytes

'0?!'0?!

This requires the latest version of ShapeScript, since I have just implemented tail call optimization.

The online interpreter will exit quietly after one minute. Try it online!

How it works

'       Push a string that, when evaluated, does the following:
  0?      Push a copy of the topmost item on the stack (i.e., this string).
  !       Evaluate the copy.
'
0?      Push a copy of the topmost item on the stack.
!       Evaluate the copy.
\$\endgroup\$
1
\$\begingroup\$

Thue, 11 bytes

0::=0
::=
0

(Silly 30 character minimum)

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

BASIC, 8 bytes

2 GOTO 1

A simple answer, but hey, it uses basic!

Also, for fun:

Brainf*ck, 3 bytes

+[]
\$\endgroup\$
1
8 9
10
11 12
19

Your Answer

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

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