両方のツールがどのように機能するかの簡単な要約を次に示します。
cffi
ctypes は、共有ライブラリ (.so
または.dll
ファイル) をロードし、それらのライブラリで定義された関数をラップするコードを最初にコンパイルすることなく呼び出すことができる、というライブラリに対する非常に Pythonic なラッパーです。呼び出す関数について ctypes に伝える必要があります。これにより、python 型 ( int
、など) から共有ライブラリ ( 、などstr
) で表現される abi に変換できます。uint32_t
char *
Cython は、C トランスレータへの「一種の python」です。生成された C コードはコンパイルでき、その結果、Python C 拡張機能として適切な機能をすべて備えた特別な種類の共有ライブラリ (.so
または再び) が得られます。.dll
Cython は非常にスマートで、入力の型注釈に基づいて、C 関数を直接呼び出すコード ( を使用する場合) を発行するか、 C apicdef
を介して通常の python オブジェクトを呼び出すコードを発行するかを認識します。PyObject_Call
Cython ソースでは C と python を (多かれ少なかれ) 自由に混在させることができるため、Cython ライブラリで PySDL2 を使用するのに問題はありません。通常の python のように呼び出し、インポートし、呼び出すだけで、すべてが「問題なく動作するはずです」 "。
とは言うものの、コードに宣言を直接含めるとlibsdl
、低レベルの C 型から Python 型への変換のオーバーヘッドを回避するために、タイトな内部ループから SDL を呼び出す場合に、ctypes
それらを元に戻すことができるという利点があります。また。アプリケーションが少し大きくなり、パフォーマンスのボトルネックに気付くまで、おそらくそれを延期することができます.