BT

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

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース GCC 5.1公開

GCC 5.1公開

原文(投稿日:2015/04/23)へのリンク

GNU ProjectがGCC 5.1のリリースを発表した。GCC 5最初のメジャーリリースとなる今回のリリースには,C++11/14サポートの改善,新しいlibstdc++ ABI,マシンコードJIT組込みライブラリなど,数多くの新機能と改良が含まれている。

GCC 5.1で導入された最も重要な変更点は,次のようなものだ。

  • Cコンパイラのデフォルトが,最古のANSI承認C標準であるgnu89からgnu11に変更された。

  • C++ランタイムに新しいABIが導入され,デフォルトで有効になった。これによって既存のクラスが,C++11準拠のstd::stringstd::listといったクラスに置き換えられた。コード全体を再ビルドする開発者には影響ないが,旧ABIを使用したサードパーティライブラリを利用する開発者は,-D_GLIBXX_USE_XCC11_ABI=0を指定する必要がある。新しいlibstdc++はデュアルAPIを提供する。これにより,古いバージョンのGCCでビルドされたコードも,最新のlibstdc++で動作可能になる。ライブラリやプラグインのプロバイダもこれと同じデュアルABIコンセプトを選択可能なため,開発者によるソフトウェア再ビルドを防止することができる。

  • C++11およびC++14サポートの改善: linstdc++C++11の完全なサポートと,C++14の試験的サポートが追加された。さらにG++でも,可変テンプレートや非静的データメンバの初期化子,サイズ指定のアロケーション解放といった,C++14の多くの機能をサポートしている。

  • オプションとして,Go 1.4.2の完全な実装が提供されている。

  • GCC 5は共有ライブラリとしてビルドすることができる。これはlibgccjitと呼ばれ,マシンコードへのJITコンパイラとして組み込むためのものだ。このオプションは現在は実験段階とされているため,“まだ実務で使用するべきではない”が,カスタム言語用のマシンコードコンパイラをPythonで構築するなど,さまざまな興味深い用途に使えそうだ。GCCランタイムライブラリに適用されるライセンス例外がlibgccjitにも同じように適用されるのかどうか,GCC 5.1の公式ディストリビューションからは明らかになっていない。ランタイムライブラリ例外は,GCCライブラリとリンクされたプログラムをGCCのライセンスであるGPL 3下でリリースするという必要なく,製造および配布可能にするためのものだ。

  • 最後に,GCC 5.1では,同じ内容の関数を新しいIdentical Code Folding(ICF)に統合する,書き込みのみの変数を検出して最適化で削除する,メモリ使用量とリンク時間を短縮するなど,数多くの最適化処理が追加されている。変更点に関するより詳細な情報は,別途定義されている。

GCCの主要な競合相手はLLVMで,現在のバージョンは3.6である。GCC 5のプレリリースバージョンとLLVM 3.5を比較するため,Phoronixが一連のベンチマークを実行した結果,GCCがパフォーマンスで勝っていたC-Rayマルチスレッドレイトレースなど一部の例外を除けば,どちらもほぼ互角であることが分かった。その一方で,コンパイル時間に関しては,LLVMのClangがGCCを上回っていた。2つのコンパイラの最大の相違点は,しかしながら,間違いなくそのライセンスモデルにあるだろう。GCCがGPL3下でライセンスされるのに対して,LLVMにはそれよりもMIT/BSD的なライセンスが適用される。

この記事に星をつける

おすすめ度
スタイル

BT