Дневник проекта ЯОС-КуМир

Только технические вопросы по ЯОС и MINOS. Терминология и прочее - в других форумах.
Ответить
БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Дневник проекта ЯОС-КуМир

Сообщение БудДен » 26.07.21 22:04

Похоже, что это надолго, поэтому завожу новую тему.

Итак, вчера я сумел сделать пример достаточно быстрого IPC под Windows (см. тему http://вече.программирование-по-русски. ... ?f=5&t=461), теперь идея линковать КуМир и ЯОС в одно приложение закопана (идея была изначально больная, но нужно было как-то добиться приемлемой скорости работы - оказывается, это возможно и без линковки в одно приложение).

Сегодня я посмотрел на список требований, и понял, что проще собирать под линуксом. Всё поставил, собрал КуМир, настроил IDE, нашёл, где надо поправить исполнитель "Комплексные числа", чтобы в конструкторе и деструкторе комплексного числа выводилось сообщение. Придётся реализовывать что-"распределённую компонентную систему" с автоматическим управлением удалёнными объектами, я такое уже сто лет назад делал для связи Дельфи с Лиспом, теперь будет для связи Кумира через C++ с Обероном.

Идея довольно проста: в АО объекты управляются сборщиком мусора, а в C++, насколько я понял, сущности, доступные среде выполнения алгоритма, создаются и уничтожаются автоматически (при выходе из области видимости). Соответственно, внутри С++ будет подсчёт ссылок, а также будет таблица "ручек", в которой будут зарегистрированы все объекты, полученные из A2. Такая же таблица будет на стороне Оберона. Когда объект удаляется, счётчик ссылок на ручке уменьшается. Когда счётчик ссылок равен нулю, сообщаем A2, что объект больше не нужен. Он удаляется из таблицы ручек и сборщик мусора может его очистить.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Дневник проекта ЯОС-КуМир

Сообщение БудДен » 27.07.21 14:22

Вспомнил про ту проблему, что нужно написать код обвязки. Со стороны КуМира естественно написать его на самом КуМире. В КуМире 2 чего-то явно не хватает, смотрим сюда:

https://www.cyberforum.ru/other-lang/thread2314778.html
В алгоритмах программы и исполнителей могут использоваться алгоритмы программы и любых исполнителей

Регистрация внешних и сетевых исполнителей
Общие сведения
Для того, чтобы использовать внешний или сетевой исполнитель, его нужно предварительно зарегистрировать.
В КуМире 2 нет меню "инструменты", значит, что-то недоделано. Вот такой код работает:

Код: Выделить всё

В алгоритмах программы и исполнителей могут использоваться алгоритмы программы и любых исполнителей

Регистрация внешних и сетевых исполнителей
Общие сведения
Для того, чтобы использовать внешний или сетевой исполнитель, его нужно предварительно зарегистрировать.
Есть файл src/plugins/kumiranalizer, отвечающая в какой-то степени за импорт модулей. Пытаюсь понять, что в ней к чему. Нужно найти, как устроена регистрация модулей - есть надежда, что сама регистрация есть, а только интерфейса к ней нет...

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Дневник проекта ЯОС-КуМир

Сообщение БудДен » 27.07.21 15:05

Изучение исходников показало, что, скорее всего, в Кумире 2.1.0-rc11 регистрации своих исполнителей на данный момент нет. Однако есть обходной путь (опробовано в Кумир-ПРО 2.1.0-rc11 для Windows):

1. Создаём в рабочей директории КуМира файл яос1.kum с текстом исполнителя:

Код: Выделить всё

исп яос1

алг запусти яос
нач
вывод "привет от яос"
кон


кон_исп
2. Создаём там же файл клиент-исполнителя.kum:

Код: Выделить всё

использовать Робот | Здесь подключаем других исполнителей
ВКЛЮЧИТЬ "яос1.kum"
алг 
нач
запусти яос
кон
Если поменять файл яос1.kum, то при повторном запуске (в UI) подтягивается новый вариант - старый не кешируется. Таким образом, можно динамически генерировать код обвязки и подключать его с помощью директивы ВКЛЮЧИТЬ.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Дневник проекта ЯОС-КуМир

Сообщение БудДен » 27.07.21 17:49

Теперь надо сделать межпроцессное взаимодействие. Пока сделаем попроще, на базе сокетов. Есть TestServer.Mod, к-рый, в том числе запускает и echo server. Поменял порт, а клиента взял отсюда:

https://stackoverflow.com/questions/837 ... -with-bash

Код: Выделить всё

echo abc | netcat localhost 8000
Также может пригодиться такой клиент на Си: https://gist.github.com/aleksandergurin ... 247db930c1
Кстати, узнал, что X сервер работает через shared memory, т.е. на будущее этот метод взаимодействия считаем перспективным.

Видимо, учитывая существование кода обвязки на обеих сторонах, можно ожидать, что всё равно всё будет тормозить и нет пока причин делать реализацию именно на Shared Memory. Достаточно знать, что это моно будет сделать потом. Также тут https://www.linux.org.ru/forum/developm ... id=8476665 пишут, что ресурсы разделяемой памяти могут быть малодоступны. Ну ладно, это всё потом.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Дневник проекта ЯОС-КуМир

Сообщение БудДен » 27.07.21 23:40

За сегодня:

- разобрался, как делать обвязки - их будем писать на ШАЯ, плюс понадобится общая часть обвязки на C++
- Реализовал в ЯОС тяп-ляп сервер для вызова процедур, вот он:

https://gitlab.com/budden/ja-o-s/-/comm ... 298c430744

- начал делать нового встроенного исполнителя, на базе которого будут писаться код обвязок на стороне ШАЯ - сгенерировал заготовку по инструкции. Остановился на том, что пример клиента для того сервера почему-то лицензирован под BSD.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Дневник проекта ЯОС-КуМир

Сообщение БудДен » 29.07.21 00:44

Вроде уже почти-почти, но не удаётся наладить общение (решил взять сокеты - казалось, так будет проще). Сокет открывается, данные отправляются, ответ готовится и должно дойти сообщение, что пришли данные, но сообщения нет. В консольном есть, а в КуМире - нет. Дошёл до вот этого:

https://stackoverflow.com/questions/474 ... ent-thread

Это я уже не понимаю. Не хочется лезть в дебри ентого Qt, и главное, что времени осталось 0. Неужели так и не будет демки на тему "вызов ЯОС из КуМира"? А казалось, она уже вот-вот задышит...

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Дневник проекта ЯОС-КуМир

Сообщение БудДен » 30.07.21 01:31

Урвав ещё времени, кое-как сделал подключение из КуМира в ЯОС, но до демки это недотягивает, завтра рано вставать. Осталось надеяться только на выходные...

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Дневник проекта ЯОС-КуМир

Сообщение БудДен » 01.08.21 01:42

Да блин, жесть эта культя. Но в конце концов, прямо скажем, через задницу, как-то удалось заставить частично заработать. 2 дня читал СтекОверфлоу, но всё равно так и не понял, как же нужно работать с тредами, циклами событий и сокетами вместе. Вроде и примеры есть, а всё равно - когда пытаешься получить то, что надо, оно по всячески не работает.

Итог: вот такой код сообщает об успешном подключении, далее печатает 24, а потом уже ничего хорошего не печатает:

Код: Выделить всё

использовать ЯОС

алг
нач
 подключиться к серверу яос
 вывод "подключение успешно"
 вывод вызвать функцию прибавления единицы(23),нс
 вывод вызвать функцию прибавления единицы(45),нс
кон
Функция прибавления единицы реализована в ЯОС.

https://github.com/budden/kumir2/tree/2 ... Клиент-ЯОС

В общем, нужен человек со знанием Qt, Питона, готовый также разбираться в Активном Обероне, чтобы доделать всё это. Времени сделать это за пределы демонстрации запуска тетриса у меня не будет, а делать там много чего можно/нужно.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Дневник проекта ЯОС-КуМир

Сообщение БудДен » 02.08.21 00:45

Прототип вроде заработал, дальше уже дело техники, но трудоёмкое. Начал кумиризацию ключевых слов ЯОС.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Дневник проекта ЯОС-КуМир

Сообщение БудДен » 04.08.21 00:11

Догадался, что ПроверщикПереводовЭлементовКода.ярм можно использовать для защиты от конфликтов имён с ключевыми словами КуМира, а также и компилятор можно.

Также поговорил с фрилансерами. Топовые фрилансеры достаточно жадные, впрочем, я тоже оказался жадным. Будем приходить к золотой середине.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Дневник проекта ЯОС-КуМир

Сообщение БудДен » 06.08.21 23:00

Клюнул фрилансер, пока внедряет Яроклаву в мой форк КуМир, потом попробуем заманить на проект ЯОС-КуМир

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Дневник проекта ЯОС-КуМир

Сообщение БудДен » 15.08.21 12:07

Выложил КуМир с Яроклавой, см. https://www.youtube.com/watch?v=4r5yntWiLj8&t=16s

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Дневник проекта ЯОС-КуМир

Сообщение БудДен » 16.08.21 00:44

Набросал ТЗ на весь проект интеграции

https://www.fl.ru/away/?href=https%3A%2 ... мир-яос.md

Многовато чего-то получилось. Начал изобретать формат передачи данных и понял, что будем передавать с помощью
s-выражений (а точнее, б-выражений, которые я скромно назвал в честь себя и которые слегка отличаются от s-выражений - пока
что они существенно проще, но кое-что ещё надо в них дорастить, наверное).

Ответить