2つの人気のあるGoコンパイラ「gc」と「gccgo」の主な違いは何ですか?ビルドパフォーマンス?実行時のパフォーマンス?コマンドラインオプション?ライセンス?
私はどちらが最適かについての意見を探しているのではなく、それらの違いの基本的な概要だけを探しているので、自分のニーズに最適なものを決定することができます。
回答:
詳細については、「gccgoの設定と使用」をご覧ください。
gccgo、Go言語用のコンパイラ。gccgoコンパイラはGCCの新しいフロントエンドです。
gccgoはgcコンパイラではないことに注意してください
「GCC4.7.1のGccgo」(2012年7月)で説明されているように
Go言語は、実装ではなく、常に仕様によって定義されてきました。Goチームは、その仕様を実装する2つの異なるコンパイラーgcとgccgoを作成しました。
- Gcは元のコンパイラであり、goツールはデフォルトでそれを使用します。
- Gccgoは、焦点が異なる別の実装です
gcと比較すると、gccgoはコードのコンパイルに時間がかかりますが、より強力な最適化をサポートしているため、gccgoによってビルドされたCPUバウンドプログラムは通常、より高速に実行されます。
また:
- gcコンパイラは、最も一般的なプロセッサであるx86(32ビットおよび64ビット)とARMのみをサポートします。
- ただし、Gccgoは、GCCがサポートするすべてのプロセッサをサポートします。
これらすべてのプロセッサがgccgoについて徹底的にテストされているわけではありませんが、x86(32ビットおよび64ビット)、SPARC、MIPS、PowerPC、さらにはAlphaを含む多くのプロセッサがテストされています。
Gccgoは、gcコンパイラがサポートしていないオペレーティングシステム、特にSolarisでもテストされています。標準のGoリリースからgoコマンドをインストールする場合、
-compiler
オプションを介してすでにgccgoをサポートしていますgo build -compiler gccgo myprog
。
要するに:gccgo:より多くの最適化、より多くのプロセッサ。
ただし、OneOfOne(ソース)がコメントしているように、gccgoでサポートされているgoと最新のgoリリースの間には同期がとれていないことがよくあります。
gccgoはバージョンgov1.2までしかサポートしていないため、1.3 / 1.4(ヒント)で新しいものが必要な場合は、gccgoを使用できません。–
GCCリリース4.9には、Go 1.2(1.3ではない)バージョンのgccgoが含まれます。
GCCプロジェクトとGoプロジェクトのリリーススケジュールは一致していません。つまり、1.3は開発ブランチで利用可能になりますが、次のGCCリリースである4.10にはGo1.4バージョンのgccgoが含まれる可能性があります。
twotwotwoは言及コメントでブラッド・フィッツパトリック氏のプレゼンテーションのスライドを
gccgoは非常に優れたコードを生成します
...しかしエスケープ分析が欠けています:多くの小さな割り当て+ガベージでパフォーマンスを殺し
ます... GCは正確ではありません。32ビットには適していません。
twotwotwoは追加します:
別のスライドでは、gccgo以外のARMコードの生成が不安定であると述べています。
それがプロジェクトにとって興味深いオプションであると仮定して、おそらくターゲットアーキテクチャのユースケースのバイナリを比較します。
peterSOの コメントは、ゴー1.5今(Q3 / Q4 2015)手段:
コンパイラとランタイムは完全にGoで記述されています(小さなアセンブラを使用)。
Cは実装に関与しなくなったため、ディストリビューションのビルドにかつて必要だったCコンパイラーはなくなりました。
「GoinGo」スライドには、次のことが記載されています。
Cはなくなった。
補足:gccgoは引き続き好調です。
Berkantはコメントで、gccgo
何gc
がブートストラップされたのかを尋ねます。
JörgWMittagの回答:
いいえ、
gccgo
後に登場しましたgc
。
gc
もともとはCで書かれていました。これは、同じ人々によって設計された、Unixの後継であるPlan9オペレーティングシステムのKenThompsonのCコンパイラに基づいています。gc
Goで記述されるように、繰り返しリファクタリングされました。
gccgo
開始されたイアン・ランス・テイラー、囲碁プロジェクトと提携していないGCCのハッカー。最初の完全にセルフホストされたGoコンパイラは、実際にはWindows専用の商用クローズドソース実装であり、その名前はインターネットと同じように私の頭から消えたようです。彼らは、Goで記述されたセルフホストコンパイラを持っていると主張し、
gccgo
まだ存在しておらずgc
、Windowsでのセットアップが非常に困難な時期にWindowsをターゲットにしました。(基本的に、完全なCygwin環境をセットアップし、ソースコードにパッチを適用し、ソースからコンパイルする必要がありました。)しかし、製品を販売する前に、会社は崩壊したようです。
Hector Chuは、2009年11月にGoのWindowsポートをリリースしました。
このgo-lang.cat-v.org/os-ports
ページには、Joe / JosephPoirierの初期作業についても記載されています。ではこのページ:
知識のある人が、Windowsポートの作成に携わっている人(Alex Brainman -Hector Chu-Joseph Poirier)の1人がビルド環境の詳細を示すwikiエントリを作成するように要求できる可能性はありますか?