какого именно? их было поболее одного вроде как...Lavr wrote:А супротив С ?Shaos wrote:Ну по любому побыстрее бейсика будетLavr wrote:А насколько эффективный код генерирует твой язык для Intel 8080 ?
Robby - расширение языка Robot Warfare 1 (RW1)
Moderator: Shaos
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Robby - расширение языка RW1
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Robby - расширение языка RW1
Так и бейсики - есть компиляторы...Shaos wrote:какого именно? их было поболее одного вроде как...Lavr wrote:А супротив С ?Shaos wrote:Ну по любому побыстрее бейсика будетLavr wrote:А насколько эффективный код генерирует твой язык для Intel 8080 ?

iLavr
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Robby - расширение языка RW1
для 8080 компиляторы бейсика? ты видел хотя бы один? 
и бейсик для 8080 вроде как был один - микрософтовский

и бейсик для 8080 вроде как был один - микрософтовский

Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Robby - расширение языка RW1
Видел и не один даже. Компилятор бейсика для 8080 под СР/М даже у меня есть.Shaos wrote:для 8080 компиляторы бейсика? ты видел хотя бы один?
А кросс-компиляторы, я даже здесь на форуме искал публично - так поболе одного!
Ну если у меня есть СР/М-овский, то значит точно не один...Shaos wrote:и бейсик для 8080 вроде как был один - микрософтовский

iLavr
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Robby - расширение языка RW1
У микрософта даже свой CP/M-80 был - MSX-DOS назывался 

Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Robby - расширение языка RW1
А вот у меня CP/M, похоже, от DR, только вот кем адаптирована - не знаю, поскольку версияShaos wrote:У микрософта даже свой CP/M-80 был - MSX-DOS назывался
не от Бриджиди. Его версия появилась позже.
Версия CP/M от Бриджиди адаптированная под "Специалист" у меня появилась только с эмулятором
от Шевцова, и я с ней так и не поигрался.
Но тем не менее - ты сравнивал свой Рубби с каким-либо компилятором С ?
iLavr
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Robby - расширение языка RW1
У меня при необходимости (путём добавления более детальных правил в __RULES) можно добиться скорости ассемблерного кода, работающего с 16-битными словами - по поводу более продвинутой математики (умножить/разделить), то она была взята из исходников SmallC для CP/M - от него же собственно произошли другие существующе сишные кросс-компили для 8080 - в частности SDCC и Z88DK (который сейчас только Z80)
А вообще про 8080 компиляцию из Robby лучше говорить в соответствущем топике, например обсудить пример с двумя вложенными циклами:
http://www.nedopc.org/forum/viewtopic.php?p=144529#p144529
А вообще про 8080 компиляцию из Robby лучше говорить в соответствущем топике, например обсудить пример с двумя вложенными циклами:
http://www.nedopc.org/forum/viewtopic.php?p=144529#p144529
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Robby - расширение языка RW1
Ну ты сам как бы дал здесь повод про 8080...Shaos wrote:А вообще про 8080 компиляцию из Robby лучше говорить в соответствущем топике...
Shaos wrote:дайте две явы для Intel 8080 пжалста![]()
iLavr
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Robby - расширение языка RW1
Это был ответ на вопрос зачем я изобрёл свой собственный язык, если есть новая прекрасная яваLavr wrote:Ну ты сам как бы дал здесь повод про 8080...Shaos wrote:А вообще про 8080 компиляцию из Robby лучше говорить в соответствущем топике...Shaos wrote:дайте две явы для Intel 8080 пжалста![]()

Одна из причин, почему я не использую яву - её попросту нету для целевых платформ, для которых пригоден мой язык
P.S. Причём напомню, что с RW1 всё началось на 16-битном x86 и MS-DOS...
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Robby - расширение языка RW1
Про MSX отрезал и перенёс в форум MSX:Shaos wrote:У микрософта даже свой CP/M-80 был - MSX-DOS назывался
viewtopic.php?f=96&t=18866
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Robby - расширение языка RW1
Простой интерпретатор RW0 я писал на PocketC прямо на своём пальме в мае-июне 2001 года (каких-то 22 года назад кхе-кхе) - не могу нигде тут на форуме найти где я про это писал - видимо нигде (форума тогда ещё небыло) - скопипащу сырцы прямо сюда:
Роботы загружались из хексов, хранящихся как странички блокнота пальма вот в таком виде:
Роботы загружались из хексов, хранящихся как странички блокнота пальма вот в таком виде:
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Robby - расширение языка RW1
Зарегал доменное имя robby.club - может там какую обучалку пошаговую размещу по языку Robby на подобие https://try.ruby-lang.org/ 

Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Robby - расширение языка RW1
Цикл for(A in 1..10) превращается в тоже самое как и for(A=1;A<=10;A++) - это просто, а вот с for(A in array) надо помудрить ибо A в данном случае не индекс, а значение соответствующего элемента из массива, т.е. придётся для хранения индекса заводить "скрытую" переменную _1 (и далее _2, _3 и т.д.), которая будет инкрементироваться для доступа ко всем элементам массива array и A в цикле "под водой" будет присваиваться значение array[_1]. Обязательность скобок можно отменить - тогда синтаксис циклов будет похож на Rust. Аналогичный подход со скрытыми переменными, которые генерит сам компилятор, я планировал использовать для реализации вызовов функций в составе арифметических выражений.Shaos wrote:В первую очередь надо поддержать вышепредложенный вариант DEF STRING$="aaa" (даже без квадратных скобок т.к. необходимый размер массива в словах будет вычисляться компилятором).
Во вторую очередь надо реализовать расширение for: for(A in 1..10) (как в аде или руби) и for(A in array) (как в джаваскрипте), причём на уровне препроцессора!
Также хочу количество регистров увеличить до 26, дабы охватить все буквы алфавита, а вот с локальнымм переменными надо подумать...
А по регистрам кроме всех 26 букв (для того чтобы добить до 32) можно ещё добавить регистры ALPHA, BETA, GAMMA, DELTA, а также GPIO и GPIODIR (для так давно желаемой платформы микроконтроллеров RW1P4)...
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Robby - расширение языка RW1
Примерно с 2007 по 2016 годы я хотел называть расширение языка RW1 аббревиатурой ROBERTA (Real Object Basic Environment Reflecting Ttransactional Architecture) - см. закрытый топик viewtopic.php?f=46&t=8635&hilit=roberta - и только потом передумал и назвал язык Robby. Сейчас можно снова немножко это вспомнить и начать позиционировать язык программирования Robby как "Robot Oriented Programming Language" (ROPL)
Можно таки сделать объектную модель, где объекты описываются роботами, которые обмениваются сообщениями, включая возможность компилировать такие программы в бинарники ретроплатформ через nedoPC SDK для запуска в пределах одной системы либо в сети ретрокомпьютеров - вот ранний текст на эту тему, который я написал ещё в 2002 году и распространял как текстовый файл rw1_para.txt:
Более того, реализация RobbyVM в браузере уже многое из вышеперечисленного делает - надо просто описать это всё единообразно с возможностью использования в разных применениях, в частности на базе программирования для Circuits.CC
P.S. А может быть ещё и соревнования роботов вернуть?
https://web.archive.org/web/20020114102449/http://robots.shaos.ru/cgi/stat.cgi?top10

Можно таки сделать объектную модель, где объекты описываются роботами, которые обмениваются сообщениями, включая возможность компилировать такие программы в бинарники ретроплатформ через nedoPC SDK для запуска в пределах одной системы либо в сети ретрокомпьютеров - вот ранний текст на эту тему, который я написал ещё в 2002 году и распространял как текстовый файл rw1_para.txt:
Code: Select all
RW1 КАК ЯЗЫК ПРОГРАММИРОВАНИЯ ПАРАЛЛЕЛЬНЫХ ПРОЦЕССОВ
----------------------------------------------------
Александр Шабаршин (shaos@mail.ru)
http://robots.shaos.ru
В статье затрагивается возможность использования языка
программирования роботов RW1 в качестве языка
параллельных процессов (агентов).
Язык RW1 к версии 2.1 прошел путь от ассемблероподобного
языка к языку типа Си (http://shaos.ru/main_rus/rw1_r.htm).
Чтобы представить специфику языка, приведем пример простой
программы:
robot "Program 1"
author "A.Shabarshin"
+rw1_std.rwi
main()
{
while(1)
{
// вечный цикл
}
}
Данная программа не делает ничего, но в ней можно увидеть
то, что должно быть обязательно в любой RW1 программе.
Это ключевое слово ROBOT, за которым следует имя программы
в кавычках. Слово AUTHOR, за которым идет имя автора
программы в кавычках. Основная функция программы main(),
которая должна быть самой первой функцией программы.
Кроме того, внутри программы организуется вечный цикл.
В файле RW1_STD.RWI определены некоторые полезные макросы.
Будем подразумевать, что мы используем подход RW1P1 -
Robot Warfare 1 Platform 1, что может быть перенесено и
на RW1P2 (см. http://shaos.ru/main_rus/rw1_r.htm#RW1P1).
В среде исполнения может быть запущено несколько роботов
(программ или агентов), которые могут взаимодействовать
друг с другом посредством сообщений. Каждый робот в
системе имеет свой уникальный идентификационный номер,
который можно узнать, прочитав регистр I. Например, так:
id=I; say "ID=&id "
Идентификаторы присваиваются начиная с 1. Идентификатор
0 обозначает всех роботов в системе (для широковещательных
сообщений).
Самым простым типом сообщений является передача одного
числового значения с помощью команды SEND, которое
может быть принято командой RECV. Пример:
send -13 10 // отправить роботу с номером 10 число -13
recv info // если буфер не пуст, принять число и
// сохранить его в переменной info
Команда RECV является очень информативной - кроме
сохранения принятого числа, она располагает некоторую
информацию в регистрах робота: регистр N - порядковый
номер робота-передатчика (если N равен 0, то буфер
принятых сообщений пуст); в регистрах X и Y записываются
относительные координаты робота-передатчика (в случае,
если пространственная привязка имеет смысл); в регистр
K помещается значение времени, в которое был отправлен код.
Такое почисловое взаимодействие не слишком информативно.
Более мощным средством межпроцессного обмена языка RW1,
появившемся в версии 2.1, является прием/передача "пакетов".
Итак, что же такое "пакет" в языке RW1? Пакет - это массив
чисел, первое из которых обозначает количество оставшихся.
Например:
def pack1[5] = {4, 1,2,3,4}
В данном случае создается массив pack1, который является
RW1-пакетом с длиной 4. Этот пакет можно передать в
качестве сообщения другому роботу с помощью команды SENDP:
sendp pack1 10 // отправить пакет роботу 10, или
sendp pack1[0] 10 // то же самое
Если вы смогли догадаться, можно отправить и часть массива,
и даже не с нулевого элемента. Пример:
sendp pack1[2] 10 // отправляем пакет c ячейки 2 - в ней
// мы имеем число 2, поэтому отправляется только 2 числа
Прием пакета осуществляется командой RECVP:
def pack0[10]
recvp pack0
if(n) say "принят пакет размером &k ячеек"
else say "ошибка приема"
Для копирования пакетов используется команда COPYP:
copyp target source // копирование пакета из source
Интересно отметить, что пара SEND и RECVP совместимы.
Только при этом одно число будет превращаться в пакет
(массив с двумя элементами), первое из которых будет 1.
Вторая пара SENDP и RECV совместима лишь частично - при
этом происходит потеря всех данных за исключением первого
числа. Так что если вы решили использовать для
межпроцессного взаимодействия пакеты, не пользуйтесь
командой RECV. Командой SEND пользоваться можно, так как
приходящие отдельные сообщения успешно принимаются пакетной
командой RECVP (как было указано выше).
Итак, типовая программа-робот будет выглядеть так:
robot "Program 2"
author "A.Shabarshin"
+rw1_std.rwi
main()
{
// определение и инициализация массивов
def buff[256]
time = 0 // определение момента активности
while(1)
{ // вечный цикл
if(time>=T)
{ // некие действия
send 111 // послать широковещательное сообщение
// возможно тут будет переназначение time
}
recvp buff // получение сообщения
if(n)
{ // анализ полученного сообщения
say "> &n &x &y &k received"
}
}
}
Следует разъяснить что у нас будет храниться в переменной
TIME. Здесь мы будет сохранять метку времени, по достижению
которой наш робот должен проявить некую самостоятельную
активность. Регистр T используется для контроля времени -
в нем хранится количество тиков от момента старта системы.
Если мы имеем привязку к реальному времени (+RW1P1.RWI),
то в T хранится время в десятых долях секунды (другое
значение делителя может быть установленно отдельно).
Кроме того, активность будет проявляться при получении
какого-либо сообщения извне.
Попробуем написать робота, который определяет количество
своих собратьев (экземпляров данного процесса) в системе.
robot "Program 3 - count me"
author "A.Shabarshin"
+rw1_std.rwi
+rw1p1.rwi
main()
{
def buff[256]
def robots[100] // надеюсь их будет не больше 100 ;)
nrobot = 0 // начальное значение счетчика
time = 10 // определение момента активности
say "I'm &I "
while(1)
{ // вечный цикл
if(time>=T)
{ // некие действия
// вывести список найденных роботов
for(ii=0;ii<nrobot;ii++)
{
jj = ii+1
say "&jj id=&robots[ii] "
}
nrobot = 0 // обнуляем
send 111 // послать широковещательное сообщение
time = time + @TIME_SEC(5) // повторить через 5 секунд
}
recv buff[0] // получение сообщения
if(n)
{ // анализ полученного сообщения
if(buff[0]==111) // это кто-то наш :)
{
robots[nrobot] = n
nrobot = nrobot+1
}
}
}
}
Copyright (c) 2002, Alexander Shabarshin
P.S. А может быть ещё и соревнования роботов вернуть?
https://web.archive.org/web/20020114102449/http://robots.shaos.ru/cgi/stat.cgi?top10
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Robby - расширение языка Robot Warfare 1 (RW1)
В апреле 2023 года я обнаружил косяк в своём компиляторе Robby - CONTINUE внутри FOR не меняет счётчик - первопричина кроется в том, как я изначально переводил сложные синтаксические конструкции языка в простые через препроцессор:
на самом деле оно должно быть так (чтобы expr3 выполнялось по continue тоже):
или если нумеровать метки по порядку:
осталось вспомнить как я кодил такие преобразования 24 года назад - заодно можно и for(A in 1..10) поддержать...
P.S. Ещё когда я в 2018 году кодил TERNARO то наткнулся на другой косяк компилятора, когда сложные условия в if() работали неправильно - то ли я с приоритетами операций напутал, толи ещё что связанное с моим JS-фреймворком, но мне пришлось наставить скобок либо вообще разбить сложный if на пачку простых...
Code: Select all
for(expr1,expr2,expr3)
{
expr1
l1:
(expr2);IFN L l2
-->
continue GOTO l1
break GOTO l2
expr3;
GOTO l1
} l2:
Code: Select all
for(expr1,expr2,expr3)
{
expr1
l1:
(expr2);IFN L l2
-->
continue GOTO l3 <<<<<<<
break GOTO l2
>>>>>>> l3: expr3;
GOTO l1
} l2:
Code: Select all
for(expr1,expr2,expr3)
{
expr1
l1:
(expr2);IFN L l3
-->
continue GOTO l2
break GOTO l3
l2:
expr3;
GOTO l1
} l3:
P.S. Ещё когда я в 2018 году кодил TERNARO то наткнулся на другой косяк компилятора, когда сложные условия в if() работали неправильно - то ли я с приоритетами операций напутал, толи ещё что связанное с моим JS-фреймворком, но мне пришлось наставить скобок либо вообще разбить сложный if на пачку простых...
Я тут за главного - если что шлите мыло на me собака shaos точка net