Frage

Hat jemand keine Erfahrung mit diesem? Ich arbeite an einem Java Decompiler jetzt in C ++, aber ein höheren Sprache wie die tatsächlichen Transformationen der internen Bäume zu tun. Ich bin gespannt, ob der Aufwand von Daten zwischen Sprachen Marshalling des Nutzen einer ausdruck wert ist und die Sprache besser artikulieren, was ich (wie Haskell) zu erreichen bin versucht. Ist das tatsächlich in der „realen Welt“ gemacht, oder ist es in der Regel eine Sprache am Anfang eines Projektes wählen, und bleiben Sie dabei? Irgendwelche Tipps von denen, die es versucht haben?

War es hilfreich?

Lösung

Ich bin ein großer Verfechter der immer die richtige Programmiersprache für jede Herausforderung der Wahl. Wenn es eine andere Sprache, die leicht einig sonst schwierige Aufgabe behandelt, würde ich es sagen gehen.

Ist es in der realen Welt passieren? Ja. Ich bin derzeit an einem Projekt arbeiten, das aus sowohl PHP und Objective-C-Code gemacht wird.

Der Trick ist, wie Sie weist darauf hin, die Kommunikation zwischen den beiden Sprachen. Wenn möglich, lassen Sie jede Sprache Stick auf seine eigene Domain, und haben die beiden Abschnitte auf einfachste Weise möglich zu kommunizieren. In meinem Fall war es XML-Dokumente über HTTP gesendet. In Ihrem Fall könnte eine Art formatierte Textdatei die Antwort sein.

Andere Tipps

Die Rangierung Kosten hängen von den Sprachen und Architektur, die Sie gerade arbeiten. Zum Beispiel, wenn Sie auf der CLR oder JVM sind, gibt es Low-Cost-Interop-Lösungen zur Verfügung - obwohl ich weiß, Sie wahrscheinlich nicht verwaltete C ++ arbeiten

.

Eine weitere Möglichkeit ist eine Embedded-domänenspezifische Sprache. Baum-Transformationen sind oft ausdrückbar über Mustervergleich und Anwendung einer relativ kleinen Anzahl von Funktionen. Man könnte erwägen, einen einfachen Baum-Muster-Matcher Schreiben - z.B. etwas, das wie Lisp s-exprs aussieht, sondern nutzt Platzhalter Variablen zu erfassen -. mit den dazugehörigen Aktionen, die Funktionen sind, die die angepassten Unterbaum verwandeln

John Ousterhouts , der Erfinder des Tcl / Tk war ein stong Verfechter von Multi-Sprachenprogrammierung und schrieb recht ausführlich darüber. Um dies zu tun, müssen Sie einen sauberen Schnittstelle Mechanismus zwischen den Sprachen, die Sie dafür verwenden. Es gibt durchaus ein paar Mechanismen dafür. Beispiele für unterschiedliche Mechanismen hierfür sind:

  • SWIG (Simplified Wrapper und Interface Generator kann ein c nehmen oder c ++ (oder mehrere andere Sprachen) Header-Datei und erzeugt eine Schnittstelle für eine Hochsprache wie Perl oder Python, die ermöglicht, Sie die API zuzugreifen. Es gibt andere Systeme, die diese verwenden Ansatz.

  • Java unterstützt JNI und verschiedene andere Systeme wie Python ctypes , Visual DLL / C verbinden sind native Mechanismen , mit denen Sie explizit Konstrukt den Anruf an den unteren Level-Subsystem.

  • Tcl / Tk wurde explizit entwickelt, um embeded und hat einen native API für eine C-Bibliothek hinzuzufügen Haken in die Sprache. Die Konstrukte für Diese ähneln argv [] Strukturen in C und wurden entwickelt, um es zu machen relativ einfach eine Schnittstelle Befehlszeilen-basiertes Programm in C Tcl. Dies ist ähnlich der oben Beispiel, jedoch aus Richtung der gegenüberliegenden Richtung. Viele Skriptsprachen wie Python, Lua und Tcl Unterstützung diese Art von Mechanismus.

  • Explicit Leim Mechanismen wie Pyrex , die zu einer ähnlich Wrapper-Generator, sondern haben ihre eigene Sprache für die Definition der Schnittstelle. Pyrex ist eigentlich ein vollständige Programmiersprache. Middleware wie COM oder CORBA einem allgemeinen erlauben Schnittstellendefinition zu bauenden von außen auf die Anwendung in einem Interface Definition Language und Sprachbindungen für die Sprachen betreffende verwenden Common-Interface-Mechanismus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top