Brainfuck - una dintre cele mai renumite limbi de programare ezoterice, cu un minimalism special. Se compune din opt echipe, fiecare dintre acestea fiind scrise cu un singur caracter.
Brainfuck a dat naștere mai multe dialecte diferite set de instrucțiuni, metoda de înregistrare sau de punere în aplicare detalii, cum ar fi valoarea maximă a numărului stocat în celulă, sau situația care cauzează interpretarea erorii.
Teoretic, Brainfuck posedă proprietatea Turing-completeness și, prin urmare, poate efectua orice sarcină. În practică, totuși, această limbă este complet inadecvată pentru rezolvarea problemelor din viața reală; chiar și cele mai simple sarcini devin o provocare pentru dezvoltator. Prin urmare, Brainfuck este folosit exclusiv ca model matematic sau pentru divertisment.
Creatorul lui Brainfuck a fost inspirat de FALSE. iar cele 6 comenzi (cu excepția comenzilor intrare-ieșire) coincid exact cu comenzile din limba P ", dar rămâne necunoscut dacă acesta din urmă a influențat dezvoltarea Brainfuck.
Brainfuck utilizează un model de mașină care seamănă cu o mașină Turing și constă din următoarele elemente:
- program - o secvență de comenzi lingvistice cu un singur caracter și, eventual, alte caractere (acestea sunt ignorate în timpul procesării);
- indicatorul de instrucțiune - indică comanda care urmează să fie executată în pasul următor, după executarea ei se trece la o altă comandă (de obicei în partea dreaptă);
- memorie - modelată de o gamă unidimensională de celule, fiecare celulă stocând un octet; valoarea inițială a celulei este zero;
- Indicator de date - indică locația curentă a memoriei; valoarea inițială este celula din stânga a matricei; prin comandă se mișcă sau se modifică valoarea stocată în celula curentă;
- intrări și ieșiri - secvențe de octeți în codarea ASCII.
Trebuie remarcat faptul că, datorită specificității condițională limbii de instruire ramură [și] utilizate în punerea în aplicare a aproape toate operațiunile sunt elementare în alte limbi (Atribuirea valorii, operații matematice și logice, etc.).
Elementele sintaxei:
Bună ziua, lumea!
Există multe modalități de a spune "Bună ziua, lumea!" Pentru Brainfuck. Mai jos este cea mai simplă dintre ele: utilizați o singură celulă de memorie și modificați ulterior valoarea acesteia la codul ASCII al fiecărei litere a mesajului. Fiecare rând din exemplu afișează un caracter.
Bună ziua, lumea!
Acest exemplu utilizează trei celule de memorie de bază - prima pentru literele majuscule „H“ și „W“, una pentru litere mici, iar al treilea pentru semnele de punctuație „“, „“ și „“ - și trei indicele suplimentar al celulei pentru a reduce schimbările de înregistrare Codurile ASCII. Memoria folosită arată astfel:
(celula cu litere mici) (celula index 3) (celula cu semne de punctuație)
Numerele Fibonacci:
Clasicul interpret Brainfuck folosește variabilele tipului de octeți pentru a stoca valorile în celulele de memorie, iar numerele 14-16 ale Fibonacci vor provoca o eroare de depășire. Scriind o aritmetică lungă pe Brainfuck este o sarcină foarte laborioasă, deci exemplul presupune că tipurile întregi pot fi stocate în celulele de memorie.
factorial:
Clasicul interpret Brainfuck folosește variabilele tipului de octeți pentru a stoca valori în celulele de memorie și deja 6! va provoca o eroare de depășire. Scriind o aritmetică lungă pe Brainfuck este o sarcină foarte laborioasă, deci exemplul presupune că tipurile întregi pot fi stocate în celulele de memorie.
Bună ziua, lumea!
Bună ziua, lumea!
Acest exemplu este o traducere pe lingura acestui exemplu. Rețineți că Spoon vă permite să nu separați comenzile individuale de spații, dar versiunea curentă a EsCo necesită ca comenzile să fie separate prin spații.
Bună ziua, lumea!
Acest exemplu este o traducere pe Brainloller a acestui exemplu. Din moment ce Brainloller este un limbaj pur grafic, imaginile joacă rolul codului sursă.
"Buna, lume!" pe Brainloller

"Buna, lume!" pe Brainloller (mărire de 10x)
Bună ziua, lumea!
Acest exemplu este o traducere pe Unary a acestui exemplu. Codul în sine este prea mare pentru ao aduce complet, deci numai lungimea sa este indicată.
Numerele Fibonacci:
Acest exemplu este o traducere pe Unary a acestui exemplu. Codul în sine este prea mare pentru ao aduce complet, deci numai lungimea sa este indicată.