GCCバージョン6.1は,前回から1年以上を経た最初のメジャーリリースだ。メンテナのJakub Jelinek氏によると,新たにC++17機能やOpenMPのフルサポート,OpenACCのサポート向上など,多くの新機能が含まれている。
GCC 6.1で導入された最も重要な変更点は以下のようなものだ。
- C++コンパイラのデフォルトが
-std=gnu++98
から-std=gnu++14
に変更された。 - ロケーションの改善,ロケーション範囲,不正な識別子の提案,fix-itヒント,新たな警告など,診断機能の改善。
- オプティマイザの改善。これは手続き内(intra-procedural)最適化,手続き間(inter-procedural)最適化,リンク時の最適化など,さまざまなターゲットのバックエンドに影響する。
- C++コンパイラが拡張され,フォールド式(fold expression)や
u8
文字リテラル,入れ子になった名前空間の定義など,C++17に必要な新機能がサポートされた。さらには,公式にはC++17に含まれていない機能であるC++ コンセプト(concept)や,C++トランザクショナルメモリもサポートされている。C++標準ライブラリでも同様に,std::uncaught_exception
,std::invoke
,std::shared_mutex
などのC++17機能がサポートされた。 - OpenMP(Open Multi-Processing) 4.5仕様のフルサポート。マルチプラットフォームの共有メモリマルチプロセッシング用に設計されたAPIである。
- OpenACC 2.0aのサポート改善。異種CPU/GPUシステムによる並列プログラミングの簡素化を目的として,Cray, CAPS, Nvidia, PGIが開発したプログラミング標準である。
既存コードのGCC 6.1への移行を容易にするため,GCCチームは,予想される主な問題点とその対処方法を詳細に説明したガイドも公開している。その内容は次のようなものだ。
- 必要とする標準バージョンに対して,適切な
-std
オプションを選択すること。 - デストラクタの
noexcept
例外仕様のように,標準バージョンによって動作が異なる可能性のある機能を使用する場合は,その旨を注記すること。あるいは,ポインタが必要な場面でfalse
を使うような操作は,完全に除外すること。
GCCの最新リリースは,GNUミラーリスト内にある任意のサーバの,gcc/gcc-6.1.0
サブディレクトリから入手可能だ。
この記事を評価
- 編集者評
- 編集長対応