CPythonはRustの夢を見るか Rust for CPythonがPython 3.16に向けた計画を公表:Deep Insider Brief ― 技術の“今”にひと言コメント
CPython(PythonのリファレンスC実装)にRustを導入する取り組みの進捗(しんちょく)が報告された。まずはPython 3.16でRust製の拡張モジュールをオプションとして組み込むことを目標として、PEPの提出が計画されている。
2026年4月8日、Python公式ブログに「Rust for CPython Progress Update April 2026」という記事が投稿された。これは、CPythonへのRustの導入を検討しているRust for CPythonコミュニティが、Python 3.16を目標に、まずはRust製の拡張モジュール導入に絞ってPEPまで持っていく計画を述べたものだ。
Rust for CPython Progress Update April 2026
Python公式ブログへ投稿された「Rust for CPython Progress Update April 2026」をキャプチャーして引用
CPythonにRustを導入する取り組みについては、2025年11月にEmma Smith氏らによってdiscuss.python.orgに「Pre-PEP: Rust for CPython」が投稿され、議論が熱く行われた。今回のPython公式ブログへの記事の投稿は、Pre-PEP以降にRust for CPythonプロジェクトで行われてきた作業や、PEPを提出するまでの予定をまとめたものだ。
CPythonにRustを導入する狙い
そもそもなぜCPythonにRustを導入するのだろう。pre-PEPでは以下のような理由が挙げられている。
Rustは、メモリの所有権モデルによってメモリ安全性とスレッド安全性をサポートしたプログラミング言語である。これによって、範囲外のメモリに対する読み込みや書き込みや解放済みのメモリへのアクセスが制限される(メモリ安全性)。CPythonは歴史的に不正なメモリアクセスにまつわるバグやクラッシュを数多く経験している。Rustを導入することで、そうしたバグやクラッシュ、脆弱(ぜいじゃく)性といったものがなくなることが期待される。
また、所有権モデルにより複数のスレッドによるメモリアクセス(データ競合)がコンパイル時に防止される(スレッド安全性)。フリースレッド版のPythonが公式にサポートされたこともあり、標準ライブラリでもスレッド安全性を確保することは非常に重要となっている。この点でもRustを採用することには大きな意味がある。
pre-PEPでは、この他にもゼロコスト抽象化(Vectors、HashMaps、Mutexesなどの一般的なデータ構造を、他の言語で手書きした実装と同等のパフォーマンスを保ちながら高水準な形で提供すること)、体系的なメタプログラミングのサポート、サードパーティー製のライブラリでのRust採用の高まりなどが、Rust for CPythonを進めるための動機として挙げられている。
「完全統合」から「拡張モジュール限定」へ
pre-PEPが最初に投稿された時点では、最終的にはRustをCPythonの必須依存関係とし、CPythonのコードベース全体でRustを使えるようにすることまでが、その射程に置かれていた。だが、ブートストラップ問題(Rustコンパイラのブートストラップ過程がPythonに依存しているため、CPythonのビルドでもRustを必須とすると、初期構築や移植、保守の手順が複雑になり得る)やRustをサポートしないプラットフォームへの対応、既存コントリビューターへの負担といった懸念が多数寄せられたことを受け、Emma Smith氏は後に方針転換を表明した。
現在は、まずオプションでRust製の拡張モジュールをCPythonに組み込めるよう提案するPEPを提出することに目標を定めている。インタープリターコアへのRust導入は、拡張モジュールでの経験を積んだ上で、将来の別PEPで改めて検討する方針だ。
現在の進捗
「Rust for CPython Progress Update April 2026」によると、以下のことが達成されている。
- Rust for CPythonチームがフォークしたCPythonリポジトリでは、CPython with RustのCI(Continuous Integration)ビルドが、現在テスト対象となっている各プラットフォームで成功
- 内部Rust APIの設計について、RustチームとのミーティングやGitHub上でのissue議論が進められている
ここでいうCPython with Rustとは、C APIへのRust FFIバインディングを含み、そのバインディングを使ってRustで拡張モジュールを書けるようにしたCPythonと考えるとよい(以下でロードマップを示すように、これはまだ暫定的なものだ)。_base64モジュールは、これを使って実装しているということだ。
また、pre-PEPではproof-of-conceptとして、Rustを使ってbase64モジュールの処理を高速化した_base64モジュールが実装されています。
Python 3.16に向けたロードマップ
CPython with Rustはそのターゲットを当初の予定だったPython 3.15からPython 3.16に変更し、十分な議論の時間を確保した上でPEPを提出する計画だ。以下は今後の大まかなスケジュールである。
- 4月:内部Rust APIデザインの計画開始。3.16でRust実装を持つ拡張モジュールを1つ選定
- 5月:内部Rust APIデザインの計画を確定し実装を開始。PyConUSでスプリントを実施
- 6月:PEPの執筆開始
- 7月:PEPドラフトを最終化し提出、議論を開始
計画段階の今はまだRustで拡張モジュールを書けるようにすることが目標ですが、CPython自体のコードベースでもRustが採用されることになったら、メモリ安全性やスレッド安全性の向上が期待されます。特にフリースレッド版Pythonの普及を考えると、その意義は小さくないでしょう。さらにCPythonの課題とされている実行速度を含めて、いろいろな改善が見られることになるかもしれませんね(今も進んでいるPython高速化計画との兼ね合いも気になるところです)。
なお、Rust for CPythonのリポジトリはこちらです。興味のある方は要チェックですね。
情報元
Copyright© Digital Advantage Corp. All Rights Reserved.