Cython3(現在はCythonベータ1)はとてもよい。
.py
をほぼ変更なく、.pyx
化できる。
つまり、PythonのTypeHintがそのままCythonの型付にできる。
Cython2ではfrom __future__ import annotations
があるとエラーが生じてが、Cython3になってからはほとんどエラーなくなった。
それどころかTypeHintに示した型も理解してくれたので、Python3.9で開発したコードをそのまま.pyx拡張子に変えても動かせる。
Debugでは.pyx
を.py
へ戻してDebugしている。
.pyx
独自の文法を使わず、PurePythonモードの型指定を使っている(例: cdef:型指定→cython.declare(型、value)かTypeHintでも型指定できてるみたい)。それでもCython用に型指定できているようである。本当はプロファイラで確認しないと行けないのだが、、、。
なので、簡単なエラーは、Cythonで表示されるエラーをみる。.py
で動いていたのに、.pyx
で動かないのは、型指定誤りがほとんど(私の中では)。
コード拡張などにより、深いバグが見込まれる場合は、.py
へ戻してデバッグして、.pyx
へ戻す。この時、型指定誤りで苦しむが一瞬で済む。
クラスの継承も可能になった
NumbaのNative化はは関数レベルだが、CythonだとクラスレベルでNative化できる。しかも、いつの間にか継承したクラスを含む.pyx化でも動く。(一応、Cython化されたクラス通しながら継承も可)
プロファイラでしっかり確認
PythonオブジェクトをうまくWrapしてくれるため、もしかしたら、パフォーマンスが落ちる箇所があるかも。プロファイラで確認が必要かもしれません。今のところ、私の方はCython3にしてパフォーマンス上がっている(計算が短時間になっている)。
快適なのはPyCharmProのおかげ?
PyCharmProはCythonの構文解析は良いです。リファクタリングが効くなど.py
同様の恩恵を受けられます。VSCodeでは残念ながらCythonは不十分です。(VSCodeでは、`.pyx`があるとUnitTestコードがおかしく表示されたりする問題があります。)。
PyCharmProの比較ページでもCE版との相違にCythonサポートが書かれているので、Cythonの有用性を活かすことができます。
https://www.jetbrains.com/ja-jp/products/compare/?product=pycharm&product=pycharm-ce
Pythonの遅さからPyPyやNumbaを使ったけど、今後は、スケーラビリティからCython3一択になった。将来はリリース時にはCodonによって型付と切り替えられるようになって欲しい。