11月3日、David Casselが「Can the Safe C++ Proposal Copy Rust's Memory Safety?」と題した記事を公開した。この記事では、C++の新たな提案「Safe C++」が、Rustの持つ優れたメモリ安全性モデルを取り入れ、C++におけるメモリ管理の課題を解決しようとする取り組みについて詳しく紹介されている。
以下に、その内容を紹介する。
Safe C++の提案と背景
C++はその高い表現力とパフォーマンスで知られるが、メモリ関連のバグが発生しやすい問題も抱えている。そのため、MicrosoftやGoogleといった企業は、セキュリティを強化するために、開発者にRustへの移行を推奨することが多くなっている。しかしC++の既存コードとの互換性を考慮すると、Rustへ完全移行することは現実的ではないとの声もある。そこで、C++のメモリ安全性を強化するための代替案として「Safe C++」が提案された。この新提案は、C++をより安全で、かつRustの安全モデルに学びつつも独自のアプローチで進化させることを目指している。
Safe C++の提案は、2024年9月の標準化委員会であるWorking Group 21において提出された。この委員会は1990年からC++の標準化に携わっており、メモリ安全性の向上が今後のC++における課題として議論されている。この提案はC++コミュニティ内で広く議論を呼んでおり、RedditやHacker Newsなどのオンラインフォーラムでも多くの意見が飛び交っている。
提案者と新たなアプローチ
Safe C++の開発者であるSean Baxter氏とChristian Mazakas氏は、この提案を実現するために18か月を費やしてきた。Baxter氏は、NASAのジェット推進研究所やNVIDIAでの研究経験を持つエンジニアであり、C++のための新しいコンパイラ「Circle」を開発した実績もある。Mazakas氏は、C++コミュニティの成長と支援を目的に設立された501(c)(3)非営利団体であるC++ Allianceのスタッフエンジニアを務めており、この提案に対するコミュニティの支援を得るために尽力している。
このSafe C++では、「Safe Standard Library」と呼ばれる標準ライブラリの拡張が重要な役割を果たしている。このライブラリには、主要なデータ構造やアルゴリズムがメモリ安全な実装で含まれており、新しいコードが安全に書かれることを前提としている。また、この提案は新たなパターンマッチングや参照追跡機能を導入し、メモリ管理を改善することで、use-after-freeなどの脆弱性を回避できるよう設計されている。
「スティックとキャロット」のアプローチ
Safe C++は、「スティック(厳しい規則)」と「キャロット(メリット)」のアプローチを用いている。提案によれば、Safe C++開発者は、ポインタ計算や未初期化変数の使用といったメモリ管理での危険な操作が禁止されている。一方で、これらの制限と引き換えに、型安全性やスレッド安全性が保証されるなどのメリットも得られるよう設計されている。この仕組みは、Rustが採用する所有権と借用の安全モデルを参考にしており、これによりC++の脆弱な部分が大幅に改善されることが期待されている。
進化するC++のツールチェーン
Baxter氏は、Safe C++のための基盤をすでに築いており、その一環としてCircleというC++コンパイラを開発している。このコンパイラは、Rust風の借用チェッカーを導入し、C++のコードの安全性を向上させることが可能であるとされている。この取り組みは、既存のC++資産との互換性を維持しつつも、安全性と生産性を高めることを目指しており、従来のC++言語に対する新たな進化の道を示唆している。
Baxter氏は、「なぜすべての開発者がRustに移行しなければならないのか」という問いに対し、C++が本来持つ表現力と互換性を保ちながら安全性を向上させる解決策としてSafe C++を提案している。また、National Security Agency (NSA)やホワイトハウスからもメモリ安全性に関する警告が出されており、Baxter氏はこれが技術業界全体にとって重要な課題であると指摘している。
プロフィールと他のアプローチ
このSafe C++提案は唯一のメモリ安全対策ではない。C++の創設者であるBjarne Stroustrup氏も、C++に「プロファイル」という安全性を保証するルールを導入する計画を提案している。この「プロファイル」は、C++ Core Guidelinesの一部としても参照されており、安全性とリソース管理に対する目標を持つルール群をまとめたものである。
コラボレーションと今後の展望
Safe C++の提案者たちは、コミュニティからのフィードバックを積極的に求めており、この取り組みがC++エコシステムの中で有意義な成果をもたらすことを期待している。提案では、「業界の参加により、残る設計上の課題を解決し、18か月後には主流評価に耐えうる堅牢な言語と標準ライブラリを構築できる」と述べられている。このSafe C++は大規模な言語拡張であるが、ツールの構築コストは大きくないとされており、同時に安全な標準ライブラリの共設計も進めている。
詳細は、[Can the Safe C++ Proposal Copy Rust's Memory Safety?]を参照していただきたい。