2015年6月18日木曜日

Cython ―Cとの融合によるPythonの高速化

Cython ―Cとの融合によるPythonの高速化 Kurt W. Smith ISBN4873117275 オライリージャパン

PythonとRubyって、一時はキャラがかぶって競合関係にあったような気がするのだけど、 今ではWebならRuby、科学技術計算ならPython と別れてしまったような気がする。 numpyやscipyなどの数値演算ライブラリを使うと、Pythonで科学技術計算が 簡単に書ける。BigData解析やら機械学習なんかも Pythonでやるのが流行っている ようだ。

なんでスクリプト言語で科学技術計算ができるのか、かなり不思議だったのだけど、 その秘密は Python/C API にある。numpyにしろscipyにしろ数値演算のコア部分は 実はC言語で書かれているし、データもC言語の管理する空間に置かれいている。 Pythonはライブラリ呼び出しを制御するだけ、という立ち位置なのだ。

Cythonは、このPython-Cエコシステムの一翼を担うシステムである。 C言語で書かれたライブラリをラップするコードを半自動で生成してくれる。 Pythonコードに変数の型を指定すると効率のよい拡張モジュールにコンパイルしてくれる。 実際、numpy やscipyでもCython は使われている。

Cythonでは、Pythonに型を導入した怪しい言語で、C言語とほぼ同じことが記述できる。 構造体どころか関数へのポインタを返す関数、みたいなものまで定義できる。 Cythonを使うと、C言語とPythonの世界を簡単に行ったり来たりすることができる。 C言語レベルのコールバック関数をPythonで書くなんてことまでできるのだ。 C言語レベルでmallocしたメモリを特定のPythonオブジェクトに紐づけて、 オブジェクトが死んだら開放するようにすることもできる。

さらに驚くべきなのはprangeというコンストラクト。なんと、バックエンドのopenmpを 用いて自動並列化するという。。

言語としてのCythonはPython をベースにした独自言語という位置づけになっている。 この種の言語でよくあるのは、中途半端な設計と実装のために、 動くには動くけど、コーナーケースがありすぎて 実際に使ってみるとすごく大変、というものが多いように思うが、Cythonは違う。

アイディアだけで言えば、気の利いた卒論とかにもありそうなネタなのにもかかわらず、 凄みさえ感じさせる完成度。おそるべし。

この本はCythonのさまざまな側面を細大漏らさず書いている。 著者はCythonのヘビーユーザーで、開発者コミュニティの一員でもある。

C言語のライブラリを多用しているが、C言語ではもうプログラムが書きたくない、 なんて人にはCythonがぴったり。一度Cythonでライブラリをラップしてしまえば、 Pythonからインタラクティブにライブラリを使うことができる。

実はこの本、縁あって監訳させていただいた。 ご興味があればどうかひとつ。

Cython ―Cとの融合によるPythonの高速化
Kurt W. Smith
オライリージャパン
売り上げランキング: 43,279

0 件のコメント:

コメントを投稿