Как стать автором
Обновить

Интерпретатор языка программирования Brainfuck на JavaScript

Время на прочтение 1 мин
Количество просмотров 2.3K
Чулан
Brainfuck (англ. brain+fuck) — один из известнейших эзотерических языков программирования, придуман Урбаном Мюллером (Urban Müller) для забавы. Состоит из восьми команд, каждая из которых записывается одним символом. Исходный код программы на Brainfuck представляет собой последовательность символов языка без какого-либо синтаксиса. (Это из Википедии).

Вот, например, Hello World!:
<code>
>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++
[<++++>-]<.>+++++++++++[<+++++>-]<.>++++++++[<+++>-]<.+++.------.
--------.[-]>++++++++[<++++>-]<+.[-]++++++++++.
</code>


К чему я это пишу? К тому, что сделал интерпретатор языка программирования Brainfuck на JavaScript. Работает довольно быстро. Код под GPL (хотя кому он нужен :-D ).

Может кому-нибудь будет интересно :-)
Всего голосов 30: ↑26 и ↓4 +22
Комментарии 28

Hello, Brainfuck!

Время на прочтение 6 мин
Количество просмотров 8.7K
Чулан
Brainfuck — Тьюринг полный язык, то есть на нем можно написать любую программу, которую вообще можно написать :) А напишем мы «Hello World», вернее несколько ;)
Читать дальше →
Всего голосов 25: ↑20 и ↓5 +15
Комментарии 32

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

Время на прочтение 3 мин
Количество просмотров 2.5K
Программирование *
Это конечно же хобби, хотя...

Brainfuck придуман Урбаном Мюллером в 1993 году, в основном для забавы. Уникальный, вполне себе интересный Тьюринг-полный язык программирования с размером компилятора в 240 байт! В нём используется всего лишь 8 команд, каждая из них записывается одним символом. Программа на языке Brainfuck представляет собой последовательность этих самых команд.

Машина, которой управляют команды Brainfuck, состоит из упорядоченного набора ячеек и указателя текущей ячейки, получается что-то вроде стека и смещения в нём. Так же реализована возможность механизма ввода-вывода, далее будет понятно на примере.
Читать дальше →
Всего голосов 65: ↑50 и ↓15 +35
Комментарии 65

Brainfuck Quine

Время на прочтение 5 мин
Количество просмотров 6.4K
Ненормальное программирование *
После праздником мозги сильно отдохнули и теперь неплохо было бы их размять.
Есть достаточно популярная головоломка: написать программу, которая выводит свой собственный исходный код на произвольном языке программирования. Это развлечение называется куайном.
Что за язык такой этот brainfuck все знают, я думаю.

Предлагаю устроить конкурс куайнов на bf. Я нагуглил 3 варианта + написал свой собственный (чем выиграл бутылку самбуки).
В качестве интерпретатора я использовал http://brainfuck.progopedia.ru.
мой вариант куайна на bf'е под катом
Читать дальше →
Всего голосов 68: ↑59 и ↓9 +50
Комментарии 56

Brain Fuck Scheduler — ставим за 5 минут

Время на прочтение 3 мин
Количество просмотров 11K
Настройка Linux *
О новом планировщике задач для Linux на Хабре уже написали вот тут. Весьма эпатажный «трейлер» с xkcd к новому планировщику, и не менее веселый FAQ, пробудили интерес. Расспросил знакомых, кто ставил, чтобы поделились впечатлениями — никто не ставил, ибо «влом ядро новое ставить» или «я подожду, пока оно в мейнстриме появится». Поставил и попробовал сам, и для тех кто хочет сделать то же самое — краткое руководство для Ubuntu 9.04, с описанием потенциальных граблей.

В качестве тизера, скажу лишь, что полноэкранное видео на youtube действительно не тормозит и система стала отзывчивее и шустрее.

Итак, дабы не быть голословным, приступим. Предполагается, что у вас установлена Ubuntu 9.04 (Jaunty).

Читать дальше →
Всего голосов 64: ↑58 и ↓6 +52
Комментарии 120

История сумасшествия или свой морской бой на BrainFuck`e

Время на прочтение 7 мин
Количество просмотров 14K
Ненормальное программирование *

Доброго времени суток, хабралюди. Перед Вами самадиогностика безнадёжного BrainFuck больного.
Те, кто всё понял из названия и не хотят читать весь пост целиком могут скачать игру и BFDev и сразу перейти под кат в конец поста к разделу «Как играть». В посте рассказано как я заболел BrainFuck`ом, а также описан процесс создания игры «Морской бой» на этом замечательном языке.

Читать дальше →
Всего голосов 196: ↑179 и ↓17 +162
Комментарии 66

Интерпретатор Brainfuck размером 160 байт

Время на прочтение 1 мин
Количество просмотров 4K
Программирование *
Прочитав про IP-стэк twIP, который помещается в размер твита и отвечает на пинги, корейский программист Канг Сеонгхун (Kang Seonghoon) решил создать нечто такое же миниатюрное и при этом работоспособное. И он создал самый маленький интерпретатор Brainfuck на C размером всего 160 байт.

s[99],*r=s,*d,c;main(a,b){char*v=1[d=b];for(;c=*v++%93;)for(b=c&2,b=c%7?a&&(c&17?c&1?(*r+=b-1):(r+=b-1):syscall(4-!b,b,r,1),0):v;b&&c|a**r;v=d)main(!c,&a);d=v;}
Читать дальше →
Всего голосов 83: ↑79 и ↓4 +75
Комментарии 32

Выращиваем программы

Время на прочтение 2 мин
Количество просмотров 3.8K
Ненормальное программирование *
image Прошли новогодние праздники и я вспомнил про BrainFuck. Писать свой морской бой желания не было, а хотелось как в сказке «Ну ка, проги, пишитесь сами!».
Читать дальше →
Всего голосов 49: ↑46 и ↓3 +43
Комментарии 23

Числа Фибоначчи на Brainfuck

Время на прочтение 4 мин
Количество просмотров 5K
Ненормальное программирование *
Прочитав в начале года статью «Brainfuck и счастливые билеты», я решил, что пора уже изучить Brainfuck и написать на нём что-нибудь интересное. Долго думать не пришлось. Я решил написать свою «ненормальную» реализацию чисел Фибоначчи, в которой пользователь вводит однозначное число, определяющее количество выводимых элементов ряда Фибоначчи.

В создании программы мне также помогли сайт о Brainfuck'е и таблица ASCII символов
Узнать, цел ли мозг...
Всего голосов 35: ↑24 и ↓11 +13
Комментарии 30

Пишем интерпретатор Brainfuck на Lua

Время на прочтение 5 мин
Количество просмотров 7.4K
Ненормальное программирование *Lua *
Из песочницы
Lua Logo
Каждый программист за свою жизнь успевает изучить множество языков, в нескольких из них специализируется и продолжает работать продолжительное время, а остальные проходят мимо. По разным причинам. Стоит ли тратить время на изучение новых языков, когда уже определился с областью в которой будешь работать? Лично я уверен что стоит, хотя, быть может, многие скажут что важны фундаментальные знания в computer science, а на каком языке писать код не критично. В сущности так и есть. И тем не менее изучать языки интересно и полезно.
Читать дальше →
Всего голосов 49: ↑39 и ↓10 +29
Комментарии 15

Интерпретатор Brainfuck на Bash

Время на прочтение 1 мин
Количество просмотров 2K
Ненормальное программирование *
В последнее время популярность эзотерического языка Brainfuck набирает обороты. Количество приложений, написанных на Brainfuck увеличивается не в арифметической, а даже в геометрической прогрессии. Очень похожая ситуация с Android.

Сегодня я решил запустить свой первый хелловорлд на этом языке. Я счастливый пользователь NetBSD на тостере, и у меня не получилось настроить интернет. Поэтому, я не смог воспользоваться уже готовыми решениями для запуска программ на Brainfuck'e.

Выход оставался один — написать интерпретатор самому. Из софта были только Bash и системные утилиты.

$ cat bf.sh
#!/bin/bash
C="s[0]=0; p=0;"
while read -n1 c; do case $c in
	\+) C="$C s[\$p]=\$((\${s[\$p]}+1));";;
	\-) C="$C s[\$p]=\$((\${s[\$p]}-1));";;
	\>) C="$C p=\$((\$p+1));";;
	\<) C="$C p=\$((\$p-1));";;
	\.) C="$C printf \\\\\$(printf '%03o' \${s[\$p]});";;
	\,) C="$C read -n1 c; s[\$p]=\`printf '%d' \"'\$c\"\`;";;
	\[) C="$C while [[ \${s[\$p]} > 0 ]]; do ";;
	\]) C="$C done;";;
esac; done < $1; 
eval $C

$ cat hello.b
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++
.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.
------.--------.>+.>.

$ ./bf.sh hello.b
Hello World!
Всего голосов 108: ↑101 и ↓7 +94
Комментарии 37

Пишем интерпретатор Brainfuck на Mercury

Время на прочтение 5 мин
Количество просмотров 2.3K
Ненормальное программирование *
Продолжая неделю Brainfuck на хабре и свои эксперименты с Mercury, написал свою версию интерпретатора. Заранее прошу извинить, что еще не представил «вступительную» статью о Mercury. На самом деле, она в процессе написания.
Пока же приведу код решения, который проиллюстрирует заодно несколько возможностей языка Mercury.
Читать дальше →
Всего голосов 22: ↑15 и ↓7 +8
Комментарии 10

Параллелим Brainfuck

Время на прочтение 4 мин
Количество просмотров 2.2K
Ненормальное программирование *
Не будем терять темпа. Поскольку неделя еще не закончилась, еще есть время для очередного топика про Brainfuck. Идея меня захватила, но реализаций интерпретаторов было уже такое количество, что захотелось какой-то изюминки. Поэтому в качестве цели эксперимента я выбрал Brainfork — многопоточную версию Brainfuck-а. А в качестве средства — Erlang, который прекрасно подходит для реализации параллельных процессов. Тем, кому эта тема до сих пор не осточертела, предлагаю заглянуть под кат.
Читать дальше →
Всего голосов 51: ↑42 и ↓9 +33
Комментарии 7

Переводчик на язык программиста

Время на прочтение 1 мин
Количество просмотров 34K
Разработка веб-сайтов *
С добрым утром, хабражители!

Хочу немного дополнить неделю brainfuck до того, как она закончится.

Говорят, что программисты общаются на своем, никому не понятном языке. Что ж, порой именно так и бывает. Поэтому однажды у меня родилась идея сделать сервис, который позволял бы наладить общение между программистами и остальным миром. Или же наоборот — усложнить его: все в ваших руках. В любом случае больше не нужно набирать сообщение в двоичном или brainfuck коде, чтобы признаться в любви девушке — достаточно зайти на сайт и он сделает это за вас! ;)

Читать дальше →
Всего голосов 76: ↑60 и ↓16 +44
Комментарии 54

Компилятор Brainfuck в .NET

Время на прочтение 5 мин
Количество просмотров 7.5K
Ненормальное программирование *
Из песочницы
Здравствуйте.
Смотрю я, что у вас неделя BrainFuck-а и я решил написать компилятор, тем более, что в комментариях к этой статье просили рассказать поподробнее про динамические методы. В этой статье мы рассмотрим этот метод компиляции кода и попробуем сделать компилятор самого нормального простого языка
Читать дальше →
Всего голосов 72: ↑46 и ↓26 +20
Комментарии 35

Интерпретатор Brainfuck с помощью нормальных алгоритмов Маркова

Время на прочтение 4 мин
Количество просмотров 2.9K
Ненормальное программирование *
Под катом вы найдете самую ненормальную реализацию интерпетатора Brainfuck с помощью нормальных алгоритмов Маркова. В этой реализации все операторы Brainfuckа и сам интерпретатор являются нормальными алгоритмами Маркова. Целью этого поста было рассмотреть Brainfuck с точки зрения классической теории алгоритмов и привести его реализацию с помощью какого-либо классического уточнения понятия алгоритма. Кто не боится причинить своему мозгу вред столь ненормальным программированием добро пожаловать (под катом много текста, иногда сложного для понимания если не знаком с теорией алгоритмов, но в конце поста есть ссылка на реализацию этого интерперетатора, который можно попробовать в действии). Его быстродействие, по понятным причинам не очень высоко, но с точки зрения понимания алгоритмов работы он очень наглядный.
Читать дальше →
Всего голосов 91: ↑69 и ↓22 +47
Комментарии 13

Brainfuck — вывод в десятичном формате

Время на прочтение 2 мин
Количество просмотров 3K
Ненормальное программирование *
В качестве первой задачки для реализации на brainfuck я решил взять, казалось бы, простое упражнение — вывести в десятичном формате записанное на ленте 4-байтовое число. Задачка оказалась интересной, особенно, если учесть, что дублировать код (и использовать, что число именно 4-байтовое) мне хотелось как можно меньше, а больше пользоваться циклами.

Сразу было видно, что есть два разных подхода — либо пытатьтся делить исходное число с остатком на 10, и составлять цифры из полученных остатков, либо формировать десятичное число, умножая его на 2 и при необходимости прибавляя единицу. Поигравшись со вторым вариантом, и обнаружив, что биты поступают не в том порядке, в каком надо, вернулся к первому варианту.

Читать дальше →
Всего голосов 35: ↑17 и ↓18 -1
Комментарии 12

Немного о JIT-компиляции или пишем оптимизированный интерпретатор Brainfuck

Время на прочтение 6 мин
Количество просмотров 6.5K
Разработка веб-сайтов *
Суть языка Brainfuck в том, что мы всегда бегаем по ячейкам ленты, уменьшая или увеличивая значения в них. В циклах мы можем пробегать из одного конца в другой, что-то подсчитывая, зачастую используя много вложенных циклов. Не трудно догадаться, что интерпретация этого языка относительно медленна. Конечно, на современных компьютерах этого практически не заметно, но… Предлагаю небольшой тест: берите написанный вами интерпретатор, и запускайте вот этот не хитрый код:

>+>+>+>+>++<[>[<+++>-
 >>>>>
 >+>+>+>+>++<[>[<+++>-
   >>>>>
   >+>+>+>+>++<[>[<+++>-
     >>>>>
     >+>+>+>+>++<[>[<+++>-
       >>>>>
       +++[->+++++<]>[-]<
       <<<<<
     ]<<]>[-]
     <<<<<
   ]<<]>[-]
   <<<<<
 ]<<]>[-]
 <<<<<
]<<]>.


Дождались конца выполнения? Согласитесь, что это было не так быстро, как могло показаться сразу. Что ж, давайте посмотрим, как сделать интерпретатор, который будет выполнять данный код не больше чем за несколько секунд.
Опять brainfuck, ассемблер и паскаль
Всего голосов 90: ↑66 и ↓24 +42
Комментарии 37