|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Vickenty Fesunov 2:5020/3996.3 06 Aug 2002 13:06:44 To : All Subject : ЛОМ -------------------------------------------------------------------------------- Итак субж. Сие есть простенький механизм, который позволяет почти легко и непринужденно устранять compile-time компоновку программ. Посылки: простота интерфейса, изящность, работа с Си программами, малый размер. Итоги: репозиторий интерфейсов, репозиторий реализаций. Интерфейс представляет собой некую структуру, в которой находятся указатели на функции, доступные для вызова. Репозиторий интерфейсов представляет собой простой каталог с заголовочными файлами, содержащими описания интерфейсов. Реализация представляет собой динамический объект, доступный для dlopen, на который есть симлинк в репозитории реализаций. В объекте должна быть экспортируемая функция `creator' создающая объект по имени. Репозиторий реализаций, представляет собой простой каталог, носящий имя реализуемого интерфейса, и содержащий симлинки на динамические объекты содержащие реализации. Интерфейс: инициализация (lom_init), создание/разрушение объекта (lom_create_object, lom_delete_object), получение списка всех реализаций (lom_get_impls). Теперь менее сухо и с примерами: Есть следующее: `/var/lom/ifaces/lom/monty.h' - интерфейс `lom/monty'; `/var/lom/objects/lom/monty/pyton' - симлинк на pyton.so -- реализацию `lom/monty'. Программа выглядит так: #include <lom.h> #include LOM_IFACE "lom/monty.h" int main(void) { lom_object_t *obj; struct lom_monty *iface; lom_init(); obj = lom_create_object("lom/monty/pyton"); iface = (struct lom_monty *) obj->iface; iface->grail(); lom_delete_object(obj); lom_shut(); } Обсуждение открыто по любому вопросу. Вплоть до имен функций. В частности интересно узнать насколько это вписывается в com и corba (наксолько сложным будет написание затычки, которая позволит использовать com/corba для доступа к лом реализациям (буде кому приспичит)). Заметки: 1. зачем отделил интерфейс от реализации: чтобы можно было писать плагины не задумываясь. 2. бинарной совместимости с чем либо не предполагалось. 3. Код, реализующий это дело есть, и работает (в виде приведенного выше примера). 4. Предполагается написать прогу lomrep -- менеджер репозитория. Иначе не совсем понятно, как таким управлять. Best regards, Vickenty. --- Don't you ever get fucked in the sky! When you're high... * Origin: Ahere (2:5020/3996.3) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/40143d4fca5c.html, оценка из 5, голосов 10
|