cocuh's note

type(あうとぷっと) -> 駄文

C++(or others)からpythonを叩きたくてpython処理系を調べまくったメモ

とある案件でc++(or others)にpython処理系をうめこんでsandbox的に叩きたかったので、 python処理系を試しまくった話です。記事というより日記っぽいなにか。

要件

  • C++からpythonを叩けるようにしたい
  • windowsMaclinuxで動くようにしたい
    • pythonが動くのであればC++指定はあんまり重要ではないのでironpythonという手もある
    • 案件がゲーム開発なのでマルチプラットフォームなグラフィックライブラリが強く並列処理できる言語が嬉しい
    • publisherの関係でstatic linkingのしたほうがよいかもしれないと当時思っていた
  • 個人的趣味でpython3がよい

Q.python処理系でどんなのがあったっけ

python wikipython implementationのところがある

https://wiki.python.org/moin/PythonImplementations

embed-able from C++

CPython

みんな大好きCPython。公式の処理系です。

https://www.python.org/

PyPy

pythonでself hostingしたpython、型制約のあるpythonサブセットrpythonで実装されてて、Just In Time Compiler(JIT)が強いことは有名(?)
一部界隈から(発音が)卑猥とか言われているけれど、卑猥なのはそう感じちゃうあなたの心です。

http://pypy.org/

  • 最新バージョンは、3.2.5(2015年6月リリース)
  • ドキュメントが転がってるのでC++でembedすることもわりと考えられているっぽい
  • CPython速いしメモリー消費が少ないって言われる
    • 個人的感想では、CPythonよりrunningは良いけどjitのoverheadが大きいし、CPythonよりメモリー食ってる気がする(jitの分?)
  • stackless*1なのでなんとやら

できればこいつ使いたい

stackless

pythonのstackless実装。pypyの影に隠れちゃった感じがある。
ストラテジーゲームのCivilization4のpythonはこいつ。

http://www.stackless.com/

  • 最新バージョンは、2.7.8(3.3.5もあるけどlatestがそれだった)
  • スケジュールリングとかstacklessだったりmicrothreadまわりが強いらしい(あまり詳しくない)
  • embeddingのドキュメントがCPythonのコピペに視える。
    • あとで試すのですが、ほとんど一緒なので問題なかったです

embed-able from other languages

IronPython

.net上で動くpython処理系。.netなのでほぼ確実にwindowsでもウゴク

http://ironpython.net/

  • 最新バージョンは2.7.5(2014,12月リリース)。
  • python3対応はしていないっぽい。
  • こいつはC++でなくC#からpythonが叩ける。
  • 開発環境がlinuxなのでmonodevelopになってしまう

Jython

JVMで動くpython処理系です。

http://www.jython.org/

  • 最新バージョンが2.7.0で2015年5月リリース
  • こいつもpython3対応していないっぽい。
  • こいつもC++じゃなくてjavaから叩く系。
  • java嫌いなのであんまり調べてない
  • java嫌いなので、他のが全部ダメだったら試すつもりだった最後の手段

(javascript実装系)

  • javascriptはないので調べても居ない。

おわりに

CPython, PyPy, stackless pythonコンパイルして、monodevelopいれてIronPythonするんですが日本語書くのがつかれたのでとりあえずおわりに。
元気があれば、コンパイルしたときに詰まったことなど書こうと思います

*1:Cのcall stackに依存していないという意味