Depende del significado de 'oficialmente sancionado'. plugins
(anteriormente conocido como hs-plugins
) fue diseñado para ser una solución integral, con funciones de generación de código y carga dinámica. No apunta a la minimalidad.
Un paquete menos complejo está disponible con el nombre direct-plugins
, que se centra en la carga dinámica de complementos. Este paquete lee los archivos de la interfaz Haskell (.hi
) para obtener los tipos reales de símbolos, de modo que la seguridad de tipo es posible, pero también se proporciona una variante insegura. Desafortunadamente direct-plugins
es bitrotten y no funciona (a.t.m.) con GHC v7.6.
En el extremo inferior del espectro está el paquete unix
que proporciona un mecanismo similar al dlopen
/dlsym
para obtener símbolos que se exportan desde bibliotecas compartidas. También se proporciona una capa de conveniencia para cerrar automáticamente las bibliotecas abiertas después de que el procesamiento haya finalizado. Sin embargo, los símbolos se obtienen como FFI Ptr
sy no son aptos para Haskell.
buscando en Internet he descubierto un paquete abandonado que parece estar operando en el punto medio:
- carga de símbolos con Haskell convención de llamada se proporciona
- dependencias y jerarquía de paquetes/módulo puede ser declarado
- entorno de dependencia se gestiona de forma segura para subprocesos.
El paquete original es creado por Hampus Ram. Solo lo preparé para el último lanzamiento de GHC e hice algunas pruebas muy superficiales. Aquí está el repositorio:
https://github.com/ggreif/dynamic-loader
La única parte que falta es de tipo seguro el acceso de símbolos (por un mecanismo posiblemente configurable). Comentarios y parches de bienvenida.
posible duplicado de [Pequeño programa Haskell compilado con GHC en binario enorme] (http://stackoverflow.com/questions/6115459/small-haskell-compiled-compiled-with-ghc-into-huge-binary) –
@ DanielWagner: la creación de una aplicación '-dynamic' aún habría hecho referencia a las enormes bibliotecas compartidas, por lo que el problema de implementación no habría cambiado. – heisenbug