[解決済み] gc」と「gccgo」の主な相違点は何ですか?
質問
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アプリを書く ) 光京 (魏光靖) .
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] スライスを宣言するのか、スライスを作るのか?
-
[解決済み] 単一値コンテキストにおける複数値
-
[解決済み] os.Exit()とpanic()はいつ使うのか?
-
[解決済み] テンプレートでマップを繰り返し処理する
-
[解決済み] 構造体の値をマップの値として設定すると、"cannot assign" エラーが発生するのはなぜですか?重複
-
[解決済み] bytes.Buffer does not implement io.Writer" というエラーメッセージが表示される。
-
[解決済み] 複数のファイルからなるGoプログラムをコンパイルするには?
-
[解決済み] チャネルの要素数
-
[解決済み] ローカルファイルからio.Readerを作成する
-
[解決済み] ユーザーのホームディレクトリを取得する