| [досмотренная версия] | [ожидает проверки] |
|
|
| | |} | | |} |
| | ---> | | ---> |
| − | Синтаксис брейнфака состоит из команд сдвига исполнительной каретки влево-вправо, уменьшения-увеличения текущего значения на единицу, чтения-записи и организации while-цикла. Всего — восемь команд. | + | Синтаксис брейнфака состоит из команд сдвига исполнительной каретки влево-вправо, уменьшения-увеличения текущего значения на единицу, чтения-записи и организации while-цикла. Всего — восемь команд. |
| | | | |
| | == Хелловорлд == | | == Хелловорлд == |
| | Хелловорлд на брейнфаке: | | Хелловорлд на брейнфаке: |
| | | | |
| − | --[+++++++<---->>-->+>+>+<<<<] | + | >--[+++++++<---->>-->+>+>+<<<<] |
| | <.>++++[-<++++<++>>>->--<<]>>-.>--..>+.<<<.<<-.>>+>->>.+++[.<]<<++. | | <.>++++[-<++++<++>>>->--<<]>>-.>--..>+.<<<.<<-.>>+>->>.+++[.<]<<++. |
| | | | |
| | Бессмысленный набор символов становится чуть более понятным после ознакомления с коротким описанием синтаксиса[[:en.w:Brainfuck#Commands| здесь]] или [[:w:Brainfuck | здесь]]. Программы пишутся достаточно легко, но недостаток выразительных средств даёт о себе знать. | | Бессмысленный набор символов становится чуть более понятным после ознакомления с коротким описанием синтаксиса[[:en.w:Brainfuck#Commands| здесь]] или [[:w:Brainfuck | здесь]]. Программы пишутся достаточно легко, но недостаток выразительных средств даёт о себе знать. |
| | + | |
| | + | == Обфускация == |
| | + | В действительности те, кто пишут программы на Brainfuck, специально игнорируют отступы и пишут все в одну строку, чтобы еще больше запутать исходный код программы и напугать непосвященных. Например, нечитабельный код: |
| | + | |
| | + | ,>,>,<<[>+<[<+>-]].>.>. |
| | + | |
| | + | можно разбить на отдельные инструкции и проставить табуляции в отдельных блоках: |
| | + | |
| | + | ,>,>, |
| | + | << |
| | + | [ |
| | + | >+< |
| | + | [ |
| | + | <+>- |
| | + | ] |
| | + | ] |
| | + | .>.>. |
| | + | |
| | + | Согласитесь, из непонятного «шоыэтазанахуй», код становится вполне читабельным и доступным для понимания. А если учесть, что в Brainfuck используется только 8 символов-команд — можно еще комментариев налепить, в любой удобной для вас форме: |
| | + | |
| | + | ,>,>, // считать символ, перейти к следующей ячейке, считать следующий символ... |
| | + | << // вернуться на 2 ячейки назад |
| | + | [ // открыть цикл |
| | + | >+< // ползем вправо, увеличиваем тамошнюю ячейку на 1, возвращаемся обратно |
| | + | [ // еще один цикл |
| | + | <+>- // влево плюс, обратно минус |
| | + | ] // вернуться в начало цикла "еще один цикл" |
| | + | ] // вернуться в начало цикла "открыть цикл" |
| | + | .>.>. // вывод |
| | | | |
| | == Употребление == | | == Употребление == |
| − | Как самый известный из [[:w:Эзотерические языки программирования|эзотерических языков программирования]] BrainFuck стал (нередко ошибочно, так как создавался для других целей, а для списка ниже есть примеры более целевых языков) синонимом | + | Как самый известный из [[:w:Эзотерические языки программирования|эзотерических языков программирования]], BrainFuck стал (нередко ошибочно, так как создавался для других целей, а для списка ниже есть примеры более целевых языков) синонимом |
| | * Нечитаемости программ | | * Нечитаемости программ |
| | * Неудобства или непродуманности синтаксиса | | * Неудобства или непродуманности синтаксиса |
|
|
| | == Кроме того == | | == Кроме того == |
| | * Из-за практической бесполезности трансляторы брейнфака, байндинги для распространённых библиотек, модули для Apache и т. п. не получают распространения. | | * Из-за практической бесполезности трансляторы брейнфака, байндинги для распространённых библиотек, модули для Apache и т. п. не получают распространения. |
| | + | ** Тем не менее, реально автоматически перекомпилировать содержимое [[C|нормального языка]] программирования в [[сабж]]. |
| | * Из-за простоты языка писать их сравнительно легко. | | * Из-за простоты языка писать их сравнительно легко. |
| − | * Что делает написание подобных вещей полезным для тренировки и самоутверждения. | + | ** Что делает написание подобных вещей полезным для тренировки и самоутверждения. |
| | + | * Для настоящих ценителей имеются [http://esolangs.org/wiki/Dbfi реализации сабжа на сабже]. Они даже соревнуются в скорости исполнения, что особенно доставляет, учитывая стремящуюся к нулю практическую полезность языка. |
| | * Существует ряд Brainfuck-based языков программирования, например, любители [[Терри Пратчетт]]а оценят язык [http://esoteric.voxelperfect.net/wiki/Ook Ook] | | * Существует ряд Brainfuck-based языков программирования, например, любители [[Терри Пратчетт]]а оценят язык [http://esoteric.voxelperfect.net/wiki/Ook Ook] |
| − | * Поговаривают, что для bf был спаян целый компьютер с встроенным интерпретатором bf. [http://robos.org/electronics/bfcomp/ И не врут.] | + | * Поговаривают, что для bf был спаян целый релейный компьютер с нативой поддержкой инструкций bf. [https://hackaday.io/project/18599-brainfuckpc-relay-computer И не врут.] |
| | * Существует язык программирования [[:w:Malbolge|Malbolge]], который гораздо страшнее Brainfuck’а. Настолько, что первую работающую программу создали только через 2 года после выпуска интерпретатора Malbolge, да и то с помощью другой программы. | | * Существует язык программирования [[:w:Malbolge|Malbolge]], который гораздо страшнее Brainfuck’а. Настолько, что первую работающую программу создали только через 2 года после выпуска интерпретатора Malbolge, да и то с помощью другой программы. |
| − | * Алсо, BrainFuck — жанр [[гуро]]. Так-то. | + | * BrainFuck — жанр [[гуро]]. Так-то. |
| | | | |
| | == См. также == | | == См. также == |
|
|
| | | | |
| | == Ссылки == | | == Ссылки == |
| | + | * [http://arduino.ru/forum/programmirovanie/razrabotka-sketchei-na-yazyke-brainfuck Реализация BrainFuck для Ардуино. Мигание сетодиодом и прочие ардуинофенечки. Особые лулзы от некоторых комментов ардуиноводов.] |
| | + | * [http://xcont.com/bf/ Интерпретатор языка программирования Brainfuck на JavaScript (v0.1)] |
| | * [http://hashcode.ru/questions/121/есть-ли-практическая-польза-от-языка-brainfuck Есть ли практическая польза от языка Brainfuck?] | | * [http://hashcode.ru/questions/121/есть-ли-практическая-польза-от-языка-brainfuck Есть ли практическая польза от языка Brainfuck?] |
| | * [http://rsdn.ru/article/philosophy/languages.xml Годная статья про эзотерические языки программирования — тысячи их и покоширней BrainFuck'а! Тут же железная Brainfuck-машина.] | | * [http://rsdn.ru/article/philosophy/languages.xml Годная статья про эзотерические языки программирования — тысячи их и покоширней BrainFuck'а! Тут же железная Brainfuck-машина.] |
|
|
| | * [http://esoteric.sange.fi/brainfuck/bf-source/prog/ Всякие сырцы на BrainFuck'ке.] | | * [http://esoteric.sange.fi/brainfuck/bf-source/prog/ Всякие сырцы на BrainFuck'ке.] |
| | * [http://www.google.ru/#q=quine+brainfuck Доска почета адептов BrainFuck'а] | | * [http://www.google.ru/#q=quine+brainfuck Доска почета адептов BrainFuck'а] |
| − | * [http://habrahabr.ru/sandbox/32031/ Как создать компилятор BrainFuck с блэкджек...^W с оптимизацией и кроссплатформенностью] | + | * [http://habrahabr.ru/sandbox/32031/ Как создать компилятор BrainFuck с блэкджек…^W с оптимизацией и кроссплатформенностью] |
| | + | * [https://geektimes.ru/post/297007/ Интерпретатор Brainfuck на Arduino с экраном и кнопками] |
| | | | |
| | | | |
|
|
| | {{Языки программирования}} | | {{Языки программирования}} |
| | {{Software}} | | {{Software}} |
| − |
| |
| − | [[Категория:Бесполезные вещи века]]
| |
| | | | |
| | [[w:Brainfuck]] | | [[w:Brainfuck]] |
| | [[en.w:Brainfuck]] | | [[en.w:Brainfuck]] |
| | [[ae:Brainfuck]] | | [[ae:Brainfuck]] |