1. 標準化による高速化
- PEP 518: pyproject.toml を導入し、コード実行なしでビルド依存関係を宣言可能に。
- PEP 517: ビルドフロントエンドとバックエンドを分離。
- PEP 621:
[project] テーブルを標準化し、依存関係を TOML 解析で取得可能に。
- PEP 658: パッケージメタデータを直接 API に埋め込み、ホイールのダウンロードを不要化。
2. 削減による高速化
.egg サポートや pip.conf の無視。
- デフォルトでバイトコードコンパイルをスキップ。
- 仮想環境の必須化により、システム Python へのインストールを制限。
- 厳格な仕様準拠と上限バージョン制約の無視。
- 最初のインデックスで一致したパッケージを即座に選択。
3. Rust 不要の最適化
- HTTP レンジリクエストを活用したメタデータ取得。
- 並列ダウンロード。
- グローバルキャッシュとハードリンクの利用。
- Python を使わない解決プロセス。
- PubGrub アルゴリズムによる効率的な依存解決。
4. Rust による最適化
- ゼロコピーのデシリアライズ。
- スレッドレベルの並列処理。
- インタプリタ起動コストの削減。
- コンパクトなバージョン表現。
5. 設計の重要性
- Rust のみが高速化の理由ではなく、古いサポートを切り捨て、最新の標準を活用した設計が鍵。
- 他のエコシステム(Cargo, npm)も静的メタデータと依存関係の事前解決を採用している点が参考になる。
これらの工夫により、uv は従来の pip よりも大幅に高速なパッケージ管理を実現しています。
抽象化
- 高速な言語を使うだけではない
- むしろ、その他の要因も同等かそれ以上に重要
- 前提条件となっていたものを外す、削減、スキップ
- DXのいいツールに置き換える
- 並列化
- 他のエコシステムの良い例を取り入れている
See
https://nesbitt.io/2025/12/26/how-uv-got-so-fast.html
1. 標準化による高速化
[project]テーブルを標準化し、依存関係を TOML 解析で取得可能に。2. 削減による高速化
.eggサポートやpip.confの無視。3. Rust 不要の最適化
4. Rust による最適化
5. 設計の重要性
これらの工夫により、
uvは従来のpipよりも大幅に高速なパッケージ管理を実現しています。抽象化
See
https://nesbitt.io/2025/12/26/how-uv-got-so-fast.html