C++(or others)からpythonを叩きたくてpython処理系を調べまくったメモ
とある案件でc++(or others)にpython処理系をうめこんでsandbox的に叩きたかったので、 python処理系を試しまくった話です。記事というより日記っぽいなにか。
要件
- C++からpythonを叩けるようにしたい
- windowsとMacとlinuxで動くようにしたい
- pythonが動くのであればC++指定はあんまり重要ではないのでironpythonという手もある
- 案件がゲーム開発なのでマルチプラットフォームなグラフィックライブラリが強く並列処理できる言語が嬉しい
- publisherの関係でstatic linkingのしたほうがよいかもしれないと当時思っていた
- 個人的趣味でpython3がよい
Q.python処理系でどんなのがあったっけ
python wikiにpython implementationのところがある
https://wiki.python.org/moin/PythonImplementations
embed-able from C++
CPython
みんな大好きCPython。公式の処理系です。
- 最新バージョンは、3.4.3。3.5.0が9月にリリースされる予定
- ソースはmercurial管理で独自レポジトリ上
- 埋め込みに関する記事がちゃんとあるのでよい
- windowsでも動く、コンパイルのやり方も書いてあるので安心
PyPy
pythonでself hostingしたpython、型制約のあるpythonサブセットrpythonで実装されてて、Just In Time Compiler(JIT)が強いことは有名(?)
一部界隈から(発音が)卑猥とか言われているけれど、卑猥なのはそう感じちゃうあなたの心です。
- 最新バージョンは、3.2.5(2015年6月リリース)
- ドキュメントが転がってるのでC++でembedすることもわりと考えられているっぽい
- CPython速いしメモリー消費が少ないって言われる
- stackless*1なのでなんとやら
できればこいつ使いたい
stackless
pythonのstackless実装。pypyの影に隠れちゃった感じがある。
ストラテジーゲームのCivilization4のpythonはこいつ。
- 最新バージョンは、2.7.8(3.3.5もあるけどlatestがそれだった)
- スケジュールリングとかstacklessだったりmicrothreadまわりが強いらしい(あまり詳しくない)
- embeddingのドキュメントがCPythonのコピペに視える。
- あとで試すのですが、ほとんど一緒なので問題なかったです
embed-able from other languages
IronPython
.net上で動くpython処理系。.netなのでほぼ確実にwindowsでもウゴク
- 最新バージョンは2.7.5(2014,12月リリース)。
- python3対応はしていないっぽい。
- こいつはC++でなくC#からpythonが叩ける。
- 開発環境がlinuxなのでmonodevelopになってしまう
Jython
- 最新バージョンが2.7.0で2015年5月リリース
- こいつもpython3対応していないっぽい。
- こいつもC++じゃなくてjavaから叩く系。
- java嫌いなのであんまり調べてない
- java嫌いなので、他のが全部ダメだったら試すつもりだった最後の手段
(javascript実装系)
- javascriptはないので調べても居ない。
おわりに
CPython, PyPy, stackless pythonをコンパイルして、monodevelopいれてIronPythonするんですが日本語書くのがつかれたのでとりあえずおわりに。
元気があれば、コンパイルしたときに詰まったことなど書こうと思います
*1:Cのcall stackに依存していないという意味