C++26、Contracts論争で土壇場の失速

devops

ISO作業部会、実行時チェック、複雑性、言語のリリース時期をめぐり対立

プログラミング言語C++の次期バージョンが、セキュリティ強化機能「Contracts」をめぐる論争のため、土壇場で遅れる可能性が出てきました。 

Contractsは、C++の技術メンテナーの間に深い溝を生んでいます。一方の陣営は、C++の生みの親であるBjarne Stroustrup氏を支持しています。同氏は、Contractsが拙速に実装されたとして、現状の形に反対しています。もう一方の陣営はContractsの導入を強く望んでおり、反対派こそがC++の開発プロセスそのものを蝕んでいるとまで主張しています。 

対立は、新バージョンを承認する投票の直前になって表面化しました。 

10月、C++26の国際規格案(DIS)がISO投票で否決されました。この投票は、国際標準化機構(ISO)の承認プロセスで最終の一つ前に当たる段階で、各国の標準化団体が規格の技術的詳細を正式に承認するものです。

投票結果は賛成13票、反対9票、棄権12票でした。反対票が25パーセント以下というISOの要件を満たせませんでした。反対票を投じた側にとって、最大の争点はContractsでした。 

Contractsをめぐる対立

Contractsを使うと、開発者はコードに事前条件や事後条件を追加できるほか、指定した条件が成立するかを確認するアサーションも記述できます。こうしたチェックは、未定義動作につながりかねないプログラミングミスの発見に役立ちます。

契約による設計(Design by Contract)は、Ada やEiffelなどの言語で古くから採用されてきた機能です。

開発者らは少なくとも10年前からC++へのContracts導入を提案してきました。その後、危険なデフォルト設定への懸念から、C++20では突如として削除されました。 

しかしStroustrup氏は、C++26に盛り込まれた改訂版の提案(P2900)を厳しく批判しました。  

「P2900のContractsと拡張機能は、C++の性質を変えようとするものであり、複雑さと肥大化を招くC++への存在を脅かす脅威です」。Stroustrup氏とその同僚らは、昨年8月に論文でこう記しました。 論文は、実装が雑で時代遅れであり、十分に検証されていないと指摘しています。ライブラリとして実装したほうが効果的だとも述べています。 

全員が同意しているわけではありません。C++標準化委員会のメンバーであるAndreas Fertig氏は、批判はすでに検証済みだと考えています。C++のリリースプロセスがここまで進んだ段階で提案を拒否することは、C++そのものを傷つけると主張しています。

「このテーマは何年も議論され、現在の形で何度も多数決の賛成を得てきました。『反対』票を投じたことで、主に信頼と互いへの敬意ある協力の上に成り立ってきた仕組みが揺らぎました」。Fertig氏はブログ記事でこう述べています。

もちろん、根底にあるのは、C++では開発者が意図せずセキュリティ上の欠陥を作り込みやすいという根強い批判です。この批判を受け、Rustを採用するプロジェクトも少なからず出ています(参照)。Stroustrup氏が指摘するように、新たな制御機能の追加は、C++最大の特長である圧倒的な高速性を損なう恐れがあります。 

往生際の悪い敗者

Fertig氏は、Stroustrup氏らを往生際の悪い敗者だと非難しました。

「ISO規格はどれも、妥協の産物にすぎません。誰もが時には負け、時には勝ちます」と同氏は書いています。しかし今回は「敗れた側が敗北を受け入れようとしませんでした。今後の進め方を左右する最大の問いは、グループが信頼を再構築できるかどうかです」と述べています。

Fertig氏とは異なり、オープンソースのEDG製C++コンパイラフロントエンドを保守するC++ AllianceのCEO、Harry Bott氏は、Contractsをめぐる議論がC++そのものに混乱をもたらしているとは見ていません。

「草案が差し戻されたのは、プロセスの失敗ではありません。プロセスが想定どおりに機能した結果です」。同氏はThe Registerにメールでこう寄せました。「だからといって、プロセスを改善できないわけではありません。今回の件から学び、プロセスを強化して、開発者が信頼できる形でC++が進化し続けられるようにすることが目標です」。 

今後の行方は

標準化プロセスのこれほど終盤で投票が否決されるのは、C++の歴史でも異例です。このままでは、今年中に出荷するという当初の見込みに間に合わないおそれがあります。その場合、新バージョンを「C++26」ではなく「C++27」と呼ぶことになるかもしれません。(これは非公式な呼称にすぎません。この言語の第8版が来年リリースされた場合、正式名称は「ISO/IEC 14882:2027」になります。)

ISO C++作業部会のWG21は、来週ブラジルのブジオスで会合を開き、最終決戦(confronto final)に臨みます。 

パリのコンサルティング会社Margoのソフトウェアエンジニアリングコンサルタント、Thibault Ricord-Marchal氏によるブログ記事によると、作業部会にはいくつかの選択肢があります。 

一つは、仕様からContractsを切り離し、残りのC++26を出荷する方法です。ただし、これは面倒な作業になります。Contractsを使って実施済みの多くのライブラリ強化を、元に戻さなければならないためです。

もう一つは、Contractsを別の技術仕様に移し、技術の改良作業を続ける方法です。 

あるいは、軽微な改訂を加えて再投票し、温暖なブラジルの気候が皆の頭を冷やしてくれるのを期待する手もあります。®


翻訳元: https://www.theregister.com/devops/2026/11/13/c26-stumbles-at-finish-line-over-contracts-dispute/5309526

本記事は theregister.com の記事を翻訳・要約したものです。