web-dev-qa-db-ja.com

「gc」と「gccgo」の主な違いは何ですか?

2つの一般的なGoコンパイラ、「gc」と「gccgo」の主な違いは何ですか?パフォーマンスを構築しますか?実行時のパフォーマンス?コマンドラインオプション?ライセンス?

どちらが最良かについての意見を探しているのではなく、違いの基本的な概要を探しているだけなので、どちらが自分のニーズに最適かを判断できます。

73
Flimzy

詳細については、「 gccgoのセットアップと使用 」で確認できます。

gccgo、Go言語のコンパイラ。 gccgoコンパイラは、GCCの新しいフロントエンドです。
gccgoはgcコンパイラではないことに注意してください

GCC 4.7.1のGccgo 」(2012年7月)

Go言語は常に、実装ではなく仕様によって定義されています。 Goチームは、その仕様を実装する2つの異なるコンパイラ、gcとgccgoを作成しました。

  • Gcは元のコンパイラであり、goツールはデフォルトでそれを使用します。
  • Gccgoは、異なるフォーカスを持つ異なる実装です

Gcgoと比較して、gccgoはコードのコンパイルが遅くなりますが、より強力な最適化をサポートしているため、gccgoによって構築されたCPUにバインドされたプログラムは通常より高速に実行されます。

また:

  • Gcコンパイラは、最も一般的なプロセッサであるx86(32ビットおよび64ビット)およびARMのみをサポートします。
  • ただし、Gccgoは、GCCがサポートするすべてのプロセッサーをサポートします。
    これらのプロセッサのすべてがgccgoについて完全にテストされているわけではありませんが、x86(32ビットおよび64ビット)、SPARC、MIPS、PowerPC、さらにはAlphaを含む多くのプロセッサがテストされています。
    gccgoは、gcコンパイラがサポートしていないオペレーティングシステム、特にSolarisでもテストされています。

標準のGoリリースからgoコマンドをインストールする場合、-compilerオプションgo build -compiler gccgo myprogを介してgccgoを既にサポートしています。


要するに:gccgo:より多くの最適化、より多くのプロセッサ


ただし、 コメント by OneOfOnesource )のように、gccgoでサポートされているgoと最新のgoリリースとの間にはしばしば非同期があります。

gccgoはバージョンgo v1.2までしかサポートしていないため、1.3/1.4(tip)で新しいものが必要な場合はgccgoを使用できません。 –

GCCリリース4.9 には、gccgoのGo 1.2(1.3ではない)バージョンが含まれます。
GCCプロジェクトとGoプロジェクトのリリーススケジュールは一致しません。つまり、開発ブランチでは1.3が使用可能になりますが、次のGCCリリース4.10にはGo 1.4バージョンのgccgoが含まれる可能性があります。


twotwotwo 言及 コメント内Brad Fitzpatrickのプレゼンテーションのスライド

gccgoは非常に優れたコードを生成します
...エスケープ分析はありません:多くの小さなalloc +ガベージでパフォーマンスが低下します
... GCは正確ではありません。 32ビットには不適切です。

twotwotwoが追加します:

別のスライドでは、非gccgo ARMコード生成は不安定です。
これがプロジェクトにとって興味深いオプションであると仮定すると、おそらくターゲットアーキテクチャのユースケースのバイナリを比較してください。


peterSOcommentsGo 1.5 now(Q3/Q4 2015)の意味:

コンパイラとランタイムは完全にGoで書かれています(小さなアセンブラを使用)。
Cは実装に関与しなくなったため、かつてディストリビューションの構築に必要だったCコンパイラはなくなりました

「Go in Go」スライド 言及してください:

Cはなくなりました。
サイドノート:gccgoは引き続き強力です。

90
VonC