Go 言語は、1. インポート参照管理メソッドの使用、2. テンプレートのコンパイル負担がない、3. バージョン 1.5 以降のブートストラップ コンパイラの最適化、4. キーの数が少ない、合計 25 個のキーワードがあるため、コンパイルが高速です。 Go 言語で作成すると、コンパイル プロセス中のコード分析が簡素化されます。
このチュートリアルの動作環境: Windows 10 システム、GO 1.11.2、Dell G3 コンピューター。
Go の主な機能は、コンパイル速度、実行速度、メモリ管理、同時プログラミングです。
なぜ Go のコンパイルは速いのですか?
もちろん、Go 言語の設計は完全にゼロから始まるわけではありません。当初、Go チームはコンパイルを設計して実装しようとしました。 Go 言語のフロントエンド。C ベースの gcc コンパイラはマシン コードにコンパイルされます。この gcc のフロントエンド コンパイラは、現在の Go コンパイラの 1 つである gccgo です。
Go のコンパイルが速い理由について話すのではなく、まず C のコンパイルが遅い理由について話しましょう。C は gcc を使用してコンパイルすることもできます。コンパイル速度の違いのほとんどは、言語設計自体に起因すると考えられます。
この問題について説明する前に、説明する必要があるのは、ここで比較したコンパイル速度はすべて静的コンパイル下でのものであるということです。
静的コンパイルと動的コンパイルの違い
静的コンパイル: コンパイラーは実行可能ファイルをコンパイルするときに、使用されるリンク ライブラリを抽出する必要があります。は実行可能ファイルにパッケージ化されており、コンパイル結果は 1 つの実行可能ファイルのみになります。
動的コンパイル: 実行可能ファイルには独立したライブラリ ファイルが必要です。実行可能ファイルのサイズを減らすためにライブラリを実行可能ファイルにパッケージ化しないでください。実行中にライブラリを呼び出すだけです。
2 つの方法には、それぞれ長所と短所があります。前者では、ライブラリの異なるバージョンの互換性の問題を管理する必要がありませんが、後者では、メモリとストレージの使用量を削減できます (異なるプログラムが共有できるため)同じライブラリ). 2 つの方法のどちらが優れているか、それとも弱いかは、特定のエンジニアリング上の問題によって決まります。Go のデフォルトのコンパイル方法は静的コンパイルです。
議論したい質問に戻ります。なぜ C のコンパイルは遅いのでしょうか?
C コンパイルが遅い理由は主に 2 つあります:
1. ヘッダー ファイルのインクルード メソッド
2. テンプレートのコンパイル
C include メソッドを使用してヘッダー ファイルを参照すると、乗算器レベルでコンパイルする必要があるコードが増加します。たとえば、同じヘッダー ファイルが同じプロジェクト内の N 個のファイルにインクルードされている場合、コンパイラはヘッダー ファイルをコードのすべての部分に導入するため、同じヘッダー ファイルが N 回コンパイルされることになります (これはほとんどの場合不要です);
C で使用されるテンプレートは、汎用プログラミングをサポートするためのものです。さまざまな Type ジェネリック関数を作成する場合、非常に便利ですが、コンパイラに多くの不必要なコンパイル負荷が追加されます。
もちろん、C にはこれら 2 つの問題に対して後続の最適化手法が多数ありますが、多くの開発者は、これにあまり多くの時間とエネルギーを費やしたくありません。
最近のプログラミング言語のほとんどは、ファイルの導入方法に include
ヘッダー ファイルの代わりに import モジュールを使用していました。Import はコンパイルの繰り返しの問題を解決しました。もちろん Go もそれを使用しています. import メソッド; テンプレートのコンパイルの問題については、Go はその設計思想においてシンプルなアプローチに従っており、関数型プログラミングを設計フレームワークに組み込んでいないため、当然のことながら、テンプレートのコンパイルによって生じる時間のオーバーヘッドはありません (これもまた大きなオーバーヘッドです)。汎用サポートなし)、人々が Go 言語に不満を抱く理由)。つまり、私の意見では、Go は主に 4 つの理由でコンパイルが速くなります:
1. インポート参照管理メソッドが使用されている;
2. いいえテンプレートのコンパイル負荷;
3. バージョン 1.5 以降のブートストラップ コンパイラの最適化;
4. キーワードの減少。
Go 言語には 25 のキーワードがあります:
break default func インターフェース select case defer go map struct chan else goto package switch const fallthrough if range type Continue for import return var Go 言語のキーワードを意図的に少なくする理由は、コンパイル プロセス中のコード分析を簡素化するためです。他の言語と同様、キーワードを識別子として使用することはできません。
したがって、コンパイルを高速化し、C をあきらめて Go に切り替えるには、汎用プログラミングの利点を放棄するかどうかも検討する必要があります。
注: ジェネリックは Go 2 バージョンでサポートされる場合があります。
注:
Go はまだ C の究極のパフォーマンスを達成することはできませんが、ほとんどの場合、それに非常に近づいています;
Go と Java の間のアルゴリズムの時間オーバーヘッドは次のとおりです。違いを見分けるのは難しいですが、メモリ オーバーヘッドの点では Java の方がはるかに高くなります。
上記のほとんどの場合、少なくとも時間とメモリ オーバーヘッドの点では Go の方が Python よりはるかに優れています。
推奨される学習: Golang チュートリアル
以上がGo 言語のコンパイルは速いですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、弦の操作にGOの「文字列」パッケージを使用し、効率を高め、ユニコードを効果的に処理するための一般的な機能とベストプラクティスの詳細を説明します。

記事の詳細は、暗号化操作のためのGoの「暗号」パッケージ、安全な実装のための主要な生成、管理、およびベストプラクティスについて議論するためのパッケージ。

この記事では、現在の時間の取得、特定の時間の作成、文字列の解析、経過時間の測定など、日付、時間、およびタイムゾーンを処理するためのGoの「時間」パッケージの使用について詳しく説明しています。

記事では、可変検査と変更のためにGOの「反射」パッケージを使用して、方法とパフォーマンスの考慮事項を強調するために説明します。

この記事では、同時プログラミングにおけるGoの「Sync/Atomic」パッケージを使用して、人種の条件の防止やパフォーマンスの改善などの利点を詳述していることについて説明します。

この記事では、構文、安全な変換慣行、一般的な落とし穴、学習リソースなど、GOのタイプ変換について説明します。明示的なタイプの変換とエラー処理を強調しています。[159文字]

この記事では、構文、パニックや誤ったタイプなどの潜在的なエラー、安全な取り扱い方法、パフォーマンスへの影響に焦点を当てたGOのタイプアサーションについて説明します。

この記事では、複数のチャネル操作を処理するためのGOの「選択」ステートメントの使用、「スイッチ」ステートメントとの違い、および複数のチャネルの処理、タイムアウトの実装、Non-Bなどの一般的なユースケースについて説明します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ホットトピック









