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!:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++ .>+.+++++++..+++.>++.<<+++++++++++++++.>.+++. ------.--------.>+.>.