Программирование

индекс
178,71

Для начала или вводный курс в эзотерический язык

Это конечно же хобби, хотя...

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

Полезно почитать

Лекция, непрочитанная автором в Потаенном Институте Несуществующих Стандартов

Вот собственно для начала, надеюсь пригодится)
+35
20 ноября 2008, 05:30
27

комментарии (65)

НЛО прилетело и опубликовало эту надпись здесь
0
Nuty #
Всё хорошо в меру)
+1
Eklykti #
Я вроде читал, что на брейнфаке таки что-то полезное пишут. Какие-то там алгоритмы очень хорошо на него укладываются.
+10
komozey #
Пишут) еще как…

БФ по возможностям ничем не отличается от С++
0
1067 #
генетические алгоритмы
+1
cityhawk #
Интересная идея — сделать «обфускатор», который переводит, например, сишный код в БФ.
–13
max7 #
О, Brainfuck — это новомодная попсятина, в нем даже числа есть, фи — это не по джидайски, да прибудет с нами сила. Вы не поверите, но книжку про настоящий, джедайский, я прочёл до того как увидел Star Wars и до того как заимел компьютер, и это — «Машина Поста» (смотрим в гугле и википедии).

З.Ы.: ссылка на википедию ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%B0_%D0%9F%D0%BE%D1%81%D1%82%D0%B0
+2
Nuty #
Вот только блог называется «Brainfuck», не пост, а блог.
–2
max7 #
Ммм...., какой едкий сарказм, какое точное замечание.
+5
FilimoniC #
Мне больше нравится реализация этого Ook, ответвившегося от Brainfuck. Код читать приятнее, особенно вслух. Пример кода:

progopedia.ru/dialect/ook/
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook?

Или COW
progopedia.ru/dialect/cow/
Пример вычисления чисел Фибоначчи
MoO moO MoO mOo MOO OOM MMM moO moO
MMM mOo mOo moO MMM mOo MMM moO moO
MOO MOo mOo MoO moO moo mOo mOo moo
+5
Infthi #
фигня
whitespace наше всё.

в свое время была идея асилить конвертеры высокоуровневый язык -> брейнфак -> вайтспейс и потом сдавать в универе распечатки программ. как всегда, победила лень :(
+1
trisch #
да, распечатки на вайтспейсе — это жестоко :))
+1
WGH #
Это не так нереально, как кажется :). Можно сделать как в Notepad++:
whitespace.png - Picamatic - upload your images
0
trisch #
это ж вся его прелесть пропадает :)
0
drone #
Требования к Ook замечательные
+1
neyasyt #
напомнило один известный китайский стих =)
+4
valyard #
BF это забава для детей
go сюда ---> en.wikipedia.org/wiki/Malbolge
–7
egge #
представляю как бы тормозил Касперский, пытаясь разобрать это говно…
+1
VasilioRuzanni #
Да уж, после Malbolge любой Ассемблер покажется очень простым и предельно интуитивно понятным языком :))
0
Optik #
Только если «самый адский язык» © не изменит ваше мышление в корне =)
+3
gugu #
http://www.iwriteiam.nl/Ha_bf_online.html
а вот ещё ссылка для тех, кому лень что-либо скачивать. С юзабилити там правда очень плохо(
+2
bolk #
О! Я любил несколько лет назад этот язык, сделал про него сайт, написал интерпретаторы на JS и PHP…
НЛО прилетело и опубликовало эту надпись здесь
0
Stepanow #
Интересно было бы посмотреть на полезные программы на этом языке, а также на класс задач, для которых Brainfuck применимее других языков.
НЛО прилетело и опубликовало эту надпись здесь
0
Infthi #
чем кремниевые не устаривают?: )
www.clifford.at/bfcpu/bfcpu.html
+2
Nuty #
Тут не польза главное, а развитие логического мышления, способности к запоминанию информации, анализу и решение головоломок.
–7
zeleniy #
Мне кажется, что написание таких языков программиорвания — это реально античеловечно, а те кто на них ещё и программирует, реально потакаю этим идиотам, чтобы потом… похвастаться наверное… фу, жесть.
+6
Gbp #
школьники о брэйнфаке
0
zeleniy #
чо ??
0
easterism #
через плечо.
Тебе, зеленому, этого не понять
–1
zeleniy #
To Gbp, eastrims.
вы бы, парни, думали, прежде чем говорить. Ненавижу таких ебланов, которые не чувствуя рядом собеседника начинают писать, что не поподя. Два гопника, блять…
0
AusTiN #
толсто.
0
AusTiN #
ой ё… некропост(:
–2
silent_pro #
Да явный вынос мозга, сразу вспомнил лабы по асму на электронике с процом аналог которого интел 8080
+2
man_without_face #
На мой взгляд эзотерические языки программирования несут только один плюс и один минус:
— трата времени на бессмысленное кодирование.
+ хоть как-то шевелит мозги того, кто кодирует на таких языках.
+1
Nuty #
Шевелить мозги всё же полезно)
+2
man_without_face #
Так вот я и написал, что это плюс. Слева видите плюсик? :)
0
Nuty #
Ну дык ради такого плюса и времени не жалко)
0
man_without_face #
Есть вещи гораздо интереснее и приносящие куда больше пользы и к тому же раскачивающие мозг куда больше.
0
Nuty #
Естественно, но разнообразие не лишнее.
+1
Tanabe #
Лишне. Не все ради разнообразия в питании не только начнут ходить в разные заведения, но еще и на помойку наведываться. Некоторые вещи лучше пропускать мимо. Наркотики же не рекомендуют пробовать. Даже ради разнообразия.
По сути — слишком большая избыточность, чтобы именно «шевелить мозг». Надо пошевелить — возьмите классический ассемблер от интела и достаточно объемную задачку. И в нюансах попрактикуетесь, и в свертывании их в абстракции и оперировании уже ими. А тут — только самые мелкие нюансы, которые застилают картину (то, о чем можно сказать «за деревьями не видно леса»).
Я не могу вспомнить ни одного аналога в деятельности человека с таким подходом. В какой-то момент все начинают оперировать абстракциями.
+1
Nuty #
Нельзя же всех под одну гребёнку подводить, я считаю разнообразие вполне естественным, нельзя говорить о чём то с уверенностью не зная разницы. Ходить в разные заведения, наведаться на помойку — почему нет??? А вот пропускать что либо мимо — проявлять безразличие. Это конечно моё личное мнение, но сколько людей — столько и мнений.
–2
Tanabe #
Нет, если вы любитель поесть с помойки, то безусловно — мои аргументы для вас мимо кассы.
А про «одну гребенку» я нигде не писал, я как раз про разнообразие писал. Остальное вы сами придумали.
Я как раз писал про полезность.
Понимаете, вот если стоит задача собрать яблоки, и люди выполняют ее, срывая по 10 штук и нося к ящикам, то идея притащить ящик к дереву, с которого собираешь — это полезное разнообразие.
А начать носить за каждый проход не по 10, а по 1 — это тоже разнообразие. Но бесполезное.
+2
Nuty #
Кризис, кто знает… В целом спасибо за изложенное мнение.
+4
xzirrow #
Насчет ассемблера +.
А вот если следовать тому что рекомендуют и не рекомендуют — то получается жизнь обычного истеблишмента (читай обывателя)
врачи вот не рекомендуют сидеть за компьютером больше скольки-то часов в день, и что кто-то следует?
На мой взгляд наибольшие человеческие достижения сделаны людьми, не побоявшимися пойти против течения и позволив себе изучать, развивать и заниматься тем, что большинством не понималось, отвергалось и пр. Впрочем это к теме поста не имеет наверное уже отношения.
0
Tanabe #
Никто не спорит с нужностью изменений и движения. Я, вроде, в своем комментарии только поддерживал.
Вопрос состоит только в направлении. Потому что очень много людей, решив «пойти против течения» в реальности занимались совершенно бесполезной и никому не нужной фигней. И никому это не пригодилось, никто об этом не помнит и не знает. Потому что на общую картину мира это не повлияло никак.
Я об этом.
+1
gnomeby #
Классический эзотерический язык для тренировки мозга. Для тех кому мало для этого ассемблера :-)
НЛО прилетело и опубликовало эту надпись здесь
0
Ctacus #
ассемблер — детский лепет в плане осмысления по сравнению с этим =)
0
pvp #
Есть еще сходный язык APL, прозванный «китайским бейсиком». Там, правда, операндов побольше.
+2
bsdemon #
Нет вы что APL — это совсем из другой оперы. Сейчас его наследником является например J — очень мощный язык для обработки данных.
0
realfreeman #
«вполне себе инетересный» — исправьте пожалуйста
0
Nuty #
Спасибо, исправил, видимо время публикации сказывается на орфографии)
+1
Umkus #
Ещё HQ9+ весьма забавен :)
+2
Umkus #
Вообще эзотерические языки это весело и занятно :)
Но я отдал себя ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++. --------. ++++++++.
+1
Nuty #
PHP это хорошо, мне он тоже нравится, особенно 5 его версия со всеми ООП фичами.
+1
Zarohan #
Инфа из википедии, очень полезна для понимания на мой взгляд:

> ++p;
< --p;
+ ++*p;
— --*p;
. putchar(*p);
, *p = getchar();
[ while (*p) {
] }

(предполагается, что переменная p объявлена как указатель на байт)
0
Nuty #
Аналогия с языком Си.
+1
pxx #
Я себе представил поддержку чужого проекта на Brainfuck. Или хотя-бы просто code review. :)
+1
undefined #
Всегда хотел попробовать BF, но никак не доходили руки
Спасибо за пост :)
+1
akamuza #
нужно преподу по информатике показать — пускай взорвёт себе мозг )

зы
за инфу спасибо — познавательно.
+3
undefined #
++++[>++++++++>++++++++++++++++++>++++++++++++++++>
++++++++++++++++++++>+++++++++++++++++++++++++<<<<<-]
>>+.<.>>>>++++++++.+++.+++++++.-----------------.
<<<<.>-.>+.+.>++.<-.<.>.+.>.

Всё гораздо проще, чем кажется на первый взгляд :)
0
Nuty #
Зачёт)
0
Rustam #
а может перенести в кодобред?

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.