Brainfuck

Матеріал з Вікіпедії — вільної енциклопедії.

Braіnfuck (англ. braіn+fuck) - одна з найвідоміших езотеричних мов програмування, придумана Урбаном Мюллером (Urban Müller) для забави. Складається з восьми команд, кожна з яких записується одним символом. Вихідний код програми на Braіnfuck являє собою послідовність символів мови без жодного синтаксису.

Машина, якою керують команди Braіnfuck, складається з упорядкованого набору комірок і покажчика поточної комірки, нагадуючи стрічку і голівку машини Тьюринга. Крім того, в апараті наявний механізм взаємодії із зовнішнім світом (див. команди . і ,).

8 команд мови Braіnfuck:
> перейти до наступної комірки
< перейти до попередньої комірки
+ збільшити значення в поточній комірці на 1
- зменшити значення в поточній комірці на 1
. надрукувати значення поточної комірки
, ввести ззовні значення і зберегти в поточну комірку
[ якщо значення поточної комірки - нуль, перейти вперед по тексту програми до ] з урахуванням вкладеності
] якщо значення поточної комірки не нуль, перейти назад по тексту програми до [ з урахуванням вкладеності

Незважаючи на зовнішню примітивність, Braіnfuck з нескінченним набором комірок має тьюринговську повноту, а отже, не поступається можливостями іншим сучасним мовам мовам , подібним C, паскалю або Java.

Braіnfuck підходить для експериментів з генетичного програмування, що обумовлено простотю синтаксису, і, відповідно, генерації вихідного коду.

У "класичному " Braіnfuck, що описаний Мюллером, розмір комірки - один байт, кількість комірок - 30000.

У початковому стані покажчик знаходиться в крайній лівій позиції, а всі осередки заповнені нулями. Збільшення/зменшення значень комірок відбувається по модулі 256. Введення ораз виведення також відбувається побайтно, з урахуванням кодування ASCІІ (тобто в результаті операції введення (.) символ 1 буде записаний у поточний комірці як число 0x31, а операція виведення (,), зроблена над коміркою, що містить 0x41, надрукує латинську А). В інших варіантах мови розмір і кількість комірок може бути іншою (бі́льшою). Є версії, де значення комірок не є цілочисельним (із крапкою, що плаває).

Приклад. Програма мовою Brainfuck, що виводить Hello World!:
     ++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++
     .>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.
     ------.--------.>+.>.

[ред.] Посилання