2012-09-03 8 views
17

私はGolangを研究しており、コンパイラを持っていることがわかります。 しかし、それをアセンブリレベルのコードにコンパイルしているか、それをBYTECODESに変換してから、そのコンパイルを呼び出していますか?つまり、PHPでもBYTECODESに変換してより高速なパフォーマンスを得ることができます。 golangはシステムレベルのプログラミングとコンパイルのための置換えですか?googles GOLANGはインタプリタかコンパイラですか?

答えて

39

実際にはコンパイラです(実際には2つのコンパイラが組み込まれています)、完全に自己完結した実行可能ファイルとなります。あなたのサーバー上でそれを実行するために、補足的なライブラリやあらゆる種類のランタイムは必要ありません。ターゲットのコンピュータアーキテクチャ用にコンパイルするだけで済みます。 the documentationから

2つの公式のGoコンパイラツールチェーンがあります。このドキュメントでは、gc Goコンパイラとツール(6g、8gなど)に を示します。 がgccgoで動作する方法については、GCCバックエンドを使用する従来のコンパイラ を参照してください。

Goコンパイラは3つの命令セットをサポートしています。異なる アーキテクチャ用のコンパイラの品質には、重要な違いがあります( )。

amd64(a.k.a. x86-64); 6g、6l、6c、6a 成熟した実装。 コンパイラは有効なオプティマイザ(登録簿)を持っており、良いコードを生成します(gccgoは時々顕著に改善されます)。

386(a.k.a. x86またはx86-32)。 8g、8l、8c、8a amd64ポートと同等です。

アーム(a.k.a. ARM); 5g、5l、5c、5a Linuxバイナリのみをサポートします。その他のポートは より広く使用されていないため、徹底的にテストされていません。低レベルのオペレーティング・システム・インタフェース・コードのような ものを除い

、ランタイム サポートは、すべてのポートで同じであり、マークアンドスイープガベージ コレクタ、効率的な配列と文字列のスライシング、およびのためのサポートを含みます 効率的なgoroutines(需要に応じて増減するスタックなど)。

コンパイラは、FreeBSD、Linux、NetBSD、OpenBSD、OS X (Darwin)、およびWindowsオペレーティングシステムを対象とすることができます。 の組み合わせの完全なセットは、下記の環境変数 の説明に記載されています。

通常、サーバではamd64プラットフォームをターゲットにします。

Goはコンパイル速度がよく知られていることに注意してください。私のサーバープログラムをデプロイするときは、開発用コンピュータ上のさまざまなプラットフォーム用にビルドしません。ソースをデプロイし、本番サーバーに直接コンパイルします。 Go1以来、私は決して一つのプラットフォームでコンパイルするコードを持っていなかったし、他のプラットフォームでコンパイルしていない。

Windowsの場合、開発用コンピュータにexeを作成しても問題がありませんでした。このコンピュータには何もインストールしていない人にこのexeを送信するだけです。

+0

それで、それをバイトコードに変換せずに実際にコンパイルします。 –

+0

はい。どのCプログラムもコンパイルされているのと同じ意味で正確にコンパイルしています。すべてが静的にリンクされています。 –

+0

生成するものの.Sコードを出力できますか? – Skaperen

関連する問題