9

私がやりたいことは、ほとんどの人がやりたいこととは正反対です。Python で書かれたライブラリがあり、それを C (およびおそらく他の言語) で利用できるようにしたいのです。

これに対する典型的な答えは、C 用の Python ライブラリを使用することです。つまり、次のとおりです。

#include <Python.h>

int
main(int argc, char *argv[])
{
  Py_Initialize();
  PyRun_SimpleString("from time import time,ctime\n"
                     "print 'Today is',ctime(time())\n");
  Py_Finalize();
  return 0;
}

(ソース: http://docs.python.org/extending/embedding.html#very-high-level-embedding )

ただし、これは私には最適ではないようです。

  • 醜いです
  • C専用です

代わりに、ライブラリを C を含む多くの言語にバインドする方法が必要です。ラッパーの自動生成は気にしません。ライブラリは非常に単純なので、グルー コードを記述できます。

現時点で、私が思いついた唯一の解決策は、上記のようなコードを使用してライブラリを C にバインドすることです。次に、SWIGを使用して C ライブラリを他の言語にバインドします。

より良いものはありますか?

4

1 に答える 1

5

さてCはプログラミングのリングワフランカです。ですから、あなたのアプローチは正しいと思います。Cのバインディングを作成し、SWIGや他の言語のFFIなどのツールを使用してCにバインドします。

もう1つのアイデアだけが思い浮かびます。今日、HTTPは、あらゆる種類のAPIとインターフェースの新しいリングワフランカとして浮上しています。したがって、RESTインターフェースを提供するPythonで記述された小さなWebサービスを作成することを考えることができます。しかし、明らかにこれは特定の設定でのみ意味があります。

もちろん、Python libを別のプロセスで実行することを決定すると、名前付きパイプやソケット、Apache ThriftGoogle Protocol Buffers0MQなどのツールキットなどのプロセス間通信の可能性がすべてあります。

于 2012-05-16T15:29:47.787 に答える