マルチプログラミング言語プロジェクトのベストプラクティス

StackOverflow https://stackoverflow.com/questions/313756

  •  10-07-2019
  •  | 
  •  

質問

これを行った経験のある人はいますか?私は現在、C ++でJavaデコンパイラに取り組んでいますが、内部ツリーの実際の変換を行うために、より高いレベルの言語が必要です。言語間でデータをマーシャリングするオーバーヘッドが、表現力と言語のメリットに見合ったもので、私が達成しようとしていること(Haskellなど)をより明確に表現できるかどうか、興味があります。これは実際に「現実の世界」で行われますか、それとも通常プロジェクトの最初に言語を選択してそれを使いますか?試した人から何かアドバイスはありますか?

役に立ちましたか?

解決

私は、各課題に対して常に適切なプログラミング言語を選択することを強く支持しています。そうでなければトリッキーなタスクを簡単に処理する別の言語がある場合、私はそれに行くと言います。

それは現実の世界で起こりますか?はい。現在、PHPとObjective-Cコードの両方で構成されるプロジェクトに取り組んでいます。

コツは、あなたが指摘したように、2つの言語間のコミュニケーションです。可能な場合は、各言語が独自のドメインに固執し、2つのセクションができるだけ簡単な方法で通信できるようにします。私の場合、それはhttp経由で送信されたXMLドキュメントでした。あなたの場合、何らかの形式のテキストファイルが答えかもしれません。

他のヒント

マーシャリングコストは、使用している言語とアーキテクチャによって異なります。たとえば、CLRまたはJVMを使用している場合は、低コストの相互運用ソリューションを利用できますが、おそらく管理されていないC ++で作業していることはわかっています。

別の方法は、ドメイン固有の埋め込み言語です。ツリー変換は、多くの場合、パターンマッチングと比較的少数の関数の適用によって表現できます。単純なツリーパターンマッチャーの作成を検討できます。 Lisp s-exprsのように見えるが、プレースホルダーを使用して変数をキャプチャするもの-一致したサブツリーを変換する関数である関連アクションを使用する

John Ousterhout Tcl / Tk は多言語プログラミングの強力な擁護者であり、それについて非常に広範囲に書いています。これを行うには、使用する言語間のクリーンなインターフェイスメカニズムが必要です。これにはかなりの数のメカニズムがあります。これを行うためのさまざまなメカニズムの例:

  • SWIG(簡易ラッパーおよび Interface Generator はc またはc ++(または他のいくつかの言語) ヘッダーファイルと 高水準言語のインターフェース 許可するperlやpythonなど APIにアクセスします。がある これを使用する他のシステム アプローチ。

  • Javaは、 JNI などをサポートしています。 Pythonなどの他のシステム ctypes 、VisualWorks DLL / C connect はネイティブのメカニズムです それにより、明示的に 下位への呼び出しを構築します レベルサブシステム。

  • Tcl / Tkは、次のように明示的に設計されました。 埋め込み、ネイティブAPI Cライブラリがフックを追加する 言語。の構成 これはargv []構造に似ています C、そしてそれを作るように設計された インターフェースが比較的簡単 コマンドラインベースのCプログラム Tcl。これは上記に似ています 例、しかし反対側から来る 方向。多くのスクリプト言語 Python、Lua、Tclなどのサポート このタイプのメカニズム。

  • 次のような明示的な接着メカニズム Pyrex は、 ラッパージェネレーター 定義するための独自の言語 インタフェース。 Pyrexは実際には 完全なプログラミング言語。 COM などのミドルウェアまたは CORBA は、 構築されるインターフェース定義 アプリケーションの外部で インターフェース定義言語 および言語バインディング 使用する言語 共通インターフェース機構。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top