Дневник проекта ЯОС-КуМир
Дневник проекта ЯОС-КуМир
Похоже, что это надолго, поэтому завожу новую тему.
Итак, вчера я сумел сделать пример достаточно быстрого IPC под Windows (см. тему http://вече.программирование-по-русски. ... ?f=5&t=461), теперь идея линковать КуМир и ЯОС в одно приложение закопана (идея была изначально больная, но нужно было как-то добиться приемлемой скорости работы - оказывается, это возможно и без линковки в одно приложение).
Сегодня я посмотрел на список требований, и понял, что проще собирать под линуксом. Всё поставил, собрал КуМир, настроил IDE, нашёл, где надо поправить исполнитель "Комплексные числа", чтобы в конструкторе и деструкторе комплексного числа выводилось сообщение. Придётся реализовывать что-"распределённую компонентную систему" с автоматическим управлением удалёнными объектами, я такое уже сто лет назад делал для связи Дельфи с Лиспом, теперь будет для связи Кумира через C++ с Обероном.
Идея довольно проста: в АО объекты управляются сборщиком мусора, а в C++, насколько я понял, сущности, доступные среде выполнения алгоритма, создаются и уничтожаются автоматически (при выходе из области видимости). Соответственно, внутри С++ будет подсчёт ссылок, а также будет таблица "ручек", в которой будут зарегистрированы все объекты, полученные из A2. Такая же таблица будет на стороне Оберона. Когда объект удаляется, счётчик ссылок на ручке уменьшается. Когда счётчик ссылок равен нулю, сообщаем A2, что объект больше не нужен. Он удаляется из таблицы ручек и сборщик мусора может его очистить.
Итак, вчера я сумел сделать пример достаточно быстрого IPC под Windows (см. тему http://вече.программирование-по-русски. ... ?f=5&t=461), теперь идея линковать КуМир и ЯОС в одно приложение закопана (идея была изначально больная, но нужно было как-то добиться приемлемой скорости работы - оказывается, это возможно и без линковки в одно приложение).
Сегодня я посмотрел на список требований, и понял, что проще собирать под линуксом. Всё поставил, собрал КуМир, настроил IDE, нашёл, где надо поправить исполнитель "Комплексные числа", чтобы в конструкторе и деструкторе комплексного числа выводилось сообщение. Придётся реализовывать что-"распределённую компонентную систему" с автоматическим управлением удалёнными объектами, я такое уже сто лет назад делал для связи Дельфи с Лиспом, теперь будет для связи Кумира через C++ с Обероном.
Идея довольно проста: в АО объекты управляются сборщиком мусора, а в C++, насколько я понял, сущности, доступные среде выполнения алгоритма, создаются и уничтожаются автоматически (при выходе из области видимости). Соответственно, внутри С++ будет подсчёт ссылок, а также будет таблица "ручек", в которой будут зарегистрированы все объекты, полученные из A2. Такая же таблица будет на стороне Оберона. Когда объект удаляется, счётчик ссылок на ручке уменьшается. Когда счётчик ссылок равен нулю, сообщаем A2, что объект больше не нужен. Он удаляется из таблицы ручек и сборщик мусора может его очистить.
Re: Дневник проекта ЯОС-КуМир
Вспомнил про ту проблему, что нужно написать код обвязки. Со стороны КуМира естественно написать его на самом КуМире. В КуМире 2 чего-то явно не хватает, смотрим сюда:
https://www.cyberforum.ru/other-lang/thread2314778.html
Есть файл src/plugins/kumiranalizer, отвечающая в какой-то степени за импорт модулей. Пытаюсь понять, что в ней к чему. Нужно найти, как устроена регистрация модулей - есть надежда, что сама регистрация есть, а только интерфейса к ней нет...
https://www.cyberforum.ru/other-lang/thread2314778.html
В КуМире 2 нет меню "инструменты", значит, что-то недоделано. Вот такой код работает:В алгоритмах программы и исполнителей могут использоваться алгоритмы программы и любых исполнителей
Регистрация внешних и сетевых исполнителей
Общие сведения
Для того, чтобы использовать внешний или сетевой исполнитель, его нужно предварительно зарегистрировать.
Код: Выделить всё
В алгоритмах программы и исполнителей могут использоваться алгоритмы программы и любых исполнителей
Регистрация внешних и сетевых исполнителей
Общие сведения
Для того, чтобы использовать внешний или сетевой исполнитель, его нужно предварительно зарегистрировать.
Re: Дневник проекта ЯОС-КуМир
Изучение исходников показало, что, скорее всего, в Кумире 2.1.0-rc11 регистрации своих исполнителей на данный момент нет. Однако есть обходной путь (опробовано в Кумир-ПРО 2.1.0-rc11 для Windows):
1. Создаём в рабочей директории КуМира файл яос1.kum с текстом исполнителя:
2. Создаём там же файл клиент-исполнителя.kum:
Если поменять файл яос1.kum, то при повторном запуске (в UI) подтягивается новый вариант - старый не кешируется. Таким образом, можно динамически генерировать код обвязки и подключать его с помощью директивы ВКЛЮЧИТЬ.
1. Создаём в рабочей директории КуМира файл яос1.kum с текстом исполнителя:
Код: Выделить всё
исп яос1
алг запусти яос
нач
вывод "привет от яос"
кон
кон_исп
Код: Выделить всё
использовать Робот | Здесь подключаем других исполнителей
ВКЛЮЧИТЬ "яос1.kum"
алг
нач
запусти яос
кон
Re: Дневник проекта ЯОС-КуМир
Теперь надо сделать межпроцессное взаимодействие. Пока сделаем попроще, на базе сокетов. Есть TestServer.Mod, к-рый, в том числе запускает и echo server. Поменял порт, а клиента взял отсюда:
https://stackoverflow.com/questions/837 ... -with-bash
Также может пригодиться такой клиент на Си: https://gist.github.com/aleksandergurin ... 247db930c1
Кстати, узнал, что X сервер работает через shared memory, т.е. на будущее этот метод взаимодействия считаем перспективным.
Видимо, учитывая существование кода обвязки на обеих сторонах, можно ожидать, что всё равно всё будет тормозить и нет пока причин делать реализацию именно на Shared Memory. Достаточно знать, что это моно будет сделать потом. Также тут https://www.linux.org.ru/forum/developm ... id=8476665 пишут, что ресурсы разделяемой памяти могут быть малодоступны. Ну ладно, это всё потом.
https://stackoverflow.com/questions/837 ... -with-bash
Код: Выделить всё
echo abc | netcat localhost 8000
Кстати, узнал, что X сервер работает через shared memory, т.е. на будущее этот метод взаимодействия считаем перспективным.
Видимо, учитывая существование кода обвязки на обеих сторонах, можно ожидать, что всё равно всё будет тормозить и нет пока причин делать реализацию именно на Shared Memory. Достаточно знать, что это моно будет сделать потом. Также тут https://www.linux.org.ru/forum/developm ... id=8476665 пишут, что ресурсы разделяемой памяти могут быть малодоступны. Ну ладно, это всё потом.
Re: Дневник проекта ЯОС-КуМир
За сегодня:
- разобрался, как делать обвязки - их будем писать на ШАЯ, плюс понадобится общая часть обвязки на C++
- Реализовал в ЯОС тяп-ляп сервер для вызова процедур, вот он:
https://gitlab.com/budden/ja-o-s/-/comm ... 298c430744
- начал делать нового встроенного исполнителя, на базе которого будут писаться код обвязок на стороне ШАЯ - сгенерировал заготовку по инструкции. Остановился на том, что пример клиента для того сервера почему-то лицензирован под BSD.
- разобрался, как делать обвязки - их будем писать на ШАЯ, плюс понадобится общая часть обвязки на C++
- Реализовал в ЯОС тяп-ляп сервер для вызова процедур, вот он:
https://gitlab.com/budden/ja-o-s/-/comm ... 298c430744
- начал делать нового встроенного исполнителя, на базе которого будут писаться код обвязок на стороне ШАЯ - сгенерировал заготовку по инструкции. Остановился на том, что пример клиента для того сервера почему-то лицензирован под BSD.
Re: Дневник проекта ЯОС-КуМир
Вроде уже почти-почти, но не удаётся наладить общение (решил взять сокеты - казалось, так будет проще). Сокет открывается, данные отправляются, ответ готовится и должно дойти сообщение, что пришли данные, но сообщения нет. В консольном есть, а в КуМире - нет. Дошёл до вот этого:
https://stackoverflow.com/questions/474 ... ent-thread
Это я уже не понимаю. Не хочется лезть в дебри ентого Qt, и главное, что времени осталось 0. Неужели так и не будет демки на тему "вызов ЯОС из КуМира"? А казалось, она уже вот-вот задышит...
https://stackoverflow.com/questions/474 ... ent-thread
Это я уже не понимаю. Не хочется лезть в дебри ентого Qt, и главное, что времени осталось 0. Неужели так и не будет демки на тему "вызов ЯОС из КуМира"? А казалось, она уже вот-вот задышит...
Re: Дневник проекта ЯОС-КуМир
Урвав ещё времени, кое-как сделал подключение из КуМира в ЯОС, но до демки это недотягивает, завтра рано вставать. Осталось надеяться только на выходные...
Re: Дневник проекта ЯОС-КуМир
Да блин, жесть эта культя. Но в конце концов, прямо скажем, через задницу, как-то удалось заставить частично заработать. 2 дня читал СтекОверфлоу, но всё равно так и не понял, как же нужно работать с тредами, циклами событий и сокетами вместе. Вроде и примеры есть, а всё равно - когда пытаешься получить то, что надо, оно по всячески не работает.
Итог: вот такой код сообщает об успешном подключении, далее печатает 24, а потом уже ничего хорошего не печатает:
Функция прибавления единицы реализована в ЯОС.
https://github.com/budden/kumir2/tree/2 ... Клиент-ЯОС
В общем, нужен человек со знанием Qt, Питона, готовый также разбираться в Активном Обероне, чтобы доделать всё это. Времени сделать это за пределы демонстрации запуска тетриса у меня не будет, а делать там много чего можно/нужно.
Итог: вот такой код сообщает об успешном подключении, далее печатает 24, а потом уже ничего хорошего не печатает:
Код: Выделить всё
использовать ЯОС
алг
нач
подключиться к серверу яос
вывод "подключение успешно"
вывод вызвать функцию прибавления единицы(23),нс
вывод вызвать функцию прибавления единицы(45),нс
кон
https://github.com/budden/kumir2/tree/2 ... Клиент-ЯОС
В общем, нужен человек со знанием Qt, Питона, готовый также разбираться в Активном Обероне, чтобы доделать всё это. Времени сделать это за пределы демонстрации запуска тетриса у меня не будет, а делать там много чего можно/нужно.
Re: Дневник проекта ЯОС-КуМир
Прототип вроде заработал, дальше уже дело техники, но трудоёмкое. Начал кумиризацию ключевых слов ЯОС.
Re: Дневник проекта ЯОС-КуМир
Догадался, что ПроверщикПереводовЭлементовКода.ярм можно использовать для защиты от конфликтов имён с ключевыми словами КуМира, а также и компилятор можно.
Также поговорил с фрилансерами. Топовые фрилансеры достаточно жадные, впрочем, я тоже оказался жадным. Будем приходить к золотой середине.
Также поговорил с фрилансерами. Топовые фрилансеры достаточно жадные, впрочем, я тоже оказался жадным. Будем приходить к золотой середине.
Re: Дневник проекта ЯОС-КуМир
Клюнул фрилансер, пока внедряет Яроклаву в мой форк КуМир, потом попробуем заманить на проект ЯОС-КуМир
Re: Дневник проекта ЯОС-КуМир
Выложил КуМир с Яроклавой, см. https://www.youtube.com/watch?v=4r5yntWiLj8&t=16s
Re: Дневник проекта ЯОС-КуМир
Набросал ТЗ на весь проект интеграции
https://www.fl.ru/away/?href=https%3A%2 ... мир-яос.md
Многовато чего-то получилось. Начал изобретать формат передачи данных и понял, что будем передавать с помощью
s-выражений (а точнее, б-выражений, которые я скромно назвал в честь себя и которые слегка отличаются от s-выражений - пока
что они существенно проще, но кое-что ещё надо в них дорастить, наверное).
https://www.fl.ru/away/?href=https%3A%2 ... мир-яос.md
Многовато чего-то получилось. Начал изобретать формат передачи данных и понял, что будем передавать с помощью
s-выражений (а точнее, б-выражений, которые я скромно назвал в честь себя и которые слегка отличаются от s-выражений - пока
что они существенно проще, но кое-что ещё надо в них дорастить, наверное).