Andreas Kalender Institut für Informatik FU Berlin 11.10.2006

Werbung
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
Herunterladen