ホームページ  >  記事  >  バックエンド開発  >  Go 言語はどの言語から借用されていますか?

Go 言語はどの言語から借用されていますか?

青灯夜游
青灯夜游オリジナル
2023-01-30 18:13:523084ブラウズ

Go 言語は C、Pascal、CSP を利用しています。 Go の言語機能の多くは、その 3 つの祖先である C、Pascal、CSP から借用しています。 Go の構文、データ型、制御フローなどは C から継承され、Go のパッケージ、オブジェクト指向およびその他のアイデアは Pascal ブランチから派生し、Go の最大の言語機能であるパイプライン通信に基づくコルーチン同時実行モデルは C から借用されました。 CSP ブランチ。

Go 言語はどの言語から借用されていますか?

このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。

#1. Go 言語設計の本来の意図

1. Go 言語は、当時 Google 開発が遭遇した問題を解決するために設計されました:

    多数の C コード、同時に Java と Python を導入
  • 数千人のエンジニア
  • 数万行のコード
  • 分散コンパイルシステム
  • 数百万のサーバー
2. Google開発の問題点:

    コンパイルの遅さ
  • 制御不能な依存関係
  • 各エンジニアは言語の一部しか使用していない
  • #プログラムの保守が困難 (可読性が低い、ドキュメントが不明瞭など)
  • #更新コストが長期化しているより長い
  • クロスコンパイルの問題
3. 現在の問題と問題点を解決するにはどうすればよいですか?

Go はインターネット時代の C 言語になることを目指しています。ほとんどのシステムレベル言語 (Java や C# を含む) の基本的なプログラミング哲学は C に由来しており、C のオブジェクト指向の性質をさらに発展させています。しかし、Go 言語の設計者は異なる見解を持っており、C 言語は学ぶ価値があると信じています。 C 言語の根強い人気の根源は、そのシンプルさです。したがって、Go 言語は非常にシンプルです。

つまり、当時の彼らの Go 設計の目標は、あらゆる種類の遅さや煩わしさを排除し、さまざまな非効率性やスケーラビリティを改善することでした。 Go は大規模システムを開発する人によって、また開発者のために設計されました。言語設計を研究するためではなく、エンジニアリング上の問題を解決するためにあります。プログラミングをより快適で便利にするためにあります。

しかし、多くのエンジニアが C 部門出身であるなど、当時の Google の内部事情を考慮すると、新しく設計された言語は習得しやすいものでなければならず、できれば C に似た言語でなければなりません。新しい言語はまだ開発されていません。 20 年ぶりにリリースされたものであるため、新しく設計された言語は最新のもの (組み込み GC など) およびその他の状況である必要があります。最後に、実践的な経験に基づいて、目標に向かって Go 言語を設計しました。

4. Go 言語の特徴:

    継承ポリモーフィズムのないオブジェクト指向
  • 強い一貫性のある型
  • インターフェイスは明示的な宣言を必要としません ( Duck Typing)
  • 例外処理なし (エラーは値)
  • 頭文字に基づくアクセシビリティ機能
  • 未使用のインポートまたは変数によりコンパイル エラーが発生する
  • Complete and優れた標準ライブラリパッケージ
  • #Go 組み込みランタイム (パフォーマンス監視、ガベージコレクションなど)
## 2. Go 言語の利点

1. 学習が容易です

Go 言語の構文は C に似た構文を含め、単純です。 Go 言語は習得が簡単なため、普通の大学生でも数週間で使用可能な高パフォーマンスのアプリケーションを作成できます。中国では誰もがスピードを追求しており、これが囲碁が中国で人気がある理由の一つです。

Go 言語はどの言語から借用されていますか? Go 言語の文法的特徴は単純すぎます。単純すぎるため、トリックはほとんどできません。簡単で、学習曲線は非常に低く、すぐに始めることができます。

2. 効率: 速いコンパイル時間、高い開発効率と実行効率

開発プロセス中の Java や C の遅いコンパイル速度と比較して、Go の速いコンパイル時間は大きな要因です。アドバンテージ。 Go は C に近い操作効率と PHP に近い開発効率を持っています。

Go 言語はどの言語から借用されていますか? C 言語の哲学は、プログラマーを信頼し、言語を小さく保ち、最下層を保護せず、最下層に優しく、実行効率とパフォーマンスに注意を払うことです。言語の。 Python の姿勢は、できるだけ少ないコードでできるだけ多くのことを達成することです。したがって、Go 言語が C と Python を統合したいと考えていることは非常に素晴らしいことだと感じます。

3. 有名な家族の出身であり、純血です。

Go が有名な家族の出身である理由は、Go 言語の作成者からわかります。言語は完全に純粋な血の中にあります。次に、Go 言語は Google から提供されており、Google の人気と業界での強さは当然のことです。さまざまなプログラミング言語が覇権を争う状況下で、グーグルが優秀な人材を集めて新たなプログラミング言語を立ち上げたのには、当然、グーグルなりの戦略的な配慮がある。そして、Go 言語の開発傾向から判断すると、Google は依然としてこの新しい最愛言語を非常に重視しており、当然、Go 言語の開発の将来性は良好です。

Go 言語はどの言語から借用されていますか? 4. 自由かつ効率的: アイデアの組み合わせ、非侵入的なインターフェース

Go 言語は、開発効率と開発効率が完璧に融合した言語であると言えます。運用効率、同時プログラミングのネイティブ サポート。

Go 言語は、手続き型プログラミング、オブジェクト指向プログラミング、インターフェイス指向プログラミング、関数型プログラミングなど、現在のすべてのプログラミング パラダイムをサポートします。プログラマーは必要なものを選択し、自由に組み合わせて、好きなように遊ぶことができます。

5. 強力な標準ライブラリ

これには、インターネット アプリケーション、システム プログラミング、ネットワーク プログラミングが含まれます。 Go の標準ライブラリは基本的に非常に安定しており、特にここで挙げた 3 つのライブラリ、ネットワーク層とシステム層のライブラリは非常に実用的です。 **Go 言語の lib ライブラリは小さいですが完全です。 **Go 言語の lib ライブラリには、基本的によく使われるライブラリがほとんど含まれており、中にはあまり良くないライブラリもありますが、これらの問題は今後の開発で解決されると思われるので、問題ないと思います。

6. 便利なデプロイメント: バイナリ ファイル、コピー デプロイメント

これが、多くの人が Go を選ぶ最大の理由です。デプロイメントが非常に便利なため、多くの人が運用および保守プログラムの開発に Go を使用しています。 . .

7. 単純な同時実行性

** 並列プログラミングと非同期プログラミングには、問題点がほとんどありません。 **Go 言語の 2 つの成果物、Goroutine と Channel は、同時プログラミングおよび非同期プログラミングにとって非常に大きな恩恵です。 C、C、Java、Python、JavaScript などの言語の同時実行性と非同期メソッドは、制御するには複雑すぎてエラーが発生しやすくなっていますが、Go はこの問題を非常にエレガントかつスムーズに解決します。長年にわたって同時実行性と非同期プログラミングに悩まされてきたプログラマにとって、これはまったく驚くべき感覚です。 Go は、同時実行性を高度にサポートする非常に効率的な言語です。 Go は、ビッグ データ、マイクロサービス、同時実行のために開発されたプログラミング言語です。

言語としての Go は、物事をシンプルにすることを目指しています。新しい概念はあまり導入されていませんが、信じられないほど高速で使いやすいシンプルな言語を作成することに重点を置いています。その唯一の革新はゴルーチンとチャネルです。ゴルーチンは Go の軽量なスレッド指向のアプローチであり、チャネルはゴルーチン間の通信に推奨される方法です。

ゴルーチンの作成コストは非常に低く、必要な追加メモリは数千バイトだけであるため、数百、さらには数千のゴルーチンを同時に実行することが可能です。ゴルーチン間の通信はチャネルを利用して実現できます。ゴルーチンとチャネルベースの同時実行アプローチにより、利用可能なすべての CPU コアを使用して同時 IO を処理することが非常に簡単になります。 Python/Java と比較すると、ゴルーチンで関数を実行するには最小限のコードが必要です。

Go 言語はどの言語から借用されていますか?

8. 安定性

Go は強力なコンパイル チェック、厳格なコーディング標準、完全なソフトウェア ライフ サイクル ツールを備え、強力な安定性を備えており、安定性が最も重要です。では、なぜ Go は他のプログラムよりも安定しているのでしょうか?これは、Go がソフトウェア ライフ サイクルの各側面 (開発、テスト、デプロイ、メンテナンスなど) に対応するツール (go tools、gofmt、go test など) を提供しているためです。

3. 他の言語との比較

Go の言語機能の多くは、その 3 つの祖先である C、Pascal、CSP から借用しています。 Go の構文、データ型、制御フローなどは C から継承 Go のパッケージとオブジェクト指向のアイデアは Pascal ブランチから派生 Go の最大の言語機能であるパイプライン通信に基づくコルーチン同時実行モデルは CSP ブランチから借用。

Go 言語はどの言語から借用されていますか?

Java

コンパイル言語、中程度の速度 (2.67 秒)、淘宝網、JD.com などの現在の大規模 Web サイトは Java で書かれています。その主な特徴は、安定性、優れたオープンソース、独自の記述仕様セット、適度な開発効率であり、現在最も主流の言語です。プログラミング言語のビッグネームとして。最大の知名度とユーザーベースを持っています。どんなに風が強くても、私はしっかりして動じません。彼を強くせよ、強くせよ、そうすれば風が丘に吹くだろう、彼を水平にせよ、そうすれば明るい月が川を照らすだろう。

c

#実行速度は速く (4.28)、学習の難易度は中程度、開発速度は中程度です。ただし、C# には多くの欠点があるため、JD.com や Ctrip などの大規模 Web サイトの前身はすべて C# で開発されていましたが、現在は Java に移行されています。

C/C

既存のプログラミング言語の祖先であり、そこから他の言語が生まれました。最速の実行速度は比類のないものです。しかし、これは作成が最も複雑で、開発が困難です。

Javascript

プログラミング言語における独特で傲慢な美しさ。フロントエンドの処理能力は他の言語に匹敵しません。開発中のjsバックエンド処理能力も優れています。フロントエンドとバックエンドの両方を担当しますが、他に誰が担当するでしょうか?

Python

スクリプト言語、最も遅い (258 秒)、コードが単純、学習の進行が短く、開発速度が速い。 Douban は Python で書かれています。 Python の有名なサーバー フレームワークには、django や flask などがあります。ただし、Python は大規模なプロジェクトでは安定していないため、Python を使用していた一部の企業は後に Java に移行しました。

scala

コンパイル言語は Python の 10 倍速く、Java に似ていますが、学習の進みが遅く、実際のプログラミングでは言語に習熟していないと簡単です。深刻なパフォーマンスの低下を引き起こす可能性があります。たとえば、その後、Yammer は scala から java に移行しました。マイクロサービス フレームワークには、lagom などが含まれます。

Go

プログラミング界の若き才能。高い同時実行機能は他に類を見ません。 Pythonと同等の簡潔なコードと開発速度を持ちながら、C言語と同等の実行効率を持ち、優れた利点を持っています。

ソフトウェア業界にしばらく携わったことがある人なら誰でも、普遍的なプログラミング言語、普遍的な開発フレームワーク、普遍的なソリューションなどがないことを知っています。新しいテクノロジーの出現は、古いテクノロジーに対する一部の人々の強い不満に起因しているはずです。 Go言語も例外ではありません。たとえば、C 言語の依存関係管理、C ガベージ コレクション、Java のぎこちない型システムと重い Java EE 仕様、スクリプト言語 (PHP、Python、Ruby など) のパフォーマンスについては、よく議論され、不満が述べられています。多くの開発者コミュニティが問題です。

知識の拡大:

Go 言語の利点

Go 言語は、複数のプログラミング パラダイムのマスターであり、優れたソフトウェア エンジニアリングのアイデアとその原則とその特性により、開発者はプログラムを迅速に開発、テスト、展開することができ、生産効率が大幅に向上します。他の主流言語と比較した Go 言語の利点を見てみましょう。

1) Go 言語は、C/C と比較して明確な依存関係管理と完全自動ガベージ コレクション機構を備えているため、コード量が大幅に削減され、開発効率が大幅に向上します。

2) Java と比較して、Go 言語には簡潔な型システム、関数型プログラミング パラダイム、および高度な同時プログラミング モデルがあります。その結果、そのコード ブロックはより小さく、より簡潔で、より再利用可能になり、マルチコア コンピューティング環境でより高速に実行されます。

3) PHP の場合、Go 言語はより汎用性があり、標準化されています。これにより、大規模なソフトウェアを構築し、さまざまなモジュールをより適切に編成するのに適しています。パフォーマンスの点では、PHP は Go に匹敵することはできません。

4) Python/Ruby の場合、Go の利点は、その簡潔な構文、非侵入的でフラットな型システム、および自然なマルチパラダイム プログラミング モデルにあります。 PHP と同様、Python と Ruby は動的に型付けされたインタープリタ言語です。つまり、静的に型付けされたコンパイル済み言語よりも実行速度が大幅に遅くなります。

つまり、現在の主流言語に対する Go 言語の最大の利点は、高い生産効率、高度な依存関係管理と型システム、およびネイティブの同時コンピューティングのサポートです。そのため、Go言語はリリース以来、さまざまな分野の開発者から注目と支持を受けてきました。

Go 言語の欠点

ここで、現在の Go 言語を強化または改善する必要がある領域を客観的に見てみましょう (ただし、一部の Gopher には強化または改善が必要ありません)そうは思わない)。

1) 分散コンピューティングの観点から見ると、Go 言語は Erlang ほど成熟していません (これに関してはいくつかの Go 言語コード パッケージが登場しており、すでに明るい未来が見えています)。

2) プログラムの実行速度の観点から見ると、Go 言語は Java に匹敵しますが、まだ C には及んでいません (差は常に縮まっています)。

3) サードパーティ ライブラリの観点から見ると、Go 言語ライブラリの数は、他のいくつかの主流言語 (Java、Python、Ruby など) の数よりもはるかに少ないです。ただし、Go 言語の時代と比較すると、すでにかなりの数のサードパーティ ライブラリが Go 言語を使用して実装されており、その数は急速に増加し続けています。

さらに、より深いレベルでは、以下で詳しく説明するように、Go 言語の標準ライブラリにはいくつかの不満足な側面もあります。

1) 言語構文の観点から見ると、Go 言語構文には糖衣構文があまりなく、多くの Python や Ruby 愛好家がそれを無視しています。さらに、変数に値を代入する方法がたくさんあるため、少し面倒です。最も残念であり、私が最も懸念しているのは、Go 言語がカスタム ジェネリック型をサポートしていないことです。

2) 同時プログラミングの観点から見ると、Go 言語が提供する同時実行モデルは非常に強力ですが、理解する必要のある記述ルールもいくつかあります。そうしないと、簡単に「穴」に足を踏み入れてしまいます。実際、これを「ピット」と呼ぶことはお勧めできません。なぜなら、これらのいわゆる「穴」のほとんどは、私たちが原理を知らないために自分で掘ったものだからです。

3) ガベージ コレクションの観点から見ると、Go 言語のガベージ コレクションは同時マーク アンド スイープ アルゴリズム (Concurrent Mark and Soup、CMS) を使用します。これは並行操作であり、シリアル操作よりもはるかに時間がかかりませんが、ガベージ コレクション中にすべてのユーザー プログラムの操作が停止します。これは、リアルタイム要件が比較的高いアプリケーションにある程度影響します。ただし、Go 言語 1.3 以降のバージョンでは、この問題は大幅に改善されました。

Go 言語にはまだいくつかの欠陥がありますが、全体的にはすでに非常に優れた汎用プログラミング言語です。さらに、Go 言語は将来の開発においてパフォーマンス、信頼性、移植性、および一部の機能強化に重点を置くため、上記の欠点はバージョンが進むにつれて徐々に弱まり、解消されるでしょう。

【関連する推奨事項: Go ビデオ チュートリアル プログラミング教育

以上がGo 言語はどの言語から借用されていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。