BrainFuck
В эту статью нужно добавить как можно больше разных эзотерических символов и слов.
Также сюда можно добавить интересные факты, картинки и прочие кошерные вещи.
In Soviet Russia brain fucks YOU
BrainFuck (не путать с Mindfuck) — один из эзотерических языков программирования, язык-головоломка. Тем не менее, на нём вполне успешно пишут программы. Целью его создателя был тьюринг-полный язык с компилятором минимального размера.
Синтаксис
Синтаксис брейнфака состоит из команд сдвига исполнительной каретки влево-вправо, уменьшения-увеличения текущего значения на единицу, чтения-записи и организации while-цикла. Всего — восемь команд.
Хелловорлд
Хелловорлд на брейнфаке:
>--[+++++++<---->>-->+>+>+<<<<] <.>++++[-<++++<++>>>->--<<]>>-.>--..>+.<<<.<<-.>>+>->>.+++[.<]<<++.
Бессмысленный набор символов становится чуть более понятным после ознакомления с коротким описанием синтаксиса здесь или здесь. Программы пишутся достаточно легко, но недостаток выразительных средств даёт о себе знать.
Обфускация
В действительности те, кто пишут программы на Brainfuck, специально игнорируют отступы и пишут все в одну строку, чтобы еще больше запутать исходный код программы и напугать непосвященных. Например, нечитабельный код:
,>,>,<<[>+<[<+>-]].>.>.
можно разбить на отдельные инструкции и проставить табуляции в отдельных блоках:
,>,>, << [ >+< [ <+>- ] ] .>.>.
Согласитесь, из непонятного «шоыэтазанахуй», код становится вполне читабельным и доступным для понимания. А если учесть, что в Brainfuck используется только 8 символов-команд — можно еще комментариев налепить, в любой удобной для вас форме:
,>,>, // считать символ, перейти к следующей ячейке, считать следующий символ... << // вернуться на 2 ячейки назад [ // открыть цикл >+< // ползем вправо, увеличиваем тамошнюю ячейку на 1, возвращаемся обратно [ // еще один цикл <+>- // влево плюс, обратно минус ] // вернуться в начало цикла "еще один цикл" ] // вернуться в начало цикла "открыть цикл" .>.>. // вывод
Употребление
Как самый известный из эзотерических языков программирования, BrainFuck стал (нередко ошибочно, так как создавался для других целей, а для списка ниже есть примеры более целевых языков) синонимом
- Нечитаемости программ
- Неудобства или непродуманности синтаксиса
Перл — это тот же brainfuck, только автор его, почему-то, воспринимает серьезно. Может, конечно, это он так издевается, и тащится от того, что мир подхватил его версию brainfuck и строчит на нем да фанатеет...
— ЛОР
- Неудобства инструмента разработки
- Мазохизма
—...если вы настоящий мазохист-извращенец, если вам нравится преодолевать непреодолимое и выполнять невыполнимое, то ваш выбор — это BAT-скрипты.
— С машиной Тьюринга (или с BrainFuck, что почти то же самое) не сравнить...
— ЖЖ
- Примера, чем чревато излишнее упрощение
— В российских школах будут преподавать программирование на Delphi и C++Builder.
— ...слава богу, хоть не лисп...
— Надо вообще на COBOL'е или на FORTRAN'е учить. Хотя, самый простой, конечно Brainfuck.
— ЛОР
- Мозгокрутных логических задач, не имеющих практической ценности
Brainfuck. Задача для детей дошкольного возраста. Забудь то, чему тебя учили в школе. Детишки дошколята решают ее в среднем за 3 минуты.
8809=6; 7111=0; 2172=0; 6666=4; 1111=0; 3213=0; 7662=2; 9312=1; 0000=4; 2222=0; 3333=0; 5555=0; 8193=3; 8096=5; 7777=0; 9999=4; 7756=1; 6855=3; 9881=5; 5531=0.
2581=? (спойлер: 2. Ответ — это число замкнутых кружочков и овальчиков в начертании числа)
- Насмешки при сравнении языков программирования
— Пых-пых что-то достал, хочется чего-то нового, с большими возможностями...
…
— Ну автору сабжа же нужно «что-то новое, с большими возможностями». Вот brainfuck ему как раз и подойдет. Утрамбует его моск немножко. Научиться яснее выражать свои мысли, и мы ему быстрее сможем помочь.
— ЛОР
Кроме того
- Из-за практической бесполезности трансляторы брейнфака, байндинги для распространённых библиотек, модули для Apache и т. п. не получают распространения.
- Тем не менее, реально автоматически перекомпилировать содержимое нормального языка программирования в сабж.
- Из-за простоты языка писать их сравнительно легко.
- Что делает написание подобных вещей полезным для тренировки и самоутверждения.
- Для настоящих ценителей имеются реализации сабжа на сабже. Они даже соревнуются в скорости исполнения, что особенно доставляет, учитывая стремящуюся к нулю практическую полезность языка.
- Существует ряд Brainfuck-based языков программирования, например, любители Терри Пратчетта оценят язык Ook
- Поговаривают, что для bf был спаян целый релейный компьютер с нативой поддержкой инструкций bf. И не врут.
- Существует язык программирования Malbolge, который гораздо страшнее Brainfuck’а. Настолько, что первую работающую программу создали только через 2 года после выпуска интерпретатора Malbolge, да и то с помощью другой программы.
- BrainFuck — жанр гуро. Так-то.
См. также
Ссылки
- Реализация BrainFuck для Ардуино. Мигание сетодиодом и прочие ардуинофенечки. Особые лулзы от некоторых комментов ардуиноводов.
- Интерпретатор языка программирования Brainfuck на JavaScript (v0.1)
- Есть ли практическая польза от языка Brainfuck?
- Годная статья про эзотерические языки программирования — тысячи их и покоширней BrainFuck'а! Тут же железная Brainfuck-машина.
- Ivory tower
- Всякие сырцы на BrainFuck'ке.
- Доска почета адептов BrainFuck'а
- Как создать компилятор BrainFuck с блэкджек…^W с оптимизацией и кроссплатформенностью
- Интерпретатор Brainfuck на Arduino с экраном и кнопками