OberonCore
https://forum.oberoncore.ru/

Запуск команд модулей без необходимости в GUI
https://forum.oberoncore.ru/viewtopic.php?f=47&t=2884
Страница 1 из 1

Автор:  Роман М. [ Пятница, 01 Октябрь, 2010 18:42 ]
Заголовок сообщения:  Запуск команд модулей без необходимости в GUI

Написал прототип компонента для вызова процедур посредством динамической загрузки модулей - в некотором роде аналог привычных многим исполняемых файлов C/C++, у которых есть процедура main с параметрами командной строки argc, argv.

Это своего рода аналог майкрософтовского RunDll32, который умеет вызывать процедуры из библиотек. Для вызова процедур не требуется наличие BlackBox, нужен лишь загрузчик этих модулей. А далее за работу отвечает загруженный компонент, как типичная исполняемая программа.

В исполняемом модуле (например, TestExeModule) мы объявляем для экспорта процедуру main, в которую извне будут передаваться аргументы для программы.

В состав загрузчика входит компонент, скомпонованный в библиотеку bbldr[.dll/.so]. Для его работы необходима подсистема System (подсистема Host уже скомпонована внутри библиотеки) и подсистемы для вызова исполняемого модуля (допустим, TestExeModule), то есть файлы .ocf и .osf.

Код:
DEFINITION LibsModLoader ["bbldr"];

   IMPORT Dynamics;

   TYPE
      TLoaderError = POINTER TO RECORD
         n-: INTEGER;
         msg-, par0-, par1-: Dynamics.String
      END;

   PROCEDURE GetLoaderError (OUT e: TLoaderError);
   PROCEDURE InitLoaderError (p: TLoaderError);
   PROCEDURE Run (_module, _proc: Dynamics.String; argc: INTEGER; argv: Dynamics.ArgList);

END LibsModLoader.


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

В командной строке запуск производится командой:
Код:
loader_program <Module_Name> <Procedure_Name> [arguments]

На данный момент вспомогательная программа написана на Free Pascal (FPC). Планирую написать её на Обероне-2 посредством какого-нибудь из межплатформных компиляторов.
Здесь нужны ваши советы насчёт выбора. Требование: создание исполняемых файлов для платформы x86, OS Windows, Linux. Взять ли XDS или есть варианты лучше?
Текущим ограничением в запуске модулей является поддержка одной платформы x86, ОС Windows (NT/2000/XP) с форматами EXE/DLL и Linux с форматом библиотеки so (открытой поддержки исполняемых ELF пока нет). Считаю, что интеграция КП-модулей в родные ОС важна. Иначе общего признания не добиться.

Я вижу данный инстумент как частичную замену среды BlackBox для динамического запуска модулей.
В итоге хотелось бы иметь компактный и расширяемый framework, подобный .NET, на основе Компонентного Паскаля с набором подсистем универсального назначения, включая работу с БД, сетью и пользовательским интерфейсом (GUI/TUI). Также хотелось бы добиться распространения на разных аппаратных платформах, и, возможно, с упором на встраиваемые системы...

Каковы, на ваш взгляд, перспективы такого средства в Linux? В Windows? Вообще?

Автор:  Иван Денисов [ Пятница, 05 Ноябрь, 2010 20:49 ]
Заголовок сообщения:  Re: libBBox и расширяемый framework

Рома, мне нравиться твоя идея. Начать с динамической загрузки модулей а там и до каркаса добраться понемногу можно.

Для линукса нужно будет сделать репозиторий с пакетами deb на сайте oberoncore.ru и просто скачивать их менеджером пакетов, как это сделано для питона и php. Там и контроль версий хороший для пакетов deb сделан уже!!!

Я пробовал использовать Оксфордский компилятор для Linux, он работает точно и в нем есть поддержка DLL и SO, вроде, тоже была. Получаются бинарники .ELF, то есть полноценные Linux приложения. Так что можешь на нем попробовать собрать компилятор.

Автор:  Info21 [ Суббота, 06 Ноябрь, 2010 11:40 ]
Заголовок сообщения:  Re: libBBox и расширяемый framework

Не понял, почему нельзя просто так модули грузить, безо всякого main.
ТРАП показывает $$ про раздел инициализации или что-то в этом роде.
То есть некое внутреннее имя как бы уже есть.
Вы хотите, в сущности, его заменить на main?
Мне не нравится слово main, какие-то ненужные ассоциации.
------
Что значит, без Блэкбокса. Без графики? Так это и так можно.

(Четто не понимаю. Наверное, мозг расслабился на праздниках.)

Автор:  Роман М. [ Воскресенье, 07 Ноябрь, 2010 13:41 ]
Заголовок сообщения:  Re: libBBox и расширяемый framework

divan, спасибо за ссылку. Но речь не о сборке компилятора, а о сборке программы для выполнения команд модулей (так будет точнее по понятиям Оберона).
Исполняемость нужна для того, чтобы эта программа могла запускаться в родной ОС (так же, как запускается blackbox.exe) и выполнять команды из указанных модулей (так же, как запускает их blackbox.exe). Но не подгружая для этого OS-native GUI.
Loader (frontend) пишу на XDS, а библиотека libBBox (backend) уже скомпонована с помощью BlackBox.

Вложение:
libBBox.png
libBBox.png [ 38.47 КБ | Просмотров: 10220 ]


Info21 писал(а):
Не понял, почему нельзя просто так модули грузить, безо всякого main.
ТРАП показывает $$ про раздел инициализации или что-то в этом роде.
То есть некое внутреннее имя как бы уже есть.
Вы хотите, в сущности, его заменить на main?
Мне не нравится слово main, какие-то ненужные ассоциации.
------
Что значит, без Блэкбокса. Без графики? Так это и так можно.

(Четто не понимаю. Наверное, мозг расслабился на праздниках.)

Да, без графики. См. выше диаграмму вызова.
Слово main можно поменять на Run или Do.

P.S.
Я и не сразу заметил то, что проявили интерес к моей теме.

Автор:  Info21 [ Воскресенье, 07 Ноябрь, 2010 14:41 ]
Заголовок сообщения:  Re: libBBox и расширяемый framework

Признаюсь, запутался.

Автор:  Роман М. [ Среда, 10 Ноябрь, 2010 18:03 ]
Заголовок сообщения:  Re: libBBox и расширяемый framework

Разместил в SVN код Fwk (Lite BlackBox Framework) проекта CP-Dev (который Component Pascal compiler, консольный). Налаживаю передачу параметров argc, argv, а с загрузкой без них уже всё завершено. На Linux/Win32.
В дальнейшем Fwk послужит для обеих целей: для динамического вызова команд с консоли и для использования каркаса консольным компилятором на поддерживаемых платформах.

Приветствуется помощь в доработке Fwk:
  1. Требуется перенести Hosts на Linux. Для этого нужно написать заглушки в реализации (implementation) абстрактных модулей каркаса.
  2. Требуется помощь в доработке бэк-энда (CDev) & фронт-энда (CPcc). Пока прогресс остановлен по причине зависимости от поддерживаемых платформ каркаса (то есть для Линукса только начато).
  3. Тестировать консольный компилятор и оставлять свои отзывы о нём, чтобы улучшить его работу.

Кто хочет помочь - обращайтесь ко мне (через страничку Support на CP-Dev). Так дело пойдёт быстрее.

Автор:  Роман М. [ Понедельник, 29 Ноябрь, 2010 13:51 ]
Заголовок сообщения:  Re: libBBox и расширяемый framework

Наконец-то наладил передачу параметров через вызов команд. Уже работает в Win32!

С помощью вызова в консоли "testldr.exe TestExeModule Do 123" запустился модуль TestExeModule с заданным параметром "123".

Автор:  Kubanych [ Суббота, 03 Март, 2012 08:47 ]
Заголовок сообщения:  Re: libBBox и расширяемый framework

Уважаемый Роман.

В каком состоянии сейчас этот Ваш проект?
Есть ли возможность в Линуксе консольно запускать не включенные в .so
модули?

Автор:  Роман М. [ Суббота, 03 Март, 2012 19:32 ]
Заголовок сообщения:  Re: libBBox и расширяемый framework

Kubanych писал(а):
Уважаемый Роман.

В каком состоянии сейчас этот Ваш проект?
Есть ли возможность в Линуксе консольно запускать не включенные в .so
модули?
Проектом я его не назову. Так, маленький инструмент - консольный пускач команд, аналогичный вызову команд мышкой из среды BlackBox по значку !.

Если в среде ББ запускаем так:
Код:
!MyModule.Run

то с помощью консольного пускача
Код:
testldr MyModule Run <параметры>


Разработка находится в замороженном состоянии со времени предыдущего сообщения. С тех пор прошло уже более года. Насколько я помню, достиг стабильного запуска команд пускача с передачей параметров через командную строку в ОС Windows. Что вышло с Linux не могу вспомнить. Была, наверно, какая-то заморочка и зависимость от чего-то другого.
Чтобы сказать поточнее, нужно заново покопаться. Так что постараюсь дать ответ в ближайшие дни.

По крайней мере, этот экспериментальный интсрумент точно не подойдёт на этом этапе для запуска в режиме полной нагрузки - его ещё нужно отладить и "отшлифовать". Тем более, ещё потребуется наладить корректную инициализацию модуля Kernel, без которой сборщик мусора рушится. Хотя, это уже технический нюанс.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/