Brainfuck

Brainfuck
Tilblivelse1993
ParadigmeMulti-paradigme: Esoteric programming, imperativ programmering
Utviklet avUrban Müller
Filendelse(r).b, .bf
Påvirket av
P′′, FALSE

Brainfuck er et programmeringsspråk kjent for sin ekstreme minimalisme. Det ble designet for å utfordre og underholde programmerere, og passer ikke for praktisk bruk.

Språkdesign

Urban Müller utviklet Brainfuck rundt 1993 i den hensikt å skape et språk som kunne bli implementert med en minst mulig kompilator [1]. Det har blitt skrevet flere Brainfuck-kompilatorer på mindre enn 200 bytes. Den klassiske distribusjonen er Müllers versjon 2, som inneholder en kompilator for Amiga, en tolker, eksempelprogrammer, og et lesmeg (readme)-dokument.

Språket består av åtte kommandoer, listet nedenfor. Et Brainfuck-program er en rekke av disse kommandoene, noen ganger med andre tegn imellom (som blir ignorert). Kommandoene blir kjørt sekvensielle, med unntak notert nedenfor.

Brainfuck-språket bruker en enkel maskinmodell som utenom selve programmet består av en rekke med 30,000 byte-celler initialisert til null, en bevegelig peker i rekken og to strømmer av bytes for inn- og utdata (vanligvis koblet til et tastatur og en skjerm, og med ASCII tegnsettet).

Kommandoer

De åtte språkkommandoene, hver bestående av ett enkelt tegn, er som følger:

Tegn Mening
> øk pekeren (til å peke på nærmeste celle til høyre).
< minsk pekeren (til å peke på nærmeste celle til venstre).
+ øk (med én) byten på pekeren.
- minsk (med én) byten på pekeren.
. skriv ut byten på pekeren.
, aksepter én byte med inndata og lagre den i byten på pekeren.
[ hopp forover til kommandoen etter den tilhørende ] hvis byten på pekeren er null.
] hopp tilbake til kommandoen etter den tilhørende [ hvis byten på pekeren ikke er null.

Eksempler

Hello World!

Det følgende programmet skriver «Hallo Verden!» og en newline:

++++++++++
[
   >+++++++>++++++++++>+++>+<<<<-
]
>++. print 'H'
>---. print 'a'
+++++++++++. 'l'
. 'l'
+++. 'o'
>++. mellomrom
<<++++++++++++++. 'V'
>----------. 'e'
+++++++++++++. 'r'
--------------. 'd'
+. 'e'
+++++++++. 'n'
>+. '!'
>. newline

For lesbarhetens skyld har koden blitt spredt utover mange linjer og kommandoer blitt lagt til. Brainfuck behandler alle tegn utenom +-<>[],. som kommentarer, så ingen spesiell syntaks for kommentarer trengs. Koden kunne like gjerne blitt skrevet som:

++++++++++[>+++++++>++++++++++>+++>+<<<<-]
>++.>---.+++++++++++..+++.>++.<<++++++++++++++.>--- 
-------.+++++++++++++.--------------.+.+++++++++.>+.>.

Trivielt

Enkel løkke

,[.,]

En løkke som mottar tekst fra tastaturet og skriver det til skjermen.

Pekermanipulasjon

>,[.>,]

En versjon av det forrige som i tillegg lagrer alle inndata i rekken med bytes ved å flytte pekeren hver gang.

Addisjon

[->+<]

Denne legger byten på den nåværende posisjonen til byten på den neste posisjonen.

Kopiering

[->>+<<]>>[-<+<+>>]

Denne kopierer byten fra den nåværende posisjonen til neste posisjon, ved å bruke en tredje posisjon som temporær byte.

Eksterne lenker

  • Brainfuck interpreter with integrated debugger (IDE) for Windows
  • v
  • d
  • r
A# · ActionScript · Ada · Alef · ALGOL · ALGOL 58 · ALGOL 60 · ALGOL 68 · ALTRAN · APL · AppleScript · Argus · Assembler · Autokode · awk ·· BASIC · BCPL · BETA · BitC · BLISS · Bourne Shell ·· C++ · C-- · CHILL · C# · C shell · Caml · Ch · Cilk · Cilk++ · Cilk Plus · Clarion · Clipper · CLISP · Clojure · CLU · COBOL · COMAL · Common Lisp · Concurrent C · Concurrent Euclid · Concurrent Pascal · C shell ·· Delphi · Dylan · ECMAScript · Eiffel · Emacs Lisp · Erlang · Euclid · F* · F# · Forth · Fortran · GNU Common Lisp · GNU Pascal · Go · Haskell · HyperTalk · Incr Tcl · INTERCAL · Interlisp · Java · JavaScript · JRuby · LaTeX · Legoscript · LilyPond · Limbo · Lisp · LPC · Lua · Lynx · Mary · MATLAB · Mesa · ML · MML · Modula · Modula-2 · Modula-2+ · MUMPS · Objective-C · Objective-C++ · OCaml · OpenVera · O'Haskell · Pascal · Perl · PHP · Pike · PL/I · Plankalkül · PLEX · Prolog · Protel · Pure Data · Python ·· Ratfor · REXX · RTL/2 · Ruby · Rust · SAS · Scala · Scheme · Scratch · Simula · SML · Smalltalk · SNOBOL · Tcsh · Tcl · TECO · TOM · Turbo Basic · Turbo Pascal · Verilog · Visual Prolog · Turing · TypeScript · Vala · VHDL · Visual Basic
Autoritetsdata