Brixputer как эзотерический язык программирования

Использование и разработка софта (преимущественно на ПЦ)

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Brixputer как эзотерический язык программирования

Post by Shaos »

В продолжение темы "Игра в кубики" (то что я раньше называл "bricksputer"):
Shaos wrote:Всё ломал голову как же это назвать - предполагал charbricks и data-driven cellular automat, но пока остановился на названии bricksputer.

После дополнительного обдумывания у меня сложился вот такой набор базовых блоков:

Image

input connectors - входные коннекторы, принимающие потоки символы из внешнего мира;

output connectors - выходные коннекторы, отправляющие потоки символов во внешний мир;

mirrors - зеркала берут символ с одной стороны и в следующем такте переставляют с другой, поворачивая поток символов на 90 градусов;

translucent mirrors - полупрозрачные зеркала кроме создания ответвленного потока символов, пропускают основной поток сквозь себя;

transmitters - передатчики могут генерировать поток символов из рядом стоящего или мимо проходящего символа (символы вылетают в направлении стрелки);

accelerators - ускорители применяются для мгновенного пропускания сквозь себя потока символов без задержки на один такт в каждой клетке, в случае использования ряда ускорителей символ также за один такт преодолевает всю цепочку (символы вылетают в направлении стрелки, залетая с противоположной стороны);

terminator - терминаторы съедают потоки символов, пришедших с любой стороны;

bridge - мост служит для безболезнного разделения пересекающихся потоков символов (ставится в точку пересечения потоков);

exception - блок используется для передачи на верхний уровень информации об ошибочной ситуации в схеме, срабатывает при попадании в него любого символа;

equ blocks - сравнивающие блоки, принимающие два потока и выдающие символ, если он встретился в обоих потоках в этом такте - в противном случае ничего не выдается;

max blocks - блоки выдают максимальный символ из двух входных;

min blocks - блоки выдают минимальный символ из двух входных;

switches - переключатели работают как стрелки на железной дороге, останавливают один поток символов и пропускают другой - в зависимости от того ударил ли в управляющий вход символ в данном такте или нет.

Другие блоки более высокого уровня (реализующие булевые функции, десятичную или троичную арифметику) можно составить из вышеприведенных блоков, например вот так будут описываться блоки "равно" и "больше":

Image
Прочитал про эзотерические языки программирования и снова потянуло вернутся к своим кубикам :)

Основное отличие Bricksputera от Тьюринг-подобных языков состоит в том, что тут вычисление идёт не последовательно, а параллельно (т.е. такой подход ближе к электронике, чем к программированию)
Last edited by Shaos on 19 Oct 2007 21:17, edited 2 times in total.
Я тут за главного - если что шлите мыло на me собака shaos точка net
Sonic
Senior
Posts: 112
Joined: 09 Jun 2005 05:34

Post by Sonic »

Shaos wrote: Основное отличие Bricksputera от Тьюринг-подобных языков состоит в том, что тут вычисление идёт не последовательно, а параллельно (т.е. такой подход ближе к электронике, чем к программированию)
Надо тебе эзотерический язык программирования ПЛИСок придумать. :-) А для этого изобретения предлагаю название CHDL - Cubic Hardware Description Language. Так, все, (tm) мой. 8)
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:Всё ломал голову как же это назвать - предполагал charbricks и data-driven cellular automat, но пока остановился на названии bricksputer...
Решил упросить название концепции - BRIXPUTER

P.S. И даже уже домены соответствующие зарегистрировал ;)
Last edited by Shaos on 19 Oct 2007 21:19, edited 2 times in total.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Предполагаемые задачи для соревнований в мастерстве владения Brixputer-ом:

- программа HelloWorld на минимальной площади;
- генератор случайных чисел;
- сумматор.

Площадь занимаемая решением вычисляется как площадь основного игрового поля плюс площади всех составных кубиков.
Last edited by Shaos on 19 Oct 2007 21:19, edited 1 time in total.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:
Shaos wrote:... например вот так будут описываться блоки "равно" и "больше":

Image
Прочитал про эзотерические языки программирования и снова потянуло вернутся к своим кубикам :)
Чтобы сделать Brixputer ближе к "эзотерическим" языкам программирования, могу предложить текстовую реализацию, позволяющую писать программы для Brixputer-а в любом текстовом редакторе. Вот как например могут выглядеть brixputer-программы "равно" и "больше":

Программа Eq.brx, реализующая функцию "равно":

Code: Select all

=v.T
*v~v
:>/>>=
*^~^
=^.F
Программа Gr.brx, реализующая функцию "больше":

Code: Select all

=v. .T
;>\'~v
*^:>\>>=
///,~^
=^. .F
Как можно видеть, под каждую клетку отведено 2 символа и если первый из них точка, то далее идёт буква, содержащаяся в этой клетке. Точка-пробел означают пустую клетку. Крайние справа пустые клетки разрешается опускать.
Last edited by Shaos on 26 Apr 2010 21:55, edited 2 times in total.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Колонки рабочего поля предлагается называть буквами латинского алфавита - a,b,c,d,..., а строчки - нумеровать числами 1,2,3,4,...

Точки входа и выхода потоков символов обозначены коннекторами. При запуске программы на исполнение мы можем передать ей также входные параметры в виде опций -n (north) -s (south) -e (east) -w (west), например:
-s:test цепляет слово "test" к первому слева входному коннектору с южной стороны (т.е. внизу)
-w:first,second цепляет слово "first" к первому сверху входному коннектору с западной стороны (т.е. слева), а слово "second" - соответственно ко второму (если он есть)

Также примем, что в случае входных коннекторов слова слева и снизу (или с запада и с юга соответственно) заходят в схему с конца, а слова сверху и справа (или с севера и с востока соотвественно) заходят в схему с начала. Обратным образом слова из схемы выходят.

По умолчанию (если не задано ни одно из сторон света в качестве опций) можно считать, что входной поток символов приходит в первый входной коннектор сверху, а выходной поток символов выходит из первого выходного коннектора снизу.

P.S. Чуствую, что не хватает ещё пары стандартных кубиков - инкремента и декремента :roll:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

попробовал набросать HelloWorld на языке Brixputera, вот что получается если не допускать в начальном состоянии динамических "летящих" символов:

Image

что влазит в поле 32x29 (938 клеток)

но если допустить наличие динамических символов в начальном состоянии, то всё можно утолкать в 14 клеток:

Image

в этом варианте с самого начала имеем текст, двигающийся справа-налево - по направлению к выходному коннектору (можно представить, что например выходные коннекторы имеют "всасывающий" эффект)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Есть желание начать писать интерпретатор языка Brixputer на функциональном языке программирования Hopeless
Я тут за главного - если что шлите мыло на me собака shaos точка net
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Post by Mac Buster »

Жаль что нет буфера с задержкой во времени, тогда схема стала бы много проще ;)
Extreme Entertainment
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Mac Buster wrote:Жаль что нет буфера с задержкой во времени, тогда схема стала бы много проще ;)
Когда буквы летят в "свободном пространстве", то они делают это со скоростью одна клетка в единицу времени - вот тебе и задержка ;)

Думаю ещё добавить один кубик, который бы синхронизировал два перпендикулярных потока - задерживал бы один пока во втором пусто и соответственно синхронно пропускал бы оба потока когда с обоих сторон идут непустые символы
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Вроде бы придумал как это хозяйство обсчитывать клеточным автоматом. Правда у этого клеточного автомата внутри одного такта могут быть несколько подтактов - это чтобы символы могли за один шаг (если мерять в тактах) через цепочку акселераторов пройти. Также похоже удаётся сделать "подсасывающий" эффект, чтобы выходные коннекторы сами тянули в себя строчки символов.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:Вроде бы придумал как это хозяйство обсчитывать клеточным автоматом. Правда у этого клеточного автомата внутри одного такта могут быть несколько подтактов - это чтобы символы могли за один шаг (если мерять в тактах) через цепочку акселераторов пройти. Также похоже удаётся сделать "подсасывающий" эффект, чтобы выходные коннекторы сами тянули в себя строчки символов.
Итак, сигналы у нас ходят только по горизонтали и вертикали, значит в качестве соседей у каждой клетки будут выступать только четыре клетки, непосредственно соприкасающиеся сторонами с текущей. Состояние клетки кроме типа кубика и возможного символа, пролетающего через него, будет содержать направление потока, а также флаг окончания такта. Глобальное тактирование осуществляется на один шаг, если только флаг окончания такта будет сброшен во всех клетках. После выполнения очередного глобального шага флаг окончания такта в каждой клетке снова взводится - для осуществления следующего шага.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:
Shaos wrote:Вроде бы придумал как это хозяйство обсчитывать клеточным автоматом. Правда у этого клеточного автомата внутри одного такта могут быть несколько подтактов - это чтобы символы могли за один шаг (если мерять в тактах) через цепочку акселераторов пройти. Также похоже удаётся сделать "подсасывающий" эффект, чтобы выходные коннекторы сами тянули в себя строчки символов.
Итак, сигналы у нас ходят только по горизонтали и вертикали, значит в качестве соседей у каждой клетки будут выступать только четыре клетки, непосредственно соприкасающиеся сторонами с текущей. Состояние клетки кроме типа кубика и возможного символа, пролетающего через него, будет содержать направление потока, а также флаг окончания такта. Глобальное тактирование осуществляется на один шаг, если только флаг окончания такта будет сброшен во всех клетках. После выполнения очередного глобального шага флаг окончания такта в каждой клетке снова взводится - для осуществления следующего шага.
Кстати это сильно поможет сделать железную реализацию - где каждая клетка является автономным микроконтроллером:

viewtopic.php?t=8851
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

2_Shaos

Post by Lavr »

Shaos ! Просто завидую, дорогой!!!
И как ты еще успеваешь в кубики играть !!! :D
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: 2_Shaos

Post by Shaos »

Lavr wrote:Shaos ! Просто завидую, дорогой!!!
И как ты еще успеваешь в кубики играть !!! :D
Смотри на даты сообщений - я в них играю с 2004 года :)
Я тут за главного - если что шлите мыло на me собака shaos точка net