Это конечно же хобби, хотя...
Brainfuck придуман Урбаном Мюллером в 1993 году, в основном для забавы. Уникальный, вполне себе интересный Тьюринг-полный язык программирования с размером компилятора в 240 байт! В нём используется всего лишь 8 команд, каждая из них записывается одним символом. Программа на языке Brainfuck представляет собой последовательность этих самых команд.
Машина, которой управляют команды Brainfuck, состоит из упорядоченного набора ячеек и указателя текущей ячейки, получается что-то вроде стека и смещения в нём. Так же реализована возможность механизма ввода-вывода, далее будет понятно на примере.
Список всех команд языка
> перейти к следующей ячейке
< перейти к предыдущей ячейке
+ инкремент значения в текущей ячейке на 1
- декремент значение в текущей ячейке на 1
. напечатать значение из текущей ячейки
, ввести извне значение и сохранить в текущей ячейке
[ если значение текущей ячейки равно 0, перейти вперёд по тексту программы на ячейку, следующую за соответствующей закрывающей ] (с учётом вложенности)
] если значение текущей ячейки не равно 0, перейти назад по тексту программы на ячейку, следующую за соответствующей открывающей [ (с учётом вложенности)
Изначально задумывалось число ячеек в 30 тыс., каждая размером в байт. По умолчанию указатель находится в левой ячейке (ячейка 0); значения всех ячеек равны 0. Ввод/вывод значений происходит по таблице ASCII, точнее по числовому смещению в этой таблице. Например 32 знака "+" и точка — выведут на экран пробел в нулевой позиции, последующий знак ">" переведёт нас к следующей ячейке. Если теперь ввести 72 знака "+" и точку — выведется буква «H». Конструкция
+++[.-]
по сути цикл, вносим в ячейку значение 3, выводим на экран значение из ячейки и уменьшаем его, соответственно получится вывод символов с кодами 3, 2 и 1. На PHP выглядело бы так: for ($i = 3; $i > 0; $i--) print chr($i);
Параметры языка могут отличаться от разновидностей!
«Hello World!»
+++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++.+++++++++++++++++
++++++++++++.+++++++..+++.-------------------
---------------------------------------------
---------------.+++++++++++++++++++++++++++++
++++++++++++++++++++++++++.++++++++++++++++++
++++++.+++.------.--------.------------------
---------------------------------------------
----.-----------------------.
Собственно 72 вывод «H», в этой же ячейке прибавляем ещё 29 вывод «e» и т.д., манипулируя прибавлением/убавлением значения в одной единственной ячейке. Значения не пишутся в ячейку, а выводятся на лету.
Прокачанный «Hello World!»
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++
.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.
------.--------.>+.>.
Так сказать хрестоматийный пример. Основан на предварительной подготовке 4 ячеек со значениями 70, 100, 30 и 10, чтобы проще было прибавлять или убавлять. Блок
++++++++++[>+++++++>++++++++++>+++>+<<<<-]
10 раз выполнит операции в цикле — прибавить 7 в первой ячейке, 10 во второй, 3 в третьей и 1 в четвёртой, после чего вернуться к ячейке 0 и уменьшить её. В последующих действиях можно уже разобраться и так.Soft
Ubuntu — bf (a fast Brainfuck interpreter)
Windows — Brainfuck Developer, Brainfuck Compiler
Полезно почитать
Лекция, непрочитанная автором в Потаенном Институте Несуществующих Стандартов
Вот собственно для начала, надеюсь пригодится)