-
- newzer
- 3448ポイント
- 投稿時間:2009/07/03 19:04
Perlのxsやphpのpeclの様に Pythonもc/c++のextentionを作る方法があるとおもうのですが。 メジャーなやり方って何でしょう?
- 回答数 (1)
- クリップ数 (1)
- アクセス数 (1536)
- 回答
おそらくもっともスタンダードな方法は、Python/C API を使うことだと思います。 Extending and Embedding the Python Interpreter にチュートリアルがあります。 この方法では最善のパフォーマンスが得られ、Pythonのすべての言語機能が使えるという利点はありますが、Python/C API に習熟する必要があります。 個人的には C API のメモリ管理を覚えるのがいやだったので、swig を使っています。 こちらは C/C++ で書いたライブラリのヘッダファイルから、Pythonのラッパーモジュールを作ってくれます。 swig 自体がけっこうクセの強いプログラムで覚えるのに時間がかかること、 Python/C API を直接使うほど効率は良くない(はず。自動生成のコードが間に入るので。)こと、 Pythonの言語機能すべてを使えるわけではない(か、使うためには難儀する)、 といった欠点もありますが、それを差し引いても、 言語特有のAPIやメモリ管理を気にしなくて良いこと、 swigで書いたモジュールは他の言語(Perl, Ruby等)でも動かせる可能性が高いこと、 といったメリットは大きいと思います。 他にも Pyrex というツールがあるようですが、こちらについては調べたことがないのでよくわかりませんが、 wikipedia の Pyrex に関する記述には、次のように書かれています。Pyrex は、Pythonの拡張モジュールの作成を補助する目的で開発されたプログラミング言語である。<中略>Pyrex ではユーザーが C コードに直接アクセス可能な Python に似た言語を用いて、拡張モジュールを記述することを可能にする。 Pyrex と Python の文法が似ているため、Python のモジュールを記述するのは容易であり、C や C++ などの異なる言語を習得する必要がない。また、グルーコードを書く必要もない。C のヘッダファイルと、拡張モジュールでアクセスする必要のある列挙型、データ型、関数を指定するだけでよい。Pyrex コンパイラが必要なグルーコードを自動的に生成し、Pyrex コードを動作する Python モジュールにコンパイルしてくれる。
0
回答
4
回答
1
回答
2
回答
1
回答
2
回答
(2009/04/01 12:03)
by mochimochi
2
回答
2
回答
(2009/08/20 13:23)
5
回答
(2009/04/10 08:47)
by mochimochi


