2011-02-11 6 views
7

ここに私のジレンマがあります:私はラムダが本当に好きで、Boost.FusionとPhoenixをたくさん使っています。彼らはかなり成熟していて、多くのコンパイラでうまくいきます。C++ 11ラムダを今使用するべきですか?

C++ 11ラムダはどうですか?彼らは本当に素敵で、はるかに使いやすく、代替手段を増やしました。最近のICCとGCCコンパイラがそれらをサポートしています。しかし、XLとSunのコンパイラはもちろん、ICC 9.xやGCC 4.1以前のシステムもたくさんあります。これらのコンパイラはラムダをサポートしていますか?

古いシステムでコードが拒否されないように、おそらく私はC++ 11の機能を使用するのを待つべきだと思う傾向があります。どう思いますか?古いコンパイラが消えるか、まさにそれをやるまで待ちますか?

+0

@ジャガナート - これまでに標準化*完了予定ですか?古い "C++ 0xは16進数である"という冗談がありましたが、私が以前報復で冗談を言っていたように、0xが16進数であれば暗黙の20もあるので、8105まで与えます。かなり前に。 – Steve314

+0

@スティーブ:私たちはマドリードでの委員会会合の次の月を知っておくべきです。 –

答えて

13

C++ 11ラムダをサポートしていないコンパイラを使用してコードをコンパイルできる必要がありますか?

もしそうなら、それらを使用することはできません(明らかに)。そうでなければ、それらを使用しない理由はあまりありません。

C++ 11のラムダ式の仕様にはほとんど変更がありません。そのため、今では使用するリスクはほとんどありません。コンパイラのバグは間違いありませんが、ほとんどの場合、コンパイラのバグはほとんどありません。

ラムダ式をサポートする複数のコンパイラの最新バージョンでサポートされていない唯一のラムダ関連の唯一の機能は、キャプチャレスラムダを暗黙的に関数ポインタに変換できる去年3月に追加されたものです。 Visual C++ 2010とIntel C++ 11.1ではこれがサポートされていません(テストするためのIntel C++のそれ以降のバージョンはありません)。ただし、Visual C++ 11は暗黙の変換をサポートしています。

+0

原則としてはい、それは今から1-2yかもしれません。さらに、新しいXLコンパイラを購入する必要があります。そして、IBMが専門のコンパイラ(BlueGeneなど)の一部をアップグレードするかどうかわからない – Anycorn

+2

@aaa:ラムダを使用した報酬に対して明日のコンパイラで作業するためにポートコードにかかるリスクをバランスさせる必要がある今日あなたのコードの中の式。私はあなたの状況について、それがどのようにうまくいくかを知るには十分なものではありません。結局のところ、あなただけがその決定をすることができます。 –

5

複数のコンパイラを目指していますか?それから、いいえ。あなたが目指しているコンパイラを正確に知っていて、同じ方法で構文を処理したら、新しい機能を使用してください!

1

あなた自身のコードでは、絶対に行ってください。実際、素晴らしいアイデアです。

作業のために、stackoverflowは質問するのに適切な場所ではありません。あなたが仕事場の意思決定者でない限り、あなたのコンパイラはあなたが話していることを知っています。この場合、私はあなたがすばらしいことをお勧めします。

3

私の見解では、ライブラリコードを作成している場合は、おそらく待つべきです。つまり、オープンソースの配布や市販のクロスプラットフォームパッケージでのライブラリのバンドルをしたいのであれば、lambdaのコンパイラサポートがどのように利用可能になり、どのように動作するかをほとんど制御できません。幸いなことにラムダ式は、大部分は構文的な砂糖についてです。彼らは伝統的なファンクターよりも多くの機能を提供せず、単にそれをもっと良くローカライズするだけです(もちろん、私は間違っているかもしれませんが、ラムダの知識はかなり浅いです)。しかし、通常、ライブラリは実装の醜さを隠すためのものです。また、ラムダをサポートしていないコンパイラでこのライブラリを使用できるようにする必要がある場合は、代わりに移植可能な実装を提供する必要があります。ライブラム(ラムダを使用してライブラリをより簡単に、より明瞭に、より直感的に使用する場合など)で、効率(コンパイル時間または実行時間)またはユーザーエクスペリエンスのいずれかでラムダを使用することで明らかな利得が得られない限り、 )、それはおそらく努力の価値がありません。

しかし、ユーザー側のコードでは、ソフトウェアのターゲットプラットフォームおよび/またはコンパイラをより簡単に制御できます。その場合、使用することを期待しているすべてのコンパイラがlambdasをサポートしていれば、ナットしてください!

今、哲学的なポイントは、人々がそれらに準拠するための基準です。それにはもちろん、コンパイラを作る人だけでなく、それらを使用する人も含まれます。人々がラムダサポートを必要とする素敵なライブラリやソフトウェアを書いてくると、それらを使いたい人はコンパイラメーカーに不平を言ってサポートを追加し、ラムダを使うよう動機づけます。ローリングする。

最後に、この新しい標準が掲げている話題の量と、リリースを待っている間に構築されてきた興奮を判断することによって、プログラマはこの標準を「標準」にすばやく変えることができると思います。生き続けるために従わなければならない。

+0

はい、そうです。ラムダ式は完全に構文的な砂糖です。 –

関連する問題