Пополнение библиотеки программ на RW1 через соревнования
Moderator: Shaos
-
- Admin
- Posts: 24099
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Пополнение библиотеки программ на RW1 через соревнования
Идея - создание пополняемой базы подпрограмм на языке RW1. Т.к. данный язык будет основным в линейке NedoPC-продуктов, то на него хотелось бы много чего портировать или переписать. Написание чего-то одного большого одним человеком выглядит не слишком удачным решением, т.к. возможно многие возьмутся скажем за написание текстового редактора, но не многие допишут его до конца, а вот если разбить задачу на кучу мелких подзадачек и вывесить их в интернете - чтобы народ просто заходил сюда минут на 10-15 и прямо в онлайне что-то по быстрому бы писал на RW1 с мгновеной онлайновой проверкой (Java на клиентской и серверной сторонах). Для экономных можно организовать аналогичный e-mail сервис (почтовый робот у меня на домашнем линухе). По ходу дела можно вести учет кто чего написал и сколько очков набрал - и рисовать на сайте десятку лучших. Лучшим из лучших можно предлагать различные бонусы - типа бесплатную подписку на NedoPC-издание или бепслатное получение некоторых NedoPC-девайсов или еще что. Кстати так можно вести не только софтверную разработку, но и хардверную - любую запись на языке RW1 можно автоматически перевести в параллельную реализацию на VHDL.
Last edited by Shaos on 08 Feb 2005 21:47, edited 3 times in total.
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24099
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Предполагаю несколько основных объектов такой онлайновой системы:
- задача (формулировка действий которые должна делать подпрограмма)
- решение (подпрограмма на RW1 для решения какой-то задачи)
- тест (программа на RW1 для проверки решений)
- проект (большая программа, составленные из подпрограмм-решений)
- задача (формулировка действий которые должна делать подпрограмма)
- решение (подпрограмма на RW1 для решения какой-то задачи)
- тест (программа на RW1 для проверки решений)
- проект (большая программа, составленные из подпрограмм-решений)
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Maniac
- Posts: 233
- Joined: 12 Oct 2004 13:49
-
- Admin
- Posts: 24099
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Дороговато ты стоишьdhau wrote:Да, интересная идея. Но чур пусть будет несколько хорошо закомментированных примеров. Я люблю в разреза в карьер (или с корабля на бал?), не люблю читать всякие описания за 10+ страниц если мне за это не платят 65+ $ в час

Ок, будут примеры - все равно большая часть кода предполагает быть открытой
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24099
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Итак, модуль - это робот. Можно кстати его так и называть - robot. В общем случае у модуля есть автор, однако будучи реализован в исходниках модуль отдается в безвозмездное пользование всеми - и любой кто захочет отпочковать от модуля новый модуль имеет возможность вписаться в линейку его авторов.
Роботы работают с потоками данных - т.е. имеют входы и выходы, что позволяет считать их блоками некой большой схемы, которая также может быть модулем более высокоуровневой схемы. Таким образом мы получим возможность иерархической реализации сложных концепций из простых кирпичиков и подкирпичиков. Причем авторы отдельных кирпичиков в общем случе могут и не догадываться где и для чего будут использованы их модули. Также реализация будет подразумевать и VHDL вариант для выпуска систем "в железе".
По поводу лицензирования - строящиеся таким образом системы предполагается распространять под лицензией GPL и с копирайтом главного веб-сайта проекта (по-видимому это будет rwar.net).
Роботы работают с потоками данных - т.е. имеют входы и выходы, что позволяет считать их блоками некой большой схемы, которая также может быть модулем более высокоуровневой схемы. Таким образом мы получим возможность иерархической реализации сложных концепций из простых кирпичиков и подкирпичиков. Причем авторы отдельных кирпичиков в общем случе могут и не догадываться где и для чего будут использованы их модули. Также реализация будет подразумевать и VHDL вариант для выпуска систем "в железе".
По поводу лицензирования - строящиеся таким образом системы предполагается распространять под лицензией GPL и с копирайтом главного веб-сайта проекта (по-видимому это будет rwar.net).
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24099
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
-
- Doomed
- Posts: 491
- Joined: 16 Apr 2005 22:35
- Location: Томск
-
- Admin
- Posts: 24099
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
А вот этого не выйдет (хотя очень хочется) так как вся современная программируемая логика имеет закрытую архитектуру, программируемую только из специальных программ производителей соответствующих микрух (обсуждение вопроса читать тут) - остается уповать только на старые добрые палы-галы - найти бы такие, которые по ISP могут программироваться без ПЦSfS wrote:Это было бы наверное очень интересно. Если бы еще была возможность в устройстве "на лету" VHDL компилировать и ПЛИСу прошивать....Shaos wrote:строить симуляторы электронных схем и готовить VHDL-описание программируемой логики!

Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Doomed
- Posts: 491
- Joined: 16 Apr 2005 22:35
- Location: Томск
-
- Admin
- Posts: 24099
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Выглядеть это будет примерно так:Shaos wrote:Роботы работают с потоками данных - т.е. имеют входы и выходы, что позволяет считать их блоками некой большой схемы, которая также может быть модулем более высокоуровневой схемы. Таким образом мы получим возможность иерархической реализации сложных концепций из простых кирпичиков и подкирпичиков. Причем авторы отдельных кирпичиков в общем случе могут и не догадываться где и для чего будут использованы их модули. Также реализация будет подразумевать и VHDL вариант для выпуска систем "в железе".
Code: Select all
robot "Sum/3-100.1"
author "Somebody,Shaos"
main()
{
def vec[4] // вектор ввода вывода
while(1)
{
recvp vec // получить вектор от родителя
vec[3]=vec[1]+vec[2] // что-то с ним поделать
sendp vec N // послать измененный вектор обратно родителю
// повторить до состояния HALT
}
}
Для создания дочерних объектов-модулей предлагается некий трюк со спецкомандами, передаваемыми через SAY. Что-то типа такого:
Code: Select all
robot "Test"
author "Test"
main()
{
def vec[5] // предположим нам надо сделать vec[4]=vec[1]+vec[2]+vec[3]
SAY "$new Sum" // тут создается объект класса Sum и в N прописвывается его индекс
sum1 = N
def vec1[4]={3} // сразу же можно зарезеривровать вектор-пакет для этого объекта
SAY "$new Sum" // создаем еще один объект Sum
sum2 = N
def vec2[4]={3} // вектор-пакет для второго объекта
while(1)
{
recvp vec // получим от родителя (или пользователя) вектор начальных значений
super = N // запомним идентификатор родителя
vec1[1] = vec[1]
vec1[2] = vec[2]
sendp vec1 sum1 // отправим аргументы первому объекту
recvp vec1 // получим решение
vec2[1] = vec1[3] // возьмем результат
vec2[2] = vec[3] // и третье слагаемое
sendp vec2 sum2 // отправим аргументы второму объекту
recvp vec2 // получим решение
vec[4] = vec2[3] // сохраним это решение как результат работы модуля
sendp vec super // уведомим родителя о своем решении
// продолжим
}
}
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24099
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Для компактности все вышесказанное можно обернуть в псевдо-объектно-ориентированную обертку посредством макросов RW1 (чтобы это заработало надо компилятор RW1C немного подправить):
// во-первых, зададим два основных ОО-макроса:
@NEW(3)=def @1[@2];say "$new @3";i_@1=N;@1[0]=@2-1
@RUN(1)=sendp @1 i_@1;recvp @1
// затем мы можем определить макросы "классов":
// класс Sum (сумма) A+B=S
@SUM(1)=@NEW(@1,4,Sum)
@SUM_A(1)=@1[1]
@SUM_B(1)=@1[2]
@SUM_S(1)=@1[3]
// класс Inc (инкремент) A++
@INC(1)=@NEW(@1,2,Inc)
@INC_A(1)=@1[1]
// тогда работа с модулями-классами будет выглядеть так:
@SUM(s1) // объект s1 класса Sum
@SUM(s2) // объект s2 класса Sum
@INC(ii) // объект ii класса Inc
...
@SUM_A(s1)=1
@SUM_B(s1)=2
@RUN(s1)
@SUM_A(s2)=3
@SUM_B(s2)=@SUM_S(s1)
@RUN(s2)
@INC_A(ii)=@SUM_S(s2)
@RUN(ii)
result=@INC_A(ii) // в результате должно получиться 7
// во-первых, зададим два основных ОО-макроса:
@NEW(3)=def @1[@2];say "$new @3";i_@1=N;@1[0]=@2-1
@RUN(1)=sendp @1 i_@1;recvp @1
// затем мы можем определить макросы "классов":
// класс Sum (сумма) A+B=S
@SUM(1)=@NEW(@1,4,Sum)
@SUM_A(1)=@1[1]
@SUM_B(1)=@1[2]
@SUM_S(1)=@1[3]
// класс Inc (инкремент) A++
@INC(1)=@NEW(@1,2,Inc)
@INC_A(1)=@1[1]
// тогда работа с модулями-классами будет выглядеть так:
@SUM(s1) // объект s1 класса Sum
@SUM(s2) // объект s2 класса Sum
@INC(ii) // объект ii класса Inc
...
@SUM_A(s1)=1
@SUM_B(s1)=2
@RUN(s1)
@SUM_A(s2)=3
@SUM_B(s2)=@SUM_S(s1)
@RUN(s2)
@INC_A(ii)=@SUM_S(s2)
@RUN(ii)
result=@INC_A(ii) // в результате должно получиться 7
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24099
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
-
- Admin
- Posts: 24099
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Я даже название для всего этого (язык плюс онлайновый сервис ведения проектов на нем) придумал - ROBERTA (Reasonable Object Base for Embedded Real Time Applications). На самом деле название я придумал давно, а вот расшифровку аббревиатуры - только чтоShaos wrote:Вчера я после тщательного обдумывания изобрел объектно-ориентированное расширение RW1, отдаленно напоминающее Java - компилируемый код RW1 будет получатся из объектно-ориентированной программы с помощью специального транслятора

Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24099
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Кстати последний RW1C компилятор уже может такие фокусы с макросами делать!Shaos wrote:Я даже название для всего этого (язык плюс онлайновый сервис ведения проектов на нем) придумал - ROBERTA (Reasonable Object Base for Embedded Real Time Applications). На самом деле название я придумал давно, а вот расшифровку аббревиатуры - только что
А ROBERTA теперь расшифровывается как Real Object Basis for Embedded Real-Time Applications
Я тут за главного - если что шлите мыло на me собака shaos точка net