LoginSignup
1
1

Cython3は凄く良い

Last updated at Posted at 2023-04-10

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によって型付と切り替えられるようになって欲しい。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1