概要
- EuroPython 2025で Antonio Cuni が「Pythonパフォーマンスの神話とおとぎ話」について講演
- Pythonのパフォーマンスに関する 誤解や神話 を実例で解説
- メモリ管理 がPython高速化の最終的な壁であると指摘
- 静的型付けやJIT導入でも 本質的な問題 は解決しない現状
- 新プロジェクト SPy による超高速Python実現への期待
EuroPython 2025講演:「Pythonパフォーマンスの神話とおとぎ話」
-
講演者は PyPy開発者 であり、長年Pythonのパフォーマンスに取り組む Antonio Cuni
-
会場で「Pythonは遅いと思うか」と質問、多くの手が挙がる
-
「Pythonは遅くない」「Pythonはグルー言語だから速度は問題ない」といった 神話の否定
-
Pythonで十分速いプログラムもあるが、 全ての用途に適しているわけではない
-
パフォーマンスが求められる場面では CythonやNumba などの利用が進む現状
- Pythonが速いとされる用途と、全てのPythonプログラムの関係を ベン図 で説明
-
「グルー言語だからホットスポットだけC/C++やRustで書けば良い」という 考えの限界
- パレートの法則 (80/20則)や アムダールの法則 により、最適化には限界がある
Pythonが遅い本当の理由
- 「インタプリタだから遅い」は 部分的な真実 に過ぎない
- 例:p.x * 2 という表現でも、Pythonでは 多段階の処理とメモリアロケーション が発生
- これらは 言語の動的性質 に起因し、インタプリタか否かは本質的な問題ではない
静的型付けと最適化の誤解
- Pythonの型アノテーションは 実行時に強制されない
- 型ヒントがあっても、 実際には様々な型の値が渡される可能性 がある
- クラス定義や特殊メソッドの削除、インポートの動的変更など、 静的解析・コンパイルの困難性 を例示
JIT導入の限界と「最適化チェイシング」
- JIT導入で 高速化は可能だが、実装は複雑化
- JITの挙動を意識した コード設計が必要 となり、パフォーマンス予測が難しい
- 一部の最適化が崩れると 全体が急激に遅くなる現象 (最適化チェイシング)の発生
Pythonの極端な動的性質
- import文の挙動やグローバル変数の値、型アノテーション、デコレータなど、 何が起きるかコンパイラは予測困難
- 99%のケースでは素直な使い方だが、 1%のダイナミズムがPythonの魅力 でもある
- ライブラリ開発者が ダイナミックな機能 を活用して使いやすいAPIを実現
コンパイラゲーム:何も信じられないPythonコード
- 動的属性追加、ランダムなメソッド定義、__new__のトリック、グローバルの差し替えなど 極端な例 を紹介
- これらが 最適化や静的解析の壁 となる
抽象化とパフォーマンスのトレードオフ
- コードの見通しや保守性を求めて 関数化やデータクラス化 すると、 オーバーヘッドが発生
- JITでも 関数呼び出しや抽象化のコスト を完全には消せない
- Pythonでは「 抽象化は無料ではない」という現実
Python高速化の限界と今後
- パフォーマンスを突き詰めると 最終的にメモリ管理の壁 に直面
- 現状のCPythonやPyPyの枠組みでは 根本的な高速化は困難
- SPyプロジェクト :より速いPython実現を目指す初期段階の取り組み
- 理想は「 全ての用途にPythonが使える世界」だが、現状はまだ道半ば
この講演は、 Pythonパフォーマンスに関する誤解や現実、そして 今後の可能性 を多面的に解説する内容。 最適化手法の限界や、 言語仕様がもたらす根本的な難しさ について深く掘り下げている。