BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース 新しいGCC 8.1がC++2aのいくつかの機能をサポート

新しいGCC 8.1がC++2aのいくつかの機能をサポート

原文(投稿日:2018/05/07)へのリンク

読者の皆様へ:ノイズを減らすための一連の機能を開発しました。関心のあるトピックについて電子メールとWeb通知を受け取ることができます新機能の詳細をご覧ください。

GCC 8.1は、GNU Compiler Collectionの最新メジャーリリースであり、今後のC++2a標準の一部を実験的にサポートしている。さらに、GCC 8.1はプロファイル駆動型の最適化を改善し、Goサポートをバージョン1.10.1まで提供する。

GCC C++フロントエンドは、既に事前承認されているいくつかの新しいC++機能を有効にするために、-std=c++2a-std=gnu++2aの2つの新しいフラグを提供する。新しい機能には、指定イニシャライザビットフィールド用のデフォルトメンバイニシャライザプリプロセッサによるカンマ消去のための__VA_OPT__ラムダ[=, this]キャプチャ単純な暗黙のラムダキャプチャなどがある。GCC 8のC++2a機能の完全なリストについては、C++のステータスページをチェックしてください。

これに加えて、C++フロントでは診断が改善され、その改善には、ロケーションとロケーション範囲の改善や複数の新しい修正ヒントが含まれる。たとえば、コンパイラでは、定義する前にマクロを使用するとき、クラスまたは構造体のプライベートフィールドにアクセスしようとするとき、古いスタイルのキャストをstatic_castconst_castreinterpret_castで置き換えることができるときに、ヒントを提供できるようになった。

GCC 8.1はプロファイル駆動型の最適化を大幅に改善している。その最適化では、コードのどの部分を最適化するかを決定するために、インスツルメントコードのパフォーマンスをプロファイリングした結果を使用する。たとえば、GCCはデフォルトでx86ターゲットの機能をホット領域とコールド領域に分割するようになった。ホット機能はより積極的に最適化され、同じ領域に配置することで局所性を改善している。その上、GCCは、あるポイントで未定義の動作をトリガするときのような、プログラムの正当な実行中に実行されないコードを検出できるようになった。

最適化については、-floop-unroll-and-jam-floop-interchangeのような新しいループオプティマイザが追加された。-floop-unroll-and-jamでは、外側ループのアンロールと内部ループのコピーの組み合わせを実行する。-floop-interchangeでは、ループネスト内でループを交換してデータのローカリティを改善する。そして、-floop-nest-optimize-ftree-loop-distributionを含むいくつかの既存のオプティマイザが改善された。これらの最適化はすべて、-O3フラグを使用するとデフォルトで有効になる。

前述のように、Goの最新の公式バージョンであるGo 1.10.1の完全な実装のおかげでGoサポートが改善された。さらに、ガベージコレクタは完全に並列実行可能となった。

最後の注目点として、GCC 8.1では、Armv8.4-Aアーキテクチャもサポートを開始し、-march=armv8.4-aオプションを指定することで有効化される。また、Scalable Vector Extension (SVE)は、 Armv8.2-Aアーキテクチャおよびそれ以降のバージョンに対する拡張オプションとしてサポートされるようになった。

GCC 8.1には、本稿に記載できる、多くの興味深い変更がある。詳細をすべて知るには、公式のリリースノートをお見逃しなく。

Rate this Article

Adoption Stage
Style

この記事に星をつける

おすすめ度
スタイル

BT