Interaktion zwischen Corba Komponenten und Haskell Andreas Kalender Institut für Informatik FU Berlin 11.10.2006 Interaktion zwischen CORBA und Haskell • Problem: • Haskell als CORBA Komponenten zugänglich machen • Lösungsvorschläge: • Verwendung von HS – Corba • Eigene Implementierung • Externe C Aufrufe • Verwenden von H/Direct 2 HS - Corba • HS – Corba • Aufbauend auf einer Diplomarbeit von Zoltan Varga • (nahezu) keine Dokumentation • Feste Bindung an Mico als ORB • Kompatibilitätsprobleme • Entstand mit Haskell 5.x (aktuell 6.4) • Keine Weiterentwicklung (seit 2001) • Offene Probleme • Kein Speichermanagment (kein Release von Referenzen) • Falsche Mappings • Perfomanceprobleme • Keine direkte CORBA Unterstützung • Eigentliche CORBA Aufrufe durch einen C Wrapper 3 Eigene Implementierung • Eigene Implementierung bringt zu viele Probleme mit sich • Zeitaufwand (eigene Arbeit) • Komplexität • Fehleranfälligkeit 4 Externe C Aufrufe in Haskell • Verwendung des Foreign Function Interface (FFI) • Erlaubt den Aufruf von C Funktionen • Einschränkung auf C konforme Datentypen • Eher für den unidirektionalen Aufruf geeignet • Aufruf von Fremden Funktionen aus Haskell heraus • Verwendung von Greencard • Ein Foreign Function Processor für Haskell • Erleichtert die Benutzung des FFI, löst aber kaum die Probleme • Viel inline C Code nötig • Explizites marshalling und unmarshalling 5 H/Direct • Verwenden von H/Direct • Ein IDL Compiler • Unterstützt die OMG CORBA IDL*, DCE IDL und eine proprietäre IDL • Bidirektionaler Zugriff, aber nur mittels • DCE Komponenten (COM) • C Aufrufe * mit Einschränkungen 6 H/Direct – DCE Komponenten • Vorteile: • Möglichkeit über COM auf diese Komponenten zuzugreifen • Nachteile: • Nur DCE IDL zum erzeugen der DCE Komponenten erlaubt • DCE nicht direkt mit CORBA kompatibel • Geht aus der Idee von imperativem RPC hervor • Mögliche Zusammenarbeit auf • Protokollebene • Quellcode Ebene 7 H/Direct – DCE Komponenten • Zusammenarbeit auf Protokoll Ebene • Mittels Environment Specific Inter-ORB Protocol (ESIOP) möglich • Einschränkung auf einen ORB, der diese Anbindung bietet • Nutzt nicht den ORB zur Kommunikation • Umwandlung zwischen CORBA Common Data Reprensentation (CDR) und DCE Network Data Representation (NDR) nötig • Für AID völlig ungeeignet 8 H/Direct – DCE Komponenten • Zusammenarbeit auf Quellcode Ebene • Erfordert ein entsprechendes Tool • Unterschiedliche Modelle und Datentypen • Inkompatibilitäten an einigen Stellen • Doppelter Wrapper / Overhead • CORBA-Wrapper um eine DCE Komponente • DCE-Wrapper um Haskell Code • Keine voll automatische Umwandlung möglich • Mit Einschränkungen kann die Umwandlung erleichtert werden 9 H/Direct – C Aufrufe • Kommunikation mit C Bibliotheken • Nutzung der OMG CORBA IDL möglich • Geringer Overhead • ORB muss C unterstützen • Automatische Generierung von C Wrappern muss erstellt werden 10 Fazit • Es gibt keine direkte Lösung des Problems • Alle Lösungen beinhalten einen Adapter • Bester Ansatz im Verwenden von C • Die meisten Möglichkeiten / Alternativen • Geringe Bindung an eine Plattform • Teilweise werden nur bestimmte Compiler (z.B. GHC) unterstützt • C <-> CORBA mapping nötig • C <-> CORBA mapping muss automatisiert werden 11 Quellen • HaskellDirect user's manual Sigbjorn Finne, 1999 http://www.haskell.org/hdirect/user.html • Calling Hell From Heaven And Heaven From Hell Sigbjorn Finne, Daan Leijen, Erik Meijer and Simon, Peyton Jones, 1999 http://www.haskell.org/hdirect/comserve.ps.gz • H/Direct: A Binary Foreign Language Interface for Haskell Sigbjorn Finne, Daan Leijen, Erik Meijer and Simon Peyton Jones, 1998 http://www.haskell.org/hdirect/hdirect.ps.gz • H/Direct: supporting component programming in Haskell Sigbjorn Finne, 1998 http://www.haskell.org/hdirect/design.html • A foreign function Interface for Haskell Sigbjorn Finne, 2000 http://www.haskell.org/hdirect/ffi.html 12 Quellen • The Glorious Glasgow Haskell Compilation System User's Guide, Version 6.4.2 The GHC Team, 2002 http://www.haskell.org/ghc/docs/latest/html/users_guide/index.html • The Haskell 98 Foreign Function Interface 1.0 – An Addendum to the Haskell 98 Report Manuel Chakravarty, Sigbjorn Finne, Fergus Henderson, Marcin Kowalczyk, Daan Leijen, Simon Marlow, Erik Meijer, Sven Panne, Simon Peyton Jones, Alastair Reid, Malcolm Wallace, Michael Weber, 2003 http://www.cse.unsw.edu.au/~chak/haskell/ffi/ 13 Vielen Dank! 14