W zależności od znaczenia terminu "oficjalnie usankcjonowane". plugins
(wcześniej znany jako hs-plugins
) został zaprojektowany jako kompleksowe rozwiązanie z funkcjami generowania kodu i dynamicznego ładowania. Nie ma na celu minimalności.
Mniej złożony pakiet jest dostępny pod nazwą direct-plugins
, który koncentruje się na dynamicznym ładowaniu wtyczek. Pakiet ten odczytuje pliki interfejsu Haskell (.hi
) w celu uzyskania rzeczywistych typów symboli, tak aby zapewnić bezpieczeństwo typu, ale dostępny jest również wariant niebezpieczny. Niestety direct-plugins
jest bitrotten i nie działa (a.t.m.) z GHC v6.6.
Na najniższym końcu widma znajduje się pakiet unix
, który zapewnia podobny mechanizm do pobierania symboli eksportowanych z bibliotek współdzielonych. Zapewniona jest także warstwa wygody, aby automatycznie zamykać otwarte biblioteki po zakończeniu przetwarzania z nimi. Jednak symbole są otrzymywane jako FFI Ptr
s i nie są wciągane przez Haskella.
przeszukując Internet odkryłem opuszczonej pakiet, który wydaje się działać na kompromis:
- ładowanie symboli z Haskell konwencji wywołania jest
- zależności i pakiet/moduł hierarchii może być uznana
- środowisko zależności jest zarządzane w sposób bezpieczny dla wątków.
Oryginalny pakiet jest autorstwa Hampus Ram. Przygotowałem go tylko na najnowszą wersję GHC i wykonałem kilka bardzo płytkich testów. Oto repozytorium:
https://github.com/ggreif/dynamic-loader
Jedyną brakującą część jest bezpieczny dostęp wpisać symbol (o możliwie konfigurowalnego mechanizmu). Zapraszamy i komentarze i poprawki.
możliwy duplikat programu [Small Haskell skompilowany z GHC do ogromnego pliku binarnego] (http://stackoverflow.com/questions/6115459/small-haskell-program-compiled-with-ghc-into-uge-binary) –
@ DanielWagner - tworzenie aplikacji '-dynamicznej' wciąż odnosiłoby się do ogromnych bibliotek współdzielonych, więc problem z wdrożeniem nie zmieniłby się. – heisenbug