nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 18 Apr 2024 22:38



Reply to topic  [ 15 posts ] 
Brixputer как эзотерический язык программирования 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22537
Location: Silicon Valley
Reply with quote
В продолжение темы "Игра в кубики" (то что я раньше называл "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 от Тьюринг-подобных языков состоит в том, что тут вычисление идёт не последовательно, а параллельно (т.е. такой подход ближе к электронике, чем к программированию)

_________________
:dj: https://mastodon.social/@Shaos


Last edited by Shaos on 19 Oct 2007 21:17, edited 2 times in total.



11 Oct 2007 18:39
Profile WWW
Senior

Joined: 09 Jun 2005 05:34
Posts: 112
Reply with quote
Post 
Shaos wrote:
Основное отличие Bricksputera от Тьюринг-подобных языков состоит в том, что тут вычисление идёт не последовательно, а параллельно (т.е. такой подход ближе к электронике, чем к программированию)

Надо тебе эзотерический язык программирования ПЛИСок придумать. :-) А для этого изобретения предлагаю название CHDL - Cubic Hardware Description Language. Так, все, (tm) мой. 8)


11 Oct 2007 23:13
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22537
Location: Silicon Valley
Reply with quote
Post 
Shaos wrote:
Всё ломал голову как же это назвать - предполагал charbricks и data-driven cellular automat, но пока остановился на названии bricksputer...


Решил упросить название концепции - BRIXPUTER

P.S. И даже уже домены соответствующие зарегистрировал ;)

_________________
:dj: https://mastodon.social/@Shaos


Last edited by Shaos on 19 Oct 2007 21:19, edited 2 times in total.



19 Oct 2007 05:52
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22537
Location: Silicon Valley
Reply with quote
Post 
Предполагаемые задачи для соревнований в мастерстве владения Brixputer-ом:

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

Площадь занимаемая решением вычисляется как площадь основного игрового поля плюс площади всех составных кубиков.

_________________
:dj: https://mastodon.social/@Shaos


Last edited by Shaos on 19 Oct 2007 21:19, edited 1 time in total.



19 Oct 2007 06:39
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22537
Location: Silicon Valley
Reply with quote
Post 
Shaos wrote:
Shaos wrote:
... например вот так будут описываться блоки "равно" и "больше":

Image


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


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

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

Code:
=v.T
*v~v
:>/>>=
*^~^
=^.F


Программа Gr.brx, реализующая функцию "больше":

Code:
=v. .T
;>\'~v
*^:>\>>=
///,~^
=^. .F


Как можно видеть, под каждую клетку отведено 2 символа и если первый из них точка, то далее идёт буква, содержащаяся в этой клетке. Точка-пробел означают пустую клетку. Крайние справа пустые клетки разрешается опускать.

_________________
:dj: https://mastodon.social/@Shaos


Last edited by Shaos on 26 Apr 2010 21:55, edited 2 times in total.



19 Oct 2007 20:37
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22537
Location: Silicon Valley
Reply with quote
Post 
Колонки рабочего поля предлагается называть буквами латинского алфавита - 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:

_________________
:dj: https://mastodon.social/@Shaos


19 Oct 2007 21:01
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22537
Location: Silicon Valley
Reply with quote
Post 
попробовал набросать HelloWorld на языке Brixputera, вот что получается если не допускать в начальном состоянии динамических "летящих" символов:

Image

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

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

Image

в этом варианте с самого начала имеем текст, двигающийся справа-налево - по направлению к выходному коннектору (можно представить, что например выходные коннекторы имеют "всасывающий" эффект)

_________________
:dj: https://mastodon.social/@Shaos


21 Oct 2007 16:13
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22537
Location: Silicon Valley
Reply with quote
Post 
Есть желание начать писать интерпретатор языка Brixputer на функциональном языке программирования Hopeless

_________________
:dj: https://mastodon.social/@Shaos


21 Oct 2007 17:38
Profile WWW
Retired

Joined: 03 Aug 2003 22:37
Posts: 1474
Location: Moscow
Reply with quote
Post 
Жаль что нет буфера с задержкой во времени, тогда схема стала бы много проще ;)

_________________
Extreme Entertainment


22 Oct 2007 12:14
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22537
Location: Silicon Valley
Reply with quote
Post 
Mac Buster wrote:
Жаль что нет буфера с задержкой во времени, тогда схема стала бы много проще ;)


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

Думаю ещё добавить один кубик, который бы синхронизировал два перпендикулярных потока - задерживал бы один пока во втором пусто и соответственно синхронно пропускал бы оба потока когда с обоих сторон идут непустые символы

_________________
:dj: https://mastodon.social/@Shaos


22 Oct 2007 21:56
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22537
Location: Silicon Valley
Reply with quote
Post 
Вроде бы придумал как это хозяйство обсчитывать клеточным автоматом. Правда у этого клеточного автомата внутри одного такта могут быть несколько подтактов - это чтобы символы могли за один шаг (если мерять в тактах) через цепочку акселераторов пройти. Также похоже удаётся сделать "подсасывающий" эффект, чтобы выходные коннекторы сами тянули в себя строчки символов.

_________________
:dj: https://mastodon.social/@Shaos


26 Apr 2010 21:58
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22537
Location: Silicon Valley
Reply with quote
Post 
Shaos wrote:
Вроде бы придумал как это хозяйство обсчитывать клеточным автоматом. Правда у этого клеточного автомата внутри одного такта могут быть несколько подтактов - это чтобы символы могли за один шаг (если мерять в тактах) через цепочку акселераторов пройти. Также похоже удаётся сделать "подсасывающий" эффект, чтобы выходные коннекторы сами тянули в себя строчки символов.


Итак, сигналы у нас ходят только по горизонтали и вертикали, значит в качестве соседей у каждой клетки будут выступать только четыре клетки, непосредственно соприкасающиеся сторонами с текущей. Состояние клетки кроме типа кубика и возможного символа, пролетающего через него, будет содержать направление потока, а также флаг окончания такта. Глобальное тактирование осуществляется на один шаг, если только флаг окончания такта будет сброшен во всех клетках. После выполнения очередного глобального шага флаг окончания такта в каждой клетке снова взводится - для осуществления следующего шага.

_________________
:dj: https://mastodon.social/@Shaos


26 Apr 2010 22:19
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22537
Location: Silicon Valley
Reply with quote
Post 
Shaos wrote:
Shaos wrote:
Вроде бы придумал как это хозяйство обсчитывать клеточным автоматом. Правда у этого клеточного автомата внутри одного такта могут быть несколько подтактов - это чтобы символы могли за один шаг (если мерять в тактах) через цепочку акселераторов пройти. Также похоже удаётся сделать "подсасывающий" эффект, чтобы выходные коннекторы сами тянули в себя строчки символов.


Итак, сигналы у нас ходят только по горизонтали и вертикали, значит в качестве соседей у каждой клетки будут выступать только четыре клетки, непосредственно соприкасающиеся сторонами с текущей. Состояние клетки кроме типа кубика и возможного символа, пролетающего через него, будет содержать направление потока, а также флаг окончания такта. Глобальное тактирование осуществляется на один шаг, если только флаг окончания такта будет сброшен во всех клетках. После выполнения очередного глобального шага флаг окончания такта в каждой клетке снова взводится - для осуществления следующего шага.


Кстати это сильно поможет сделать железную реализацию - где каждая клетка является автономным микроконтроллером:

http://www.nedopc.org/forum/viewtopic.php?t=8851

_________________
:dj: https://mastodon.social/@Shaos


27 Apr 2010 06:46
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos ! Просто завидую, дорогой!!!
И как ты еще успеваешь в кубики играть !!! :D


28 Apr 2010 22:58
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22537
Location: Silicon Valley
Reply with quote
Lavr wrote:
Shaos ! Просто завидую, дорогой!!!
И как ты еще успеваешь в кубики играть !!! :D


Смотри на даты сообщений - я в них играю с 2004 года :)

_________________
:dj: https://mastodon.social/@Shaos


29 Apr 2010 04:33
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 15 posts ] 

Who is online

Users browsing this forum: No registered users and 35 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.