C ++標準委員会はどのように設計のアイデアをテストしますか?


29

C ++委員会は、新しい標準をリリースする前に、何らかのプロトタイプコンパイラで新しい設計仕様をテストしますか?それとも、大きなコンパイラーがそれを実装するまで、事実上、理論上のみである標準をリリースしますか?



4
Boostは、多数のライブラリ改善のプロトタイプとして機能します。例えばboost::shared_ptr== std::shared_ptr
MSalters

6
単純な「彼らはしない」と思っていた。
Sebb

@MSalters:Boostは、かなりの数のコア言語の改良のプロトタイプとしても機能しました(例、boost.lambda=> C ++ 11ラムダ式)。
ジェリーCo

回答:


26

C ++標準委員会は、条例や規則があるが、これらのほとんどはそれほど提案を提出するためにどのように組織の構造、投票、標準を公開、などと標準自体の技術的な詳細について、またはどのようにそれを周りに集中していますテストされる場合があります。

私が知る限り、機能またはその設計を「テスト」するための正式な要件はありません。C ++は、参照または「プライマリ」実装(Microsoft CLR、Oracle JDK、Zend PHPなど)がないという点でも多少独特です。ただし、委員会のメンバーは、言語とコンパイラの実装に関する深い知識を持つ多くの組織で構成されています。たとえば、その前のリンクをたどると、C ++コンパイラを高く評価しているMicrosoftとIntelの代表者が表示されます。Red HatおよびGCCに貢献している他のいくつかの企業も関与しています。

新しい機能を提案するとき、委員会のメンバーは、それが実行可能か、他の機能と競合するか、構文を不必要に複雑にする方法で文法が曖昧なるかについて、すでにかなり良い考えを持っています。(C ++の文法についての良い質問です

短い答えは「いいえ、委員会はプロトタイプを使用して設計をテストする必要はありません」です。ただし、委員会のメンバーはC ++の専門家であり、ほとんどのプログラマーが理解していないレベルですべての詳細を理解しているため、それほど必要はありません。これらの人々は、言語理論とコンパイラ設計の専門である言語アーキテクトです。

コンパイラベンダーがプロセスに関与していることを考えると、1つ以上のベンダーが新しい機能のプロトタイプを作成する可能性がありますが、ここでも正式な要件はなく、公開されているドキュメントで読んだものでもありませんC ++委員会。

また、非常に保守的な傾向があり、リスクが高いと判明する可能性のある大量の新機能を指定せずに、現実世界で需要のある新機能を徐々に追加します。実際、近年では、プロプライエタリな拡張機能として存在する新しい機能や、現実世界で既に機能しているオープンソースライブラリが追加されています。たとえば、C ++ 11およびC ++ 14にはBoostの一部が組み込まれており、これは複数のコンパイラーおよび実行環境で実世界で既にテストされています。すでにテストされているものをテストする必要はありません。


5
ConceptGCCConceptClangは、複雑な言語機能のプロトタイプを作成して実際の経験を積むために明示的に作成されたコンパイラ(またはコンパイラのフォーク)の2つの例です。概念は、C ++で徹底的な言語機能がどのように設計されているかの例でもあります。1998年以来、概念はC ++テンプレートについて話す非公式のアイデアとして、2006年にはBjarne自身による提案言語機能として、またConceptGCCでも実装されていますそれ以来。彼ら
ヨルグWミットタグ

3
…最終的にC ++ 17になります。つまり、実装として約10年、アイデアとして20年成熟します。
ヨルグWミットタグ

2
これはほとんど間違っていると思います。通常新機能は最初に実装する必要があります。一度これが起こらなかったとき、私たちはエクスポートを得ました。
isanae

5
最後の段落は(簡単に言えば)ナンセンスです。C委員会は非常に保守的ですが、C ++はあらゆる種類の新しいものを常に追加します。C委員会が言語を混乱させるか、人々が解決したい問題を実際に解決するかについてはほとんど考慮しません。
R ..

1
@R ..私は同意しません。C ++ 11は異常でしたが、すでに存在していた多くのものが含まれていました(たとえば、Boostコメントを参照)。C ++のほとんどの期間、非常にゆっくりと進化してきました。これは、多くの開発者がこの言語に関して抱えている大きな不満の1つです。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.