パスワードを忘れた? アカウント作成
122870 journal

okuの日記: C++0x からコンセプトが削除

日記 by oku

今し方、The Artima Developer Community 経由で知ったのですが、7/13 の投票でC++0x 規格からコンセプトが削除されていたとのことです。

反応が遅いよ、と言う人が大半な気もしますが、自分的にはこれはかなりの衝撃で…いやまあマルチメソッドのように次の次へ持ち越すものが一つ増えるだけと思えばいいのかも知れませんが。

取り敢えず、今、原文読んでます。

2009-07-22 追記:

informIT記事を和訳しました。

例によって、全く当てにならない超訳ですが、時間のない人は参考まで (いつも通り、誤訳の指摘は歓迎です)。

C++0x からコンセプトが削除

最終更新 2009/07/17

2009/07/13(月)、フランクフルトでの C++ 標準委員会の会合で、コンセプトが劇的に否決された。 このショッキングなニュースは、多くの疑問と不安を巻き起こしている。 間違いなく、ここ数週間〜数ヶ月の間、様々なフォーラムで議論のタネになるだろう。 とは言え、私が答えを出したい火急の問題は次の三つだ: なぜコンセプトは失敗したのか? コンセプトが削除されたことで、C++0x にどんな影響があるのか? コンセプトは近い将来復活するのか?

不吉な前兆

最初にこのニュースを聞いた時、とても信じられなかった。 コンセプトは 1998 年以来、最も重要な C++ のコアに対する追加だと考えられていたからだ。 過去五年間、全ての委員会の会合で途方もない労力と議論がコンセプトに捧げられていた。 何ダースもの公式文書とチュートリアルと記事 -- それら全てがコンセプトの説明と伝道に捧げられていたのだ -- それがゴールラインのほんの手前で、思いも寄らず劇的に否決されてしまった。 なぜ委員会のメンバー達は変心したのだろうか?

最初の黄信号はかなり前のことだ。 当初、コンセプトは標準ライブラリに統合されると思われていた。 ところが、C++0x 委員会のドラフト (2008年9月に承認された) はコンセプト化された標準ライブラリを含んでいなかった。 委員会のメンバーは、実世界での経験を経ないまま、そのような急進的な変更を標準ライブラリに加えるには時期早尚だと主張したのだ。 それはそれとしても、コンセプトには未解決の問題があり過ぎた。 委員会は、標準ライブラリをコンセプト化しないまま暫く放置しておく代わりに、妥協策としてコンセプトの改善を続けることを決定した。 これは不吉な兆候だった -- もし、委員会がコンセプト化された標準ライブラリに慎重なのだとすれば、どうして Joe Code (*1) のコンセプトを信頼できるというのか?

二つの強い底流がコンセプトの基盤全体に衝撃を与え、傷つけていた。 第一に、コンセプトの実現可能性と有用性への懐疑的な見方が、コンセプトの提案に対する反発を強めていた。 一部の人々は、コンパイル時と実行時のオーバーヘッドへの懸念を表明した。 第二に、コンセプトの提案者達が必死になってコンセプトを改善し改修していた。 とどめが、6月の Bjarne Stroustrup の論文「Simplifying the Use of Concepts (PDF 注意)」だった。 これはコンセプトに関する労作であったが、一方で皆を恐怖に陥れた。 一般的な感覚からすれば、コンセプトは崩壊したように感じられ、委員会はそれを修正するのに正しい方向が何なのか確信を持てなくなった。 コンセプトは、本来 C++ を「単純化」するために設計されたはずだという考えは、委員会のメンバーの臨界量を超え、2009年7月にコンセプトに別れを告げるときだと合意するに至った。

今後の方向

本稿執筆時点で、委員会がどのような対策をとるかは明らかでない。 コンセプトの完全なオーバーホールは一つの可能性ではあるが、ほとんどあり得ないだろう。 それには更に五年を要するかも知れず、更に、コンセプトの再設計が他の問題を引き起こさないとは誰も断言できないからだ。 二つめのアプローチは、劇的に縮小・希釈されたコンセプトの提案のために扉を開けたままにしておくことだ。 三つめのアプローチは、現状のコンセプトの提案を更に改善するというものだが、C++0x に統合されないことは周知の通りだ。 私は次のようになると思う -- コンセプトは死んだ。 永遠に。 コンセプトの提案は万事窮したのであり、その理由は委員会が既存の慣習 (世間一般でされていること) を標準化するのではなく、代わりに巨大で、複雑で、意見の分かれる機能をゼロから作り上げようとしたからだ。 そういった一般的でない方法を C++ へ追加する仕樣は失敗すると歴史が示している。 例外の仕樣export された template がその例だ。

含蓄と分析

この段階でコンセプトの削除が C++0x に与える影響を伝えるのは難しい。 他の多くの機能がコンセプトを前提としているため、この影響は明らかに甚大だ。 この数週間で、委員会は全ての未解決の提案と委員会ドラフトを精査してこの決定の影響を調べる必要があるだろう。

C++0x のプログラミングと設計はコンセプト抜きでどのようになるだろうか? あなた自身は更に何年も判読不能な template のコンパイルエラーにつきまとわれる。 加えて、type traits が再びホットな必需品となるだろう。 現時点では、type traits が template のコンパイル時制約を強制できる、実証された極少数のテクニックの一つということになる。 教育学的には、C++ は教えるのがちょっとだけ簡単になるだろう。

コンセプトの削除は、その他の急進的な変更への道を拓くものだ。 もしコンセプトが削除できたのなら、その他の「安全な」機能も聖域ではなくなる。 そう、そのような機能の実名を挙げようとは思わないが、そう言うだけで十分だ: 委員会ドラフトには、再考あるいは棄却が必要な大量の機能がある。

コンセプトの崩壊は、基本的な問題を解決するために善かれと思ってなされた試みの、悲しい終焉のように見えるかも知れない。 だが、咽び泣く必要はない。 この顛末は、もしそれが必要なら、委員会が辛い決定をも恐れないことを示したのだ。 また、全てのプログラミング言語の設計者に対しても、良い教訓になる: 自分自身の提案に夢中になるな、ということだ。 全ての新しい提案は最初のうちは巧妙で有望に思えるものだが、何回かの試行と再設計の後で、プログラミング言語の自然な成長と発展を阻むように簡単に肥大化してしまうこともあるのだ (それ、なんて namespace?)。 もし既に C++ でコンセプト (委員会のお手製ではなく「市場の」) を使っていたとしたら、それはまず動くことが必要で、その後、委員会はその結果を祝福しただろう -- それを採用するのなら。 その反対は失敗するためのレシピなのだ。

(*1) Jargon File によると、研ぎすまされていて修正できそうもないコードだそうです

最後の方は力尽きていて日本語が硬いと言うか、意味不明瞭かも。 どっちにせよ 4:00 過ぎて眠いので、もう寝ます... 後で文面を訂正するかも知れません。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

ソースを見ろ -- ある4桁UID

読み込み中...