[[PageNavi(NavigationList)]] == インテル コンパイラーで試す次世代C++規格「C++0x」 == インテル コンパイラーではOpenMP 3.0やC++ラムダ関数、並列コンパイルといった、新規格や最近注目されている機能がいち早く取り入れられている。本記事では、インテル コンパイラーが採用した新規格について解説する。 インテル コンパイラーの特徴の1つに、新しい技術や標準規格への素早いサポートが挙げられる。たとえば最新の[http://www.xlsoft.com/jp/products/intel/compilers/index.html?sf0928 インテル コンパイラー 11.1]では、プログラムを簡単に並列化できる新たなキーワードが追加されているほか、11.0からの機能として現在策定中のC++の新規格「C++0x」や、新たな並列化基盤「OpenMP 3.0」のサポートが追加されている。本記事ではこれらの機能について、簡単ではあるがその概要と使用例を紹介しよう。 === C++ 0xのサポート === C++は1983年代に開発されて以来、しばらくは公式な標準化規格が存在せず、各コンパイラメーカーにより独自に拡張が加えられていった。そして1998年、ANSIとISOによってやっと「ISO/IEC 14882:1998」として標準化規格が制定された(C++98とも呼ばれる)。そして2003年にはこの訂正版「ISO/IEC 14882:2003」(C++03)がリリースされた。現在のほとんどのC++コンパイラはこの規格C++98およびC++03のほとんどの機能をサポートしている。 一方、最近では関数型プログラミングやジェネリックプログラミングといった新しいプログラミングパラダイムが広く知られるようになり、これらに対応したC#やObjective-Cといったプログラミング言語が登場するようになった。そして、C++もこれらの影響を受け、C++98/03を拡張する新たな標準化言語仕様が策定されている。これはISO/IECの[http://www.open-std.org/jtc1/sc22/wg21/ C++標準化委員会(JTC1/SC22/WG21)]によって行われており、2000年代中には策定が完了する見込みだったことから「'''C++0x'''」と呼ばれている(ただし、現状では2009年中の標準化規格の発行は難しい状況で、正式な発行は2010年以降になる見込みである。これについてC++の開発者であるBjarne Stroustrup氏は、「[http://www.research.att.com/~bs/C++0xFAQ.html 0xの『x』は16進数で考えてほしい]」と述べている)。 C++0xのワーキングドラフトや議論については、[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/ C++ Standards Committee Papers]ページから参照できる。現在の最新のワーキングドラフトは、2009年6月22日に公開された「N2914」という文書である。また、問題点リストなどの文章もここで入手できる。それぞれかなりのボリュームになっており、読破するのは容易ではないが、興味のある方はぜひご一読をおすすめしたい。 さて、インテル コンパイラー 11.0以降では、このC++0xの一部が先行して採用されている。これらの機能はデフォルトでは利用できないものの、「/Qstd=c++0x」(Windows版)もしくは「-std=c++0x」(LinuxおよびMac OS X版)というコンパイルオプションを指定することで利用が可能だ。また、Windows版でVisual Studio向けの統合機能を利用している場合では、プロジェクトの設定画面からGUIでもC++0xの利用のOn/Offを設定できる('''図1~3''')。 [[Thumb(b5f0ae0a2a1bdc60378fff240f0874aa.png, size=large, caption=図1 デフォルトの状態では、後述する「auto」やラムダ関数を利用するコードはコンパイルエラーとなる)]] [[Thumb(731b0fa2762fc6f5131b0e805e0202ee.png, size=large, caption=図2 Visual Studioプラグインを利用することで、Visual Studioのプロジェクト設定画面内でC++0xの使用の有無を指定できる)]] [[Thumb(f7194999189b558bebed97b2d4e2f06e.png, size=large, caption=図3 「Enable C++0x Support」を「Yes」にすることで、C++0xの機能を用いたコードもコンパイル可能となる)]] [[PageNavi(NavigationList)]]