Доброго времени суток.
Стоит задача запрограммировать модульную систему с ядром на си, которую можно было бы расширять с помощью других языков.
Расширения играют роль «органа» общения с внешними системами: одно принимает данные, другое обрабатывает, третье отдает пользователю, итд, короче, что-то вроде VM, но без такого лютого оверхеда и сложностей.
Для расширений уже придуман C API и, соответственно будут биндинги в другие языки для упрощения написания конфигурации
Собственно, я вижу два варианта устройства расширений:
1. Динамические библиотеки - подгрузка через dlopen, короче канон расширений плагинами.
2. Что-то вроде подхода CGI - единый интерфейс обмена через переменные окружения, stdin/stdout
Лично мне больше нравится первый вариант из-за отсутствия оверхеда при каждом вызове - один раз подгрузил плагины при старте и вызывай код из них сколько хочешь. Чем меньше оверхеда и затрат - тем лучше. (пишу системный демон с довольно высокой частотой пробуждения) Но, увы, не любой язык можно скомпилировать в динамическую библиотеку, а потенциальные пользователи, читай, одмены, вряд ли оценят написание конфигов на си.
Второй дает большую в этом плане гибкость - хоть на баше пиши или асме, но накладывает стоимость вызова шелла.
Реализовывать оба интерфейса возможности нет.
Вопрос номер один: можно ли как-то таки скомпоновать хотя бы питоньий код в динамическую библиотеку?
Вопрос номер два: можно ли при использовании второго варианта как-то уменьшить расходы на запуск сторонних исполняемых файлов?