HyperAI超神経
Back to Headlines

Pyreflyとty:RustベースのPython型チェッカー2つの比較 先月、MetaとAstralが新しく開発しているRustベースのPython型チェッカーが注目を集めました。これらは、従来のmypyやpylanceに代わる新たな選択肢として歓迎されています。両者はまだアルファ版ですが、PyCon 2025でのTyping Summitで初めて公式に紹介されました。 比較ポイント:速度、目標、インクリメンタル化、機能 速度 ty: PyTorch、Django、mypyの各リポジトリでのベンチマークでは、tyがpyreflyよりも約2-3倍速いことが確認されました。特にPyTorchでは、tyが4秒未満で完了し、pyreflyは13秒以上かかっています。 pyrefly: 速度も重要な設計目標でしたが、tyに比べると少し劣っていました。しかし、PyTorchのリポジトリで8600のソースファイルを検出したのに対し、tyは6500ファイルでした。 目標 pyrefly: 型推論を極力行い、明示的な型指定が一切ないコードでもある程度の型安全性を担保することを目指しています。 ty: 「漸進的な保証」を重視しており、型注釈を削除しても型エラーが発生しないようにすることが目標です。 インクリメンタル化 ty: Rust Analyzerと同じSalsaフレームワークを使用して、細かい単位でのインクリメンタル化を実現しています。関数の変更により、その関数と依存関数のみが再パースされます。 pyrefly: モジュールレベルでのインクリメンタル化を採用しており、関数の変更により全体のモジュールが再パースされます。これにより、コードベースの管理が容易になります。 機能 pyrefly: 隠れ型推論やジェネリクスの解決能力が高く、複雑なコレクションオブジェクトの型推論にも優れています。 ty: 清晰で簡潔なエラーメッセージや、交差型と否定型のサポートが特徴です。これらは、他の型チェッカーでは実装されていない機能です。 結論 現在、Pyreflyとtyはそれぞれ異なる目標とアプローチを持っています。Tyは「漸進的な保証」に焦点を当て、既存のコードに対して最小限の変更で型安全性を向上させることを目指しています。一方、Pyreflyは可能な限り多くの型を推論し、型安全性を最大化することに重点を置いています。両者は今後機能が収束する可能性がありますが、現在の段階での違いは興味深いものです。 ぜひ、これらの新しい型チェッカーを試してみてください!Pyreflyはpyrefly.org/sandboxで、tyはplay.ty.devで試すことができます。また、それぞれpipインストールコマンドやエディタプラグインも利用可能です。 GoogleがGoベースのPython型チェッカーをオープンソース化する計画があるという噂も聞こえてきます。今後の展開が楽しみです!

2ヶ月前

Python の新しい Rust ベースの型チェッカー:pyrefly と ty の比較 先月、Python 型チェッカーの世界に新たな顔ぶれが出ました。それは、Meta が開発した pyrefly と Astral が手がけた ty です。これまでは mypy と pylance が主流でしたが、この2つの新規チェッカーは、より高速で洗練された機能を提供する可能性を持っています。 Pyrefly pyrefly は、OCaml で書かれていた Meta が以前開発した Pyre の後継として登場しました。主には更快い速度、高い移植性、そしてより多くの機能を追求しています。特に速度に注力しており、チームからのプレゼンテーションでも多次に強調されていました。彼らによれば、pyrefly は Pyre よりも35倍速く、mypy または pyright よりも14倍速いとのことです。1秒間に最大180万行のコードをチェックできるほどの性能を持つとされています。 pyrefly のチームは、本当のオープンソース化を目指していることを明確に示しました。Pyre は技術的にはオープンソースでしたが、Meta の内部需要のために開発されただけといった印象でした。一方、pyrefly はオープンソースコミュニティのニーズにも対応するよう尽力しているとのことです。 ty ty は Astral が開発中で、以前は Red-Knot という名前で知られていました。プロジェクトは GitHub 上でのソフトローンチ、30分間のプレゼンテーション、そしていくつかのブログ記事やポッドキャストでの紹介で静かに始まりました。ty もまた速度に注力しており、「現行の型チェッカーより1桁から2桁高速」という目標を掲げています。 測定結果 ベンチマークテストでは、pyrefly と ty が既存の型チェッカーに対して大幅に高速であることが確認されました。PyTorch、Django、そして mypy 自身のリポジトリでの測定結果は以下の通りです: PyTorch: ty: 4.04秒(平均) pyrefly: 13.03秒(平均) pyright: 262.74秒(平均) Django: ty: 578.2ミリ秒(平均) pyrefly: 910.7ミリ秒(平均) pyright: 16.324秒(平均) mypy (mypyc subdirectory): ty: 74.2ミリ秒(平均) pyrefly: 136.0ミリ秒(平均) mypy: 3.544秒(平均) pyright: 2.852秒(平均) ty は pyrefly に対して、PyTorch と torch の測定では2〜3倍、Django と mypyc の測定では1.5〜1.8倍の速さを示しました。ただし、ty が検出しなかったソースファイルがあり、pyrefly がそれよりも多くのファイルを検出した点に注意が必要です。 目標とアプローチ Pyrefly は、最も積極的な型推論を行うことを目指しています。つまり、明示的な型アノテーションが一切ないコードであっても、ある程度の型保証を提供できます。これにより、pyrefly は他の型チェッカーが見逃すようなエラーを捕捉することができます。 一方、ty は「漸進的な保証」を主導しています。これは、正しく動くコードにおいて型アノテーションを削除しても型エラーが発生しないこと。具体的には、my_list.append("foo") が型エラーとして扱われるべきではないと判断する点で、pyrefly に対して独自の視点を持っています。 増分化の違い 増分タイプチェックは、ファイルの一部が変更された場合に、影響を受けた部分だけ再解析することを意味します。pyrefly は独自の増分エンジンを使用し、変更があったファイル全体を再解析します。一方、ty は Rust Analyzer を支える同じフレームワーク Salsa を使用しており、変更された個々の関数だけを再解析します。これにより、ty は細かい増分解析が可能となっています。 効能と特徴 pyrefly は「難しい問題から始めること」を方針としており、ジェネリクスやオーバーロード、ワイルドカードインポートなどの高度な機能に力を入れています。 ty はクリアなエラーメッセージを重視しており、以下の簡単な例のように、型の不一致を明確に示してくれます: python def func(x: int) -> str: return x * 2 - pyrefly などのエラーメッセージ: error: Incompatible return value type (got "int", expected "str") ty のエラーメッセージ: error: Cannot return "int" from a function whose return type is "str". また、ty は Python で初めて 交差型 と 否定型 のサポートを導入しました。以下のような例で、ty がどのようにこれらを解析するかを見ることができます: ```python @final class Other: pass class WithX: x: int obj: WithX | Other reveal_type(obj.x) # Type is 'int' `` この例では、objがWithXかOtherのどちらかであり、objがx属性を持つ場合、reveal_type(obj.x)はint` と表示されます。 しかし、交差型や否定型の解析には未解決の問題があり、例えば以下の場合、reveal_type(obj.foo) は未完了 (@Todo) と表示されます: python obj: HasFoo & ~<Protocol with members 'bar'> reveal_type(obj.foo) # Should be resolvable to the function foo 最終的な思い 現在、pyrefly と ty は異なる目標を持っています。ty は漸進的な型保証を目指し、pyrefly は可能な限り多くの型を推論しようとします。両者とも早期アルファ版であり、今後の機能と性能はさらに向上すると予想されます。 興味深いことに、Google は Go ベースの Python 型チェッカーをオープンソース化する計画があるという噂も出ています。これは Python の型システムにとってさらなる進化となる可能性があります。 業界関係者のコメントと企業概要 pyrefly のチームは、より開放的なオープンソースコミュニティとの協力を重視しています。Meta が自社のニーズに合わせて開発しているという過去の姿勢とは異なり、pyrefly では外部からのフィードバックや貢献も歓迎されています。 Astral もまた、ty の開発を積極的に進めています。uv と ruff を手がけることで知られる Astral は、ty の開発における細やかな増分解析とクリアなエラーメッセージを強力にアピールしています。この新しいチェッカーは、Python の将来性を高める一翼を担う存在となりえるかもしれません。

Related Links