Hängt von der Bedeutung von "offiziell sanktioniert" ab. plugins
(früher bekannt als hs-plugins
) wurde entwickelt, um eine allumfassende Lösung mit Codegenerierung und dynamischen Ladefunktionen zu sein. Es zielt nicht auf Minimalität ab.
Ein weniger komplexes Paket ist unter dem Namen direct-plugins
verfügbar, das sich auf das dynamische Laden von Plugins konzentriert. Dieses Paket liest Haskell-Schnittstellen-Dateien (.hi
), um die tatsächlichen Symboltypen zu erhalten, so dass Typensicherheit möglich ist, aber eine unsichere Variante wird ebenfalls bereitgestellt. Leider ist direct-plugins
bitrotten und funktioniert nicht (a.t.m.) mit GHC v7.6.
Am untersten Ende des Spektrums gibt es die unix
Paket, das eine dlopen
/dlsym
-ähnlichen Mechanismus zu bekommen halten Symbole bereitstellt, die von der gemeinsam benutzten Bibliotheken exportiert werden. Eine Convenience-Schicht wird ebenfalls bereitgestellt, um geöffnete Bibliotheken automatisch zu schließen, nachdem die Verarbeitung mit ihnen beendet wurde. Die Symbole werden jedoch als FFI Ptr
s erhalten und sind nicht Haskell-aufrufbar.
Durch die Suche im Internet entdeckte ich eine verlassene-Paket, das im Mittelweg zu funktionieren scheint:
- Laden von Symbolen mit Haskell-Aufrufkonvention vorgesehen ist
- Abhängigkeiten und Paket/Modulhierarchie kann
deklariert werden
- Abhängigkeitsumgebung wird auf thread-sichere Weise verwaltet.
Das Originalpaket wurde von Hampus Ram verfasst. Ich habe es nur für den neuesten veröffentlichten GHC vorbereitet und habe einige sehr oberflächliche Tests gemacht. Hier ist das Repository:
https://github.com/ggreif/dynamic-loader
Das einzige fehlende Teil ist typsicher Symbol Zugriff (durch eine möglicherweise konfigurierbaren Mechanismus). Kommentare und Patches willkommen.
mögliches Duplikat von [Kleines Haskell-Programm, kompiliert mit GHC in riesige Binärdatei] (http://stackoverflow.com/questions/6115459/small-haskell-program-compiled-with-ghc-into-huge-binary) –
@ DanielWagner - das Erstellen einer '-dynamischen' Anwendung hätte immer noch auf die großen, gemeinsam genutzten Bibliotheken verwiesen, so dass sich das Bereitstellungsproblem nicht geändert hätte. – heisenbug