2009-07-20 5 views
8

2009年7月C++0x meeting in Frankfurtでは、C++ 0xからremove conceptsに決定されました。個人的には、私は失望していますが、C++ 0xよりも実装可能なC++ 0xを持っています。彼らは後日追加されると述べた。C++ 0xには概念がありません。意見ですか?これはどのようにあなたに影響を与えますか?

この決定/問題に関するご意見はありますか?どのようにあなたに影響を与えますか?

+3

意見を求める質問は、本質的に主観的です。私は閉会に投票するだろうが、今日私の限界に達した。 – jjnguy

+0

ABIのような、よりタイムリーなものに取り組むことができますか?特に、標準C++ライブラリを使用する場合は? –

+0

投票に参加しました。私はコミュニティウィキとしてこの実用的なものを見ていない - ここに誰もそれについて行うことができるものは何もない。これは誰もが一緒に住んでいなければならないものです。その上、SOは物事を議論するためのフォーラムではありません。 –

答えて

8

概念の目的は主に、時間のエラーメッセージをコンパイル向上させるためにあったように個人的に私は、除去のあまりに不幸ではないよ、ジェレミーSiek、コンセプトの提案の共著者の一人として、(http://lambda-the-ultimate.org/node/3518#comment-50071)を書き込みます。

コンセプトの提案は(C++ に任意の拡張子が本当に今まで完璧にすることができますか?) 完璧ではありませんでしたが、それは 非常に使いやすく、言語、大幅 減少するであろう 延長へ 役立つ拡張機能を提供しているだろう悪名高いエラーメッセージ テンプレートの現在のユーザー ライブラリに悩まされています。

もちろん、コンセプトにはコンパイラが短いエラーメッセージを表示できるようにするよりも多くの目的がありました。

EDITは:

Q:ハーブサッターはまた彼のblogに書き込み、このC++ 0xのの一つの大きな 機能はなかったですか。

A:いいえ。コンセプトは素晴らしいが、ほとんどのユーザーのための だろう、存在または概念の 不在はエラー メッセージの品質を除く C++ 0xで自分の経験に何 違いをしないでしょう。

Q:言語、 に主要な 新しい表現力を加えるので、有効 プログラムの主要な新しい種類やスタイルのプログラミングについての概念はありませんか?

回答ありがとうございます。コンセプトはほぼ です。エラーメッセージは です。

6

私は彼らを楽しみにしていました。主に、コンパイルが失敗したときのエラー報告を改善するためです。あなたのダム・エラーを解明するために1000文字の文字列を読み取るようなものはありません。

+0

私も。これは悲しいことです:( – GManNickG

2

まだコンセプトには関わりませんでした。しかし、私が気づいたのは、彼らは一般にかなり冗長であったということでした。私はSTLライブラリでそれらを望んでいないと思う。ライブラリを知っているので、コンパイル時のエラーを簡単に解析できます。概念の必要はありません。しかし、コンセプトは自分のクラスを記述するのがいいでしょう。そのため、同僚はそれらをより早く学び、誤用を避けることができます。それぞれのコンセプトは、型の使用を制限する制約を理解するまでのところです。誰かが学ばなければならない新鮮なインターフェースを作成するときにはうれしいでしょう。

4

私はそれらがリストから落ちるのを見て悲しいです。

個人的に私は、プリミティブ、構造体またはクラスであるかどうか、私が知られているインタフェースに従うのが好きです。このようにして、私はどのように型を使用できるのか、型を提供するために実装しなければならないことを知っています。

これは、標準のオブジェクト指向プログラミングではすべて簡単に達成できます。しかし、私の意見では、技術的に汎用的なプログラミングは強く型付けされていますが、型定義はオブジェクト指向を提供するというインタフェースの概念を失います。実際にジェネリックプログラミングでは、ダイナミックな型付けのようなものですが、インターフェイスの観点からはコンパイルタイプで解決されます。

たとえば、イテレータをアルゴリズムに渡すには、いくつかの演算子を用意する必要がありますが、演算子が何をすべきか、またはそれらの契約が何であるかを指定するインターフェイスはありません(ドキュメントのみ)。 operator++()operator*()がある場合、コンパイルされますが、インターフェイスがOOで与える同じタイプの保証はありません。

コンセプトはタイプを汎用プログラミングに持ち込み、確実性インターフェイスがOOにもたらすと、より良いコンパイルは単なるボーナスです。

私たちはすべてC++のプログラマーであり、私たちは非常に賢明であり、ドキュメントを読んで、演算子のオーバーロードと汎用プログラミングの微妙な点を理解しています。しかし、言語が私が頼りにすることができ、コンパイラがテストできることを保証するとき、私は解決するために支払われた問題を解決するより多くの脳の力を使うことができます。

+0

+1:良い点!コンセプトマップを見ると、「外部インターフェイスの実装」も汎用プログラミングにもたらされます。 – mmmmmmmm

+0

インターフェイスは、あなたが頼りになることを保証しません。あなたが期待しているように実際に動作するかどうかについては何もありませんが、とにかく、これが削除されたのはまさにその理由でした。この種の明示的なインタフェースは、悪いものとみなされました。実際にはジェネリックプログラミングは雑用になりますが、自明ではないケースでは事実上不可能です。 – jalf

1

私は非常にコンセプトが好きです!外部定義(コンセプトマッピング)によって非常に異なる型を同じように動作させる可能性は、非常に強力で便利な機能です(特に、コンパイル時に発生するため、実行時のパフォーマンスには影響しません)。

すべての便利な機能を直接型に実装し、.NETで行われたようなインターフェースを介してアクセスするよりも強力で優れていると思います。これは後で拡張性を許しません(.NETは3.0以降の拡張メソッドを知っていますが(3.5、確信はありませんが、同じではありません)。

エラーメッセージを改善することは、概念がもたらすもう1つの(そして元の)大きな改善です。

しかし、コンセプトについて読んだときの私の最初の考えは、これはGCCとMSVCがサポートするまでLOOOOONG時間かかるでしょう。

今後の標準から削除することが理にかなっていると思います。しかし、私が望むのは、コンセプトを含むポストC++ 0x標準のための機能の固定された合意です。 これにより、コンパイラベンダーはC++ 2x標準をよりよく準備することができます。

私は、これまでのところ未来のコンセプトを見ることを本当に願っています。

1

彼らは正しい判断を下したと思います。言語に追加されたコンセプトの高品質な実装を見たいと思っていますが、スペックは間違った方向に向かい、ユーザーにはコンセプトマップを明示的に指定するのに負担がかかっていました。 Stroustrupの論文はこれにいくつかの修正を提案しましたが、それはプロセスの後半でかなり急進的な変化になると私は思います。それをテストするコンパイラはありません。

要約すると、最終的に指定された概念は大きく後退し、ジェネリックプログラミングを妨げ、おそらくC++コミュニティを壊してしまい、C++ 03を抱えるプログラマーの大きなグループとなりました。

私が見る限り、Stroustrupによって提案された「固定」の概念は、大丈夫ですが、これらの変更をすばやく採用することは危険です。 (それ以上の遅れはないと私は確信していません)

正直言って、私は彼らが安全に遊んでいたのを見てうれしく思います。私たちは今までコンセプトなしで生き残ってきました。私は5年も経なければ生活することができます。

1

非常に悲しいです。 C++にコンセプトを導入すると、そのタイプシステムはHaskellのタイプメーターとほぼ同じレベルになります。スピードに最適化された言語、エスケープ通気口を使用しない限り厳密にタイプセーフです。 (まだまだ速い!)。また、STLとBoost(および一般的なテンプレートライブラリ)の長年にわたる問題は、C++ 03テンプレートの怠惰な "コンパイル時のダックタイピング"の性質とコンパイラの結果的なトラブルのために使いにくい問題を修正することになっていましたエラー報告。

1

私はこれも悪い呼びだと思って、C++0xは削除のために悪くなるでしょうが、ちょうどStroustrupの読書を終えたばかりですSimplifying the use of Concepts私は気が変わりました。私はコンセプト提案がそれほど複雑ではなかったことを知らなかったし、言語に追加される前によく考えられることは良いことだと思う。たとえStroustrupがコンセプトを維持するために宣言していたとしても、現在のコンセプトは良いものよりも害を及ぼしますが、BSは解決策を提案しているにもかかわらず、

1

私は悲しいです。

私はConceptGCCをチェックアウトしています。それは素晴らしいです!私はすでにこれを使っていくつかの簡単なライブラリを書いていますが、私は、より多くのコードを書いたり、コンセプトの抽象化の力を考えるのに苦労したりするようないくつかの欠点があります。 stdの概念ライブラリは実際に問題を起こすので、標準的なものも含めて誤解しているだけです。私は、来るべき標準は概念の文法を標準化し、それをどのように使うべきかのヒントを提供すべきだと思います。

関連する問題