1. ホーム
  2. go

[解決済み] gc」と「gccgo」の主な相違点は何ですか?

2023-01-03 08:14:52

質問

2 つの人気のある Go コンパイラー、「gc」と「gccgo」の主な違いは何ですか? ビルドのパフォーマンスですか? ランタイムパフォーマンスは?コマンドラインオプション? ライセンス?

私は、どれがベストかという意見ではなく、それらの違いの基本的な概要を知りたいだけです。

どのように解決するのですか?

詳しくは、"をご覧ください。 gccgoのセットアップと使用 "をご覧ください。

gccgo, Go 言語用コンパイラ。gccgo コンパイラは GCC の新しいフロントエンドです。

gccgo は gc コンパイラではないことに注意してください。

"で説明したとおりです。 GCC 4.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 コマンドをインストールした場合、gccgo はすでに -compiler オプションでサポートされています。 go build -compiler gccgo myprog .


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


しかし がコメントした によって 一人 ( ソース ) を使用すると、gccgo がサポートする go と最新の go リリースとの間にしばしば非同期が発生します。

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

GCC リリース 4.9 には、Go 1.2 (1.3 ではありません) バージョンの gccgo が含まれます。 .

GCCとGoプロジェクトのリリーススケジュールは一致していません。つまり、1.3は開発ブランチで利用できますが、次のGCCリリースである4.10には、おそらくGo 1.4バージョンのgccgoが含まれることになります。


twotwotwo 言及 コメントで その ブラッド・フィッツパトリックのプレゼンテーションのスライド

<ブロッククオート

gccgoは非常に良いコードを生成します。

... しかし、エスケープ分析に欠けている:多くの小さなアロケートとゴミで性能を殺す

... GCは正確ではありません。32bitには不向き。

twotwotwoが追加。

<ブロッククオート

別のスライドでは、非 gccgo の ARM コード生成が不安定であることに触れています。

それがあなたのプロジェクトにとって興味深いオプションであると仮定すると、おそらくターゲット アーキテクチャのユースケースのバイナリを比較することになるでしょう。

ブロック クォート

として ピーターソー コメント , 1.5へ を今(2015年第3四半期・第4四半期)意味します。

コンパイラとランタイムは完全にGoで書かれるようになりました(アセンブラは少し)。

C はもはや実装に関与しないので、かつてディストリビューションをビルドするのに必要だった C コンパイラはなくなりました .

Go in Go"のスライドです。 は、言及してください。

Cはなくなりました。

余談:gccgoはまだ健在です。


ベルカント 尋ねる コメントで もし gccgo が何であるか gc からブートストラップされたものです。

イェルク・W・ミターク が回答しています。

<ブロッククオート

いいえ。 gccgo の後に現れた gc .

gc は元々 C で書かれており、Ken Thompson の C コンパイラをベースにしています。 Plan9 オペレーティングシステム の Ken Thompson の C コンパイラを基にしています。 gc は繰り返しリファクタリングされ、ますます多くの部分が Go で書かれるようになりました。

gccgo イアン・ランス・テイラー Go プロジェクトとは関係のない GCC ハッカーです。

最初の完全にセルフホスティングされた Go コンパイラーは、実際には Windows 用のプロプライエタリな商用クローズドソース実装で、その名前はインターネットから消えたのと同じように私の脳からも消えてしまったようです。その会社は、Windows をターゲットにした、Go で書かれたセルフ ホスト コンパイラーを持っていると主張していましたが、その当時は gccgo がまだ存在せず gc は Windows 上でセットアップするのが非常に困難でした。(基本的に完全な Cygwin 環境を構築し、ソース コードにパッチを当て、ソースからコンパイルする必要がありました)。 しかし、その会社は製品を販売する前に倒産してしまったようです。

ブロッククオート

ヘクター・チュー は、2009 年 11 月に Go の Windows 版をリリースしました。

そして go-lang.cat-v.org/os-ports のページでは ジョー/ジョセフ・ポワリエ の初期作品にも触れています。で このページ :

<ブロッククオート

誰か詳しい人にリクエストしてもらえないかな? をリクエストすることはできませんか? Alex Brainman - Hector Chu - Joseph Poirier) に依頼することはできますか? Windows移植版の制作に携わっている方で、ビルド環境の詳細をwikiに書いてくれる方はいませんか? wiki エントリを作成できますか?

それに加えて、( GoでWebアプリを書く ) 光京 (魏光靖) .