Ответ 1
Зависит от значения "официально санкционированного". plugins
(ранее известный как hs-plugins
) был разработан как всеобъемлющее решение с функциями генерации кода и динамической загрузки. Он не нацелен на минимальность.
Менее сложный пакет доступен под названием direct-plugins
, который фокусируется на динамической загрузке плагинов. Этот пакет считывает файлы интерфейса Haskell (.hi
) для получения фактических типов символов, поэтому возможна безопасность типа, но также предоставляется небезопасный вариант. К сожалению, direct-plugins
является битрейтом и не работает (a.t.m.) с GHC v7.6.
В самом нижнем конце спектра есть пакет unix
, который предоставляет механизм dlopen
/dlsym
, чтобы получить символы, которые экспортируются из разделяемых библиотек. Также предусмотрен удобный слой для автоматического закрытия открытых библиотек после завершения обработки с ними. Однако символы получаются как FFI Ptr
и не являются Haskell-вызываемыми.
Просматривая интернет, я обнаружил заброшенный пакет, который, кажется, работает на среднем уровне:
- предоставляется загрузка символов с помощью соглашения о вызовах Haskell
- зависимости и иерархия пакетов/модулей могут быть объявлены
- среда зависимостей управляется поточно-безопасным способом.
Оригинальный пакет является автором Hampus Ram. Я только подготовил его для последней выпущенной GHC и провел очень мелкие испытания. Вот репозиторий:
Единственная недостающая часть - это безопасный доступ к символам (с помощью возможно настраиваемого механизма). Комментарии и исправления приветствуются.