異言語間の連携について

様々なプログラミング言語があって、それぞれに得意な処理や、特徴あるライブラリがありますね。
使い慣れた言語で基本的な処理をするけれど、他の言語にしかないライブラリを使うと手間が省ける・・・
ということもあります。ところが連携ってに関する情報ってなかなかないですね。

そこで、異言語間の連携でどういう方法があるのか教えてください。
「片方の言語で作った実行ファイルを他方で実行する」が基本と考えてよいですか?
これを自作する場合には、C++などの知識がいるなどと聞きますが、参考になるURLがあったら教えてください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2008/05/01 18:13:31
  • 終了:2008/05/08 01:34:45

ベストアンサー

id:tera-p No.2

tera-p回答回数92ベストアンサー獲得回数212008/05/02 00:00:14

ポイント100pt

大抵の言語は,動的リンク形式のライブラリ(Windows なら .dll, UNIX なら lib**.so)を利用するためのインタフェースを備えています.これらのライブラリを直接生成できる言語(典型的には C)との連携は,このインタフェース経由で行うのが一般的だと思います.

ただ,通常はこのインタフェースは結構「使うのがめんどくさい」ことが多いです.これを楽にするツールとして SWIG (http://www.swig.org/) が有名です.各種言語から(C/C++ などで書かれた)ライブラリを簡単に使えるようになります.

SWIGがサポートする言語(処理系)は,

Tcl, Python, Perl, Guile, Java, Ruby, Mzscheme, PHP, Ocaml, Pike , C#, Chicken scheme compiler, Allegro CL, Modula-3 , Lua, CLISP, Common Lisp with UFFI/CFFI, R, Octave

など,メジャーどころからマイナーなものまで幅広くカバーしてます.

また,各種スクリプト言語の Java VM 上での実装,たとえば Python に対する Jython (http://www.jython.org/) などを使えば,Python (や他のスクリプト言語)のプログラムから Java の各種ライブラリ(Swing など)を簡単に使えるようになります.

あとは,最近あまり流行りませんが,そのものずばり「異種言語で書かれたモジュール/システムの連携」を目指したフレームワークとしては CORBA (http://ja.wikipedia.org/wiki/Common_Object_Request_Broker_Archit...) があります.適切な ORB(仲介モジュールと思ってください)を使えば,以下の言語で書かれたモジュールを相互に連携可能になります(Wikipedia より抜粋;他にもまだあると思います):

Ada, C, C++, LISP, Smalltalk, Java, COBOL, PL/I, Python, Perl, PHP, Ruby, Visual Basic, Tcl

とてもすばらしいお話に見えますが,IDL(インタフェース定義言語)記述などを別途準備する必要があったり,ORB によってできること/できないことが違ったり,実際に使おうとすると面倒なことも多いです.

連携の目的にもよりますが,趣味の範囲や一般の PC 環境での話でしたら SWIG の利用を,エンタープライズ環境での異種システム連携なんて話でしたら CORBA の利用を,それぞれ最初に検討してみると良いのかな,と思います.

id:yshkw

いきなり全体像が見えたので感動しています。

1.windows(.dll)とunix(lib**.so)

2.ライブラリ直書き(C:勉強用)とツール(SWIG:趣味用)とフレームワーク(CORBA:業務用)

3.VM上にスクリプト言語が実装されている場合は簡単にJAVAと連携できる

思いつきでやっていたときは、全体はshで制御、データはファイルで中継させたりと無駄が多かったので飛躍ができればと思います。

2008/05/02 18:34:51

その他の回答(3件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332008/05/01 18:36:14

ポイント20pt

Windowsの場合、たとえば「VBとVC++の連携」では、VC++でDLLを作って、VBから呼び出すというやり方があります。

私は、ロジックの部分はgccで書いて、WebAPIの部分をPHPにするということをよくやります――Linuxの場合。「片方の言語で作った実行ファイルを他方で実行する」ということですね。


「片方の言語で作った実行ファイル」についても、即実行型でなくても、Javaでも大丈夫です。「ソケット通信によるJava―他言語プログラム連携」のような連携ができます。

id:yshkw

pahooさんお久しぶりです。

・VBとVC++

・CとPHP

・JAVAと他言語

の例がとても参考になりました。

個人的には、ある言語のライブラリを連携して使うように、windowsのGUIアプリケーションで、特定の機能だけを抜き出して使えたりしないかなとよく思います。EXCELで作ってしまったマクロとか。windowsではVBやVC++などで連携するのですね。C,JAVA,C++やperlなどとの連携はできないのでしょうか?


ポイントが少なくなってしまい、あと数回答で締め切ることになりそうですが引き続きよろしくお願いします。

↑情けないことを書いていたら、どなたか100ポイントの寄付をしてくださいました。

匿名さんありがとうございます。ご期待にお答えして5/8か、ポイントなくなるまで募集することにします。

2008/05/02 13:53:28
id:tera-p No.2

tera-p回答回数92ベストアンサー獲得回数212008/05/02 00:00:14ここでベストアンサー

ポイント100pt

大抵の言語は,動的リンク形式のライブラリ(Windows なら .dll, UNIX なら lib**.so)を利用するためのインタフェースを備えています.これらのライブラリを直接生成できる言語(典型的には C)との連携は,このインタフェース経由で行うのが一般的だと思います.

ただ,通常はこのインタフェースは結構「使うのがめんどくさい」ことが多いです.これを楽にするツールとして SWIG (http://www.swig.org/) が有名です.各種言語から(C/C++ などで書かれた)ライブラリを簡単に使えるようになります.

SWIGがサポートする言語(処理系)は,

Tcl, Python, Perl, Guile, Java, Ruby, Mzscheme, PHP, Ocaml, Pike , C#, Chicken scheme compiler, Allegro CL, Modula-3 , Lua, CLISP, Common Lisp with UFFI/CFFI, R, Octave

など,メジャーどころからマイナーなものまで幅広くカバーしてます.

また,各種スクリプト言語の Java VM 上での実装,たとえば Python に対する Jython (http://www.jython.org/) などを使えば,Python (や他のスクリプト言語)のプログラムから Java の各種ライブラリ(Swing など)を簡単に使えるようになります.

あとは,最近あまり流行りませんが,そのものずばり「異種言語で書かれたモジュール/システムの連携」を目指したフレームワークとしては CORBA (http://ja.wikipedia.org/wiki/Common_Object_Request_Broker_Archit...) があります.適切な ORB(仲介モジュールと思ってください)を使えば,以下の言語で書かれたモジュールを相互に連携可能になります(Wikipedia より抜粋;他にもまだあると思います):

Ada, C, C++, LISP, Smalltalk, Java, COBOL, PL/I, Python, Perl, PHP, Ruby, Visual Basic, Tcl

とてもすばらしいお話に見えますが,IDL(インタフェース定義言語)記述などを別途準備する必要があったり,ORB によってできること/できないことが違ったり,実際に使おうとすると面倒なことも多いです.

連携の目的にもよりますが,趣味の範囲や一般の PC 環境での話でしたら SWIG の利用を,エンタープライズ環境での異種システム連携なんて話でしたら CORBA の利用を,それぞれ最初に検討してみると良いのかな,と思います.

id:yshkw

いきなり全体像が見えたので感動しています。

1.windows(.dll)とunix(lib**.so)

2.ライブラリ直書き(C:勉強用)とツール(SWIG:趣味用)とフレームワーク(CORBA:業務用)

3.VM上にスクリプト言語が実装されている場合は簡単にJAVAと連携できる

思いつきでやっていたときは、全体はshで制御、データはファイルで中継させたりと無駄が多かったので飛躍ができればと思います。

2008/05/02 18:34:51
id:ken33jp No.3

ken33jp回答回数928ベストアンサー獲得回数132008/05/03 07:57:28

ポイント10pt

>「片方の言語で作った実行ファイルを他方で実行する」が基本と考えてよいですか?

一番無難です。

ほかの方法は、はまったらとことんはまりまくります。

http://q.hatena.ne.jp/answer

id:yshkw

なるほど、それでよかったのですね

2008/05/08 01:17:45
id:AnonymousCoward No.4

匿名回答0号回答回数35ベストアンサー獲得回数32008/05/08 00:38:42

ポイント10pt

Unix の場合は、未だにパイプ共有ライブラリが主流だと思いますが、

Windows の場合は、共有ライブラリの他、COM.NET Framework が主流だと思います。

id:yshkw

基本的なところが書いてあって参考になりました。

少し早いですが、締め切ります。

2008/05/08 01:33:16

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません