ホームページ  >  記事  >  Java  >  マスターが Go、Java、C などの主流のプログラミング言語を分析します

マスターが Go、Java、C などの主流のプログラミング言語を分析します

黄舟
黄舟オリジナル
2017-01-18 15:15:341551ブラウズ

Java プログラミング言語

java は、クロスプラットフォームのアプリケーション ソフトウェアを作成できるオブジェクト指向プログラミング言語です。これは、1995 年 5 月に Sun Microsystems によって開始された Java プログラミング言語および Java プラットフォームです (つまり、JavaEE (j2ee)、一般名)。 JavaME(j2me)、JavaSE(j2se))。


この記事では主に C、C++98、C++11、Java、Go を分析し、主に言語の主要な機能について説明します。議論の過程では、ファーウェイの言語プログラミングの専門家とファーウェイの通信ソフトウェア内の主要な開発者との意見交換を組み合わせ、言語の好みや言語宗派をめぐる論争を放棄し、客観的かつ客観的な観点から各言語の特徴と欠点について議論するよう努めます。公平な視点で言語を選択することが客観的な参考になります。

これを書き留めて、全体の分析をより客観的にするために、皆さんの修正とフィードバックを得ることができれば幸いです。私は、Go の詳細な分析とリファレンスに焦点を当てます。たくさんのコンテンツがあり、期待を裏切ることはありません。

言語の全体概要

1. Go

並行性の点では、ゴルーチンとチャネルメカニズムは、パフォーマンスの点で軽量でスムーズな並行性メカニズムを提供し、Java よりも劣らないパフォーマンスを提供します。 (パフォーマンスは誤った命題です)、メモリ リソースの消費という点では、構文の点で Java や他の動的言語よりも明らかな利点があり、Python の動的言語機能の一部を備えており、非常にシンプルでシンプルなオブジェクトを提供します。これらの処理コードは、特にデータ処理、構成、およびプロトコル マッピングのシナリオでコードの 10% ~ 50% を占める可能性があり、C、C++、および Java と比較すると、この点では不器用です。これが動的言語が非常に魅力的な理由です。

これは、Go 言語が最初のバージョンのリリース時に大きな注目を集めた主な理由でもあり、特に動的言語では、Pike が設計した Go 言語にはない同時実行性とパフォーマンスの利点が得られます。 C/C++ の別のオプションの役割として機能することを意図していました (これは代替ではなく、その設計目標は代替ではないことに注意してください)。Go 言語の父であり Google の主任ソフトウェア エンジニアであるパイクは、これについて不満でいっぱいでした。彼の 2012 年の「Road to Simplicity」スピーチの文の 1 つを引用すると、「C++ プログラマーが Go を代替手段として考えることを期待していましたが、代わりに、ほとんどの Go プログラマーは Python や Ruby などの言語から来ています。C++ から来た人はほとんどいません。」 C++ の価値の本質は、この言語がより広範囲の抽象化、エレガントで柔軟な機能を提供し、これらの表現機能がゼロコストのハードウェアであり、C 言語は最初からゼロコストのハードウェアを設計目標として持っていることです。しかし、言語の表現力は C++ によって解決されます。Go の考え方の方向性は明らかにゼロコストではありません。Go の提案は、CPU コストがゼロというよりも、プログラマの作業負荷を最小限に抑えることです。

1 つは、ゼロコストのハードウェアの究極の追求であり、もう 1 つは、プログラマーの最も重要な部分を誰も置き換えることができないため、動的構文と gc の両方の目標を同時に達成することはできません。それは開発効率を選択し、開発効率のためにハードウェアの効率を犠牲にすることになるため、Java が得意とするアプリケーションの方向、特に現在のネットワークおよび HTTP アプリケーションには優れた標準ライブラリとエコシステムが必要です。システムサポート、および標準ライブラリに関しては、Go は tcp/http/xml/json/暗号化と復号化などを処理するための、より軽量で優れたコード ライブラリを提供し、Go のコア プロトコルである http の高い同時実行サポートを提供しました。ネットワークは Java を活用するための踏み台です。

しかし、私たちは言語の重要な機能や厳密さの点でまだ成熟していない現状に直面しなければならず、まだ多くの欠点や一時的な解決策があり、それは生態学的成熟にも影響を及ぼします。これらの問題はまだ解決される必要があります。新しいバージョンでは。 Go 言語の最初のバージョンは、2012 年 3 月 28 日に正式にリリースされました。これまでに、バージョン 1.7 がほぼ 1 年でリリースされ、その間にいくつかのベータ版と RC バージョンがリリースされました。 Go 言語はまだ準備が整っていません。

まとめ

Go は、動的言語のパフォーマンス要件の点で Python や Ruby の理想的な候補であることが証明されていますが、アプリケーション開発、特に HTTP 関連のアプリケーションの点では、同時に Java の前に挑戦者でもあります。また、リソースの制御がそれほど強力ではない場所では、C/C++ 以外の別の役割も提供します。

生産性の点では、その言語機能とエコシステムはまだ成熟しておらず、バージョンはまだ急速に反復されているため、現時点では、これらの言語には利点がありません。特定のシナリオではオプションの役割です。長期的には、Google の強力なサポートにより、新しい機能とライブラリ アプリケーション機能が追加され続けるでしょう。ただし、現段階では、プログラムの規模と複雑さを考慮する必要があります。言語と生態系はまだ完全には開発されていません。健全なサポートを提供するには、その未熟さと急速なバージョンの反復によって引き起こされるリスクも認識しておく必要があります。

2、ジャワ

Javaの成功は、10年前は主にUnixシステムをベースとしていたSUN、IBM、Oracleなどの大企業の強力な支援により、エンタープライズアプリケーションやWEBアプリケーションの分野で確固たる足場を築くことができました。その後の 10 年間、前半は x86+Linux による革命に頼ってシェアを維持し続けましたが、後半は Android の成功により、低迷と停滞を経て再びトップに上り詰めました。過去 20 年間で、Java は最も強力なエコシステムを構築してきました。それは包括的なものであると言えます。Java がその地位と成功を証明するのに十分な巨大な航空母艦であったことは疑いの余地がありません。 。ただし、その言語、ライブラリ、フレームワーク、エコシステムの複雑さは、同時実行性、言語の同期メカニズム、標準ライブラリの通知と同時実行、HTTP は Apache+tomcat コンテナなどを通じて取得することもできるなど、技術者にとって大きな障害となります。また、JVM テクノロジに基づいて、Java は同時実行性の点で Scala などの他の言語と優れた相互運用性を備えています。もちろん、業界では nginx やその他の混合一致が選択されます。もっとたくさんのシナリオがあります...

これが Java の世界です。 車輪を再発明する必要はありません。これが Java の成功の鍵です。歴史上、Java には選択肢が多すぎます。詳しく調べてみると、Java の学習コストは C++ よりも高く、プログラマーへの要求も C++ よりも高いことがわかります。 7 年前、場合によっては 10 年前の Java テクノロジを使用する場合、技術者がフレームワークを非常に慎重に整理して設計する必要があります。そうしないと、再利用の結果、非常に肥大化したプログラムが積み重なり、実行時にリソースが消費され、さまざまな問題が発生します。これは、Java に基づいて開発されたプラットフォームが多すぎることに対する広範な批判の鍵です。ブレードの規模は、間違いなく、万能ではなく、オーダーメイドである必要があります。言語と標準ライブラリが最良かつ最も直接的なオプションを提供しない限り、開発者にとっては最も要求の厳しいものです。

概要

Java は過去 10 年間で、基本的に最高ランクの言語であり、最も強力なエコシステムを蓄積してきました。次の誤解を解くために、現在、Java の学習コストと開発者のスキル要件は C/C++ のそれよりもはるかに高く、おそらくほとんどの開発者は Java の空母を制御できません。 Java を長く使いたい場合は、最新の Java 技術を常に把握しておく必要があり、同時に再利用のスキルも高くなければなりません。非常に簡単にアプリケーションを作成できるため、リソース占有率とランタイム効率が恐ろしくなります。

3、C、C++98、C++11...

Java や Go などの言語が主要な開発分野であるため、C/C++ は依然として組み込みおよびシステムレベルのプログラミングにおいて確固たる地位を占めています。明らかに開発効率の面については、前の Go の章の議論を参照してください。

しかし、同時実行性、ネットワーク、アプリケーション プログラミングに関しては、言語自体は何のサポートも提供しておらず、この点に関しては標準ライブラリのサイズに野心はありません。 C/C++ 標準ライブラリはおそらく、Java や Go と比較することは常に不可能でした。C/C++ は大規模な営利企業によって管理されておらず、完全に「自由範囲」であるため、標準ライブラリには大企業からの継続的な投資が必要です。これが、C++98 の標準ライブラリが存在する理由です。メジャー アップデートが行われるまでに 13 年かかりました。これは直接、C/C++ がさまざまなハードウェア プラットフォームのシステム API をカプセル化する必要性をもたらしました。linux+x86 が Unix を大規模に打ち負かす前は、多くの Unix システムがクロスプラットフォーム プログラミングをより困難にしていました。 ACE プラットフォーム プログラムが登場し、マクロ静的グローバル変数が満載の Windows プラットフォーム上の同様に悪質な MFC ライブラリも、かつてはプログラマによって命を救うものとみなされていましたが、今では明らかに歴史から放棄されたことがわかります。なぜこんなにも多くの人が C/C++ が秘密主義であることを恐れているのか。この時点で、Java は、JVM テクノロジに基づくマルチスレッド、ネットワークおよびアプリケーション開発、およびクロスプラットフォームのサポートのための標準ライブラリを提供し、Java を主流のプログラミング言語に押し上げました。これが、最初の 10 年間の Java の成功の鍵でした。

C/C++ プログラマにとって、C++11 のリリースは、C++98 と比較して言語と標準ライブラリの点で大きな進歩であると述べました。これは新しい言語であると言っても過言ではありません。同時に、Boost ライブラリ (実際にはリアルタイム標準ライブラリ) に対する非常に多くのトップ C++ 専門家の貢献により、ネットワークと同時プログラミングの点で最高のパフォーマンスが実現しました。いくつかの基本的なアプリケーションは、この分野の開発の困難さを大幅に軽減します。従来の C++ プログラマは、できるだけ早く C++11 に移行する必要があります。これにはコンパイル環境の更新が必要です。コンパイル環境の更新により、かつては CC++ が最も強力であったメモリ検出およびパフォーマンス分析用のツールが提供されます。メモリのクロスボーダーおよびリークの問題については、gcc5.2 バージョンと Intel の最新 CPU では、メモリの過負荷を最初の段階で検出できます。同時に、Intel が提供する vtune パフォーマンス分析ツールを使用します。私がこれまで出会った中で最も強力なツール。

概要

従来の C++ プログラマーは、できるだけ早く C++11 に移行し、新しい標準ライブラリとブーストを採用する必要があります。これにより、組み込みおよびシステムレベルのプログラミングにおける開発とメンテナンスの効率が大幅に向上します。私たちは新しい言語を受け入れなければなりません。また、その言語の大幅なアップグレードもまた、既存の資産の有効性をより良く活用するために、同様に重要な位置に置かれなければなりません。アプリケーション開発に関しては、標準ライブラリは現段階ではJavaはおろかGoにも太刀打ちできるとは考えられていないので、素直に得意分野で頑張るべきだろう。

言語機能

1. 同時実行性

Go は、軽量かつシンプルであるという点で最大の利点を持っています。ゴルーチンとチャネル メカニズムは、言語レベルで軽量でスムーズな同時実行メカニズムを提供し、標準ライブラリもこのアプリケーション ライブラリに基づいて提供します。

同時実行の世界におけるハイブリッド プログラミングの観点からは、Java は最も多くのオプションと環境サポートを提供します。10 年前の java.util.concurrent のリリース以降、Java はクラウド下で Java を同時実行プログラミングの頂点に押し上げました。 Scala などの同時実行性の高いフレームワークや言語との優れた相互運用性。

C++11 は、C/C++98 と比較して、優れたクロスプラットフォームのカプセル化を提供します。 10 年前の Java の同時実行パッケージのリリースと同じように、オペレーティング システム API のメンテナンスに別れを告げ、同時プログラミングにおけるこの言語のクロスプラットフォームの精神的負担は大幅に軽減されますが、スレッドのスケジューリングと管理の点では、依然として自分で慎重に保守する必要があります

C/C++98 に関しては、Huawei 通信ソフトウェアのみが SNE/ENIP に依存し、一部は ACE に依存し、一部はさまざまなスタイルの独自のクロスプラットフォーム パッケージを備えています。 10 年前にサポートされていた Windows、Linux、solaris、aix などのプラットフォームは、並行プログラミングの暗黒時代にあります。C/C++ 開発の難しさは、主に並行言語とネットワーク プログラミングによるものです。ライブラリはサポートを提供していないため、最初から開始する必要があります。

概要

開発難易度 Go

2. オブジェクト指向

Java、C++、および Python はすべて、デザイン パターン、型システム、およびツール チェーンのサポートにより、大規模なプログラムを構築するための基本要素を備えています。 ; Go 言語はオブジェクト指向をサポートしていると主張していますが、メソッドやインターフェイスなどを介して間接的にシミュレートされており、C のようにオブジェクトの構造を直接明確に整理したり初期化したり破棄したりすることはできません。グローバル オブジェクトと構造、およびオブジェクトの管理コストが比較的高い。大規模なプログラムを構築するという点では、言語機能がまだ比較的弱いため、新しい言語機能を追加する必要があります。

3. 物理構造の構成

中規模および大規模なプログラムの場合、約 100 万行の C++ コードなど、物理構造の構成はクラス インターフェイスなどの論理構造の表現よりも重要な役割を果たします。構造的な組織化が良くなく、影響は戦略レベルです (大規模プログラムに対する論理構造の組織化の影響は戦術レベルです): 1 行のコード変更の場合、コンパイルとリンクの時間が 10 分を超える場合があります。 、場合によっては数時間、コンパイルと再起動に費やす時間だけでも、開発全体の効率が破壊される可能性があります。

パッケージ: コード構成に関して、パッケージの役割を詳しく説明する必要はありません。Java と Go は基本的にこの言語機能を備えていますが、C/C++ には明らかにこの機能がありません。名前の競合を避けるため (論理構造の構成について詳しく)、ディレクトリ、ヘッダー ファイル/ソース ファイル/HPP ファイルによるコード分類の整理については、非常に慎重に処理および設計する必要があります。そうしないと、ループや無秩序な依存関係が発生するのが一般的です。手順の整理には、より高度な人材スキルが必要です。

ライブラリ: プログラムの実行に関しては、Java は jar パッケージの動的ロードをサポートし、優れた拡張機能とアップグレード機能を備えています。一方、C/C++ は静的リンク方法と動的リンク方法の両方をサポートしていますが、ロード方法に関しては、基本的に制御や機能はありません。 Go は Java と同じくらい柔軟で、基本的に Linux では libc ライブラリのみに依存します。最終的には、gdb 形式と互換性のある実行プログラムがコンパイルされます。導入に関しては最小限の構成ですが、プログラムの規模を制御する必要があります。そうしないと、オペレーティング ドメインでリンクされたアップグレードが発生する可能性があります。

まとめ

この点では Java が最高ですが、C++ は慎重に扱う必要があり、Go はその中間に位置します。

4. 型システムとジェネリック

Java/C++ は両方とも、厳密に型指定されたコンパイル時の検出をサポートし、低レベルの型エラーの検出を容易にするコンパイル時の型安全性を提供します。また、一般的なアルゴリズムとコンテナーの表現を容易にするジェネリクスもサポートしています。型宣言定義を処理するコードはより簡潔ですが、この段階ではジェネリックスがサポートされていないため、一般的なアルゴリズムとコンテナーの表現に大きな障害と型の安全性が与えられます。 C 言語の世界の void * や 10 年前のジェネリックのない Java と同じように、インターフェイス {} を通じて、そのオブジェクトはすべて Object から継承されます。もちろん、インターフェイス {} は単なるオブジェクトまたはデータ構造型ではありません。この道は機能しないことが証明されており、遅かれ早かれジェネリックに移行するため、Go 言語は現段階ではサポートしていませんが、長期的にはサポートされるはずだとその発明者も述べています。方法はまだ見つかっていません。

まとめ

Go にも言語レベルでの新機能が必要になると思いますが、ジェネリックに関しては、現在の言語の中で C++11 が最も優れており、次に Java、C++ が続きます。 98 ジェネリック型を扱う場合、難解で難解な構文エラーが発生するのが一般的です。

5. 初期化

初期化は、プログラムの堅牢性、柔軟性、可読性にとって重要な要素であり、さまざまな複雑なシナリオで変数に値を適切に割り当てることができず、その結果が想像されます。

Java は優れた gc を備え、オブジェクト指向で、グローバル変数をサポートせず、データ メンバーは段階的な初期化をサポートし、非表示の割り当てにも明確な初期値があり、クラスの読み込みプロセス中にクラスと jar も制御できます。パッケージ間の依存関係。

C の初期化言語サポートは最も原始的であり、軽蔑的な意味で「最悪」です。オブジェクト指向をサポートしておらず、明確な意味のないグローバル変数、自由関数、および初期値が多くの影響を及ぼします。プログラミングの問題。

C++ はサポートが優れており、オブジェクト指向です。これらの言語の中で、オブジェクトの破棄と RAII をサポートする唯一の言語であり、C++11 では、複雑なオブジェクト間の初期化管理を最も強力に制御できます。 auto や decltype などの動的機能は C++ のパフォーマンスを向上させますが、C++ を C と同様に使用すると、結果は C 言語と同じになることがよくあります。これが、C++ が批判される理由です。これは、C 言語資産を継承することの欠点の 1 つであり、非常にうまく実行できる場合もあれば、非常に悪い実行になる場合もあります。

Go Go は、変数、配列、構造体、リスト、マップなどの構造に関して、初期化に関して Python から動的言語の一部を借用しています。これを見た人は誰でもそのシンプルさを賞賛すると思います。しかし、成熟するにはさらに多くのバージョンが必要です。gc は、1.5 より前のバージョンと比較して大幅に改善されています。現在、構築と破壊はサポートされておらず、ある程度まで遅延シミュレーションが行われますが、C++ の RAII および Java オブジェクトと比較すると、最終的には、他のメカニズムはまだ成熟しておらず、パフォーマンスやリソース漏洩などの欠陥が発生しやすいです。初期化は均一ではなく、New、make、{} などの特定の分野のさまざまな初期化メソッドも言語設計を公開しています。成熟した側面では、Java、C++、および C では new または malloc が 1 つだけ必要であることを知っておく必要があります。

6. エラー処理

エラー処理は、複雑なロジックの構成とプログラムの堅牢性にとって重要です。たとえば、単純なファイルの読み取りの場合、C 言語の処理はファイルを開き、その読み取り結果を判断する必要があります。データと判断 データの結果を読み取り、データをオブジェクトにマッピングし、各パラメータの結果を判断します...エラー処理がいかに面倒であるかがわかります。

Java/C++/Python/C# などの健全なプログラミング言語では、間違いなく例外処理が最優先されます。残念ながら、Go は現在これをサポートしていません。代わりに、複数値のリターン エラー コードまたはパニック回復メカニズムを使用して、ロジック全体をエラー処理コードで満たします。C のエラー リターンと比較すると、場合によっては状況が悪化する場合があります。

7. 動的構文

なぜ動的構文が重要な項目とみなされるのでしょうか? 他の操作効率の要素に関係なく、Python などを使用したことがある人は、特にオブジェクトの点でそのシンプルさを間違いなく新鮮に感じると思います。特にデータ、構成、分析を処理するシステムでは、プログラムのコードの 10% または 50% がここに含まれる場合があります。

Go は Python の動的構文の一部を借用しており、リフレクションの協力により、従来の JAVA や C++ の不器用さに比べて大幅な改善が図られています (特に文字列と型の互換性の点で)。データ処理に関しては、Java、C++、C よりも Go が優れていることは間違いありません。

8. その他の重要な言語機能

演算子のオーバーロードは、間違いなくスケーラブルな型の操作にとって最もエレガントです。関数のオーバーロードは、増分メンテナンス開発にも不可欠であり、健全な汎用言語にはすでに必須のオプションです。 C++11/Java/python/C#。Lambda は、データの初期化と制御ロジックの表現の点で間違いなく強力なツールです。Go 言語は、後続のバージョンではこれらの重要な文法機能の強化をまだサポートしていません。

エコロジー

1.標準ライブラリ

Java の標準ライブラリは間違いなく最も成熟していて強力であり、車輪を再発明することなく、すぐに使用できる再利用可能なクラスとライブラリを提供します。これが Java の成功の鍵ですが、Java はこれまでにその言語、クラスを開発してきました。ライブラリとフレームワークはすでに空母であり、その JVM を中心に新しいテクノロジと新しいライブラリが次々と登場しており、それを習得するための学習コストが最も高く、C++ と同じように、実際に遅れをとっています。 Java アプリケーションの分野では、新しいテクノロジのペースに追いつき、フレームワークと設計を非常に慎重に整理する必要があります。そうしないと、さまざまな再利用の結果、アプリケーションが非常に肥大化してしまいます。実行時のプログラムのリソース消費は、時々怖くなることがあります。これは、一部のプラットフォームが広く批判されている重要な点です。これは、万能のものではなく、カスタマイズする必要があります。開発者に必要な規模は間違いなく最も高価です。

C++11 標準ライブラリやブースト ライブラリと同様の基本機能を提供することに加えて、Go はアプリケーション ライブラリ、特に C++ と WEB プログラミングの観点から同時実行性をサポートする優れたライブラリも提供します。 Java 巨大さを恐れて、Go は間違いなく適切な選択に直面する必要があります。

C++11、同時プログラミングなどが標準ライブラリに組み込まれていると同時に、リアルタイム標準拡張ライブラリ ブーストは間違いなく、C++11 の基本的なアプリケーション再利用機能を完全に提供します。プラットフォームの同時実行性とネットワーク アプリケーション プログラミングは、従来の C/C++98 に取って代わり、暗黒時代に大きな一歩を踏み出すことができます。ただし、WEB、データベース、データ分析などのエンタープライズ アプリケーション開発の観点から見ると、C++11 ライブラリはまだ非常に薄いです。

2. ツールチェーン

C/C++/Java ツールチェーン、詳細に説明する必要はありません、エディターからのジャンプ、コードの参照、デバッグ、コードド​​キュメントの自動生成、複雑さの測定、ファインドバグ、メモリのトラブルシューティング、パフォーマンスモニタリング 認証が完了すると、Huawei の CI 環境も優れたサポートを提供するため、詳細は説明しません。

開発環境は通常 Eclipse または LiteIDE を選択します。万里の長城のため、プラグインを直接入手できません。Go プロジェクトには GoEclipse が必要で、コードジャンプには gocode が必要です。コードのデバッグには gdb をインストールする必要があります。これらを健全にするには、Guru と godef をインストールする必要があります。これは個人の状況に応じて異なります。作業には0.5~2日ほどかかるので、基本的にはすべてバッグに入っていてすぐに使えるLiteIDEをお勧めします。ただし、これらの環境は単純に使用することしかできず、開発作業中に次のような多くの重要なエクスペリエンスの問題に遭遇します:

編集と読み取りの経験が大幅に欠如している

コードの参照: オブジェクトのグローバルな参照および検索機能がありません。 、コード内の関数、変数を 1 つずつ開いて調べます。大規模なプロジェクトの場合は、ファイルが大きいため、Eclipse、ソース インサイト、および .net に慣れている場合は、この方法を使用します。コードの検索とジャンプがないとクレイジーです。名前や関数クラスのインターフェイスなどを出力できません。自動的にリストされることもありますが、前方および後方へのジャンプ機能は基本的に利用できません。これは、他の重要なエクスペリエンスを大きく損なうものです。リファクタリング ツールも自動コード生成ツールもありません。コンパイル エラーは簡単には見つかりません...

コード デバッグの経験が不足していることが重要です

Windows 環境では Gdb に依存するため、Gdb はあまり信頼できません。 Windows 環境では期待通りに動作することを期待してください。Linux 環境でデバッグするか、コンソールに print を書き込むのが最善です。Windows 環境に慣れている人は、新しい非グラフィカル環境に適応する必要があるかもしれません。

動的および静的検出ツールの欠如

循環的複雑さ、コーデックス スイートのセキュリティ チェック (C/C++ コードを直接呼び出すことができる)、メモリ チェック (ポインターを直接使用して C コードを呼び出すことができる) の欠如。

まとめ

基本的には使えますが、効率を向上させるいくつかの重要なエクスペリエンスが失われます。この段階では、Java/C++ 開発環境に 5 ポイントを与えると、Go 環境には 2 ポイントしか与えることができず、Go はほぼ年に 2 ポイント。大規模バージョンも開発環境に対する重要な課題です (Java/C++ は 5 年前、さらには 10 年前の環境を使用しています)。同社にはまだやるべきことがたくさんあり、切り替えの影響を制御する必要があります。バージョンの急速な反復が原因です。 Google が成熟する前の初期のオープンソースの目的の 1 つは、業界がより多くのツールを提供することを期待することであり、これらのツールは基本的にオープンソースの世界からの貢献であるため、Google は Java を直接使用でき、Go も使用できます。 , Go はまったく新しい言語であるため、開発環境の面では現時点では不十分です。

3. 言語の人気とオープンソース プロジェクトの分析

言語に関して言えば、必然的に TIOBE、PYPL、GitHub のランキングが思い浮かびます。そのデータを見てみましょう:

TIOBE データ

言語は、権威ある TIOBE 世界言語ランキングによって決定される必要があります。2016 年 6 月の最新データランキング:

マスターが Go、Java、C などの主流のプログラミング言語を分析します

新しい言語 Go の最新ランキングは 48 位で、Java との人気の差は 100 倍です。 2 年前の 2014 年 7 月、Go 言語はインデックス 0.222% で 30 位にランクされました。2015 年 7 月には、Go はトップ 50 にランクされていませんでした。2016 年 5 月の最新のランキングは、50+、38、48 でした。 、44、42。

過去 30 年間の言語人気ランキング:

マスターが Go、Java、C などの主流のプログラミング言語を分析します

PYPL の最新データ

マスターが Go、Java、C などの主流のプログラミング言語を分析します

GITHUB データ

オープンソース コミュニティ、github で最も代表的なオープンソース言語ランキングを選択:

マスターが Go、Java、C などの主流のプログラミング言語を分析します

コメント

過去 10 年間のデータによると、Java、C、C++、C#、Python、JavaScript、および PHP は常に強力な活力を持っています。これらの主流言語は現在衰退の兆しがないため、これらの主流言語の代替ではなく、場合によってはオプションの役割を果たします。

過去 10 年間、Java は常に安定した地位を占めており、組み込みおよびシステムレベルのプログラミングにおいて、また Python のシンプルさとエコロジーの観点からは常に支配的な地位を占めてきました。もちろん、パフォーマンスをあまり要求しないサーバーサイドのプログラムを書くためにも使用されます。言うまでもなく、Web サイトの 70% は PHP で書かれています。

2009 年の Go の正式バージョンはリリースまであと 2 年あり、熱狂の波を引き起こしました。Go 言語の父が言ったように、Python/Ruby が Java と比較してパフォーマンスを必要とする場合のオプションの役割が作成されました。より軽量で効率的な役割が作成され、先史時代の怪物 Java を活用するための足がかりとなりますが、言語、標準ライブラリ、およびツール チェーンの成熟度は重要な生産性を左右するため、まだ準備が整っていません。パフォーマンスの点では、新しい言語であるため、スケジューラもまだ準備ができていません。個別に説明する別の記事を参照してください。

4. 業界アプリケーション

Java、C、および C++ に関しては、前述したように、生産性の点では Java が総合的な航空母艦になりましたが、要求の厳しいパフォーマンスの点では、C/C++ が依然として堅実な地位を占めています。位置。実際、Go の場合、パフォーマンスが必要な場合には Python や Ruby などのスクリプト言語のオプションであることが証明されており、これらの動的言語スクリプトは基本的に管理ドメイン、つまり環境リソース アプリケーションの監視と展開で使用されます。など、サーバーサイド開発にそれらを使用する言語もあり、パフォーマンスが重要な場合、これらの言語は Java/C/C++ が得意とする分野では実際に不得手です。 Go は、データ分析や HTTP アプリケーションなどの一部のシナリオではオプションの役割を果たしますが、言語、環境、成熟度に関係なく、一般的で複雑なアプリケーション ビジネス分野では準備ができていません。 Go にはまだやるべきことがたくさんあり、さらに反復する必要があります。

業界の他の主流言語の簡単な概要

Python/JavaScript/C# は、Java/C/C++/PHP 言語と同様に、過去 10 年間で最も人気のある言語の 1 つです。それぞれの分野を支配しており、これらの言語も部門内または多かれ少なかれアプリケーションがありますが、ビジネスモジュールではないため、実際にはページ、ツール、管理ドメインの重点はそれほど高くありません。重要なエクスペリエンスの問題が含まれるため、十分な注意を払う必要があります。そうしないと、コードが大量に蓄積され、保守性とエクスペリエンスが損なわれることになります。

1. シェル/Python

インストール、デプロイメント、アップグレード、監視および管理タスクに関しては、基本的に依然として C シェルまたは B シェル スクリプトが使用されており、シェルの構文は不明瞭であり、その可読性は非常に低いです。同時に、編集とデバッグの環境は最も原始的であり、開発と保守の効率は基本的に最も低くなります。しかし、これらの非ビジネスコンポーネントは通常無視され、多くの特別な人員が蓄積されています。シェルのメンテナンスに精通している必要があります。 Python は、文字列、コンテナー、環境の処理に関しては、この記事にリストされている言語の中で最も単純で生産性の高い言語です。

作業ドメインのスクリプトには可能な限り Python を使用することをお勧めします。管理ドメインでは、グルー言語の名前に並ぶものはなく、Python は基本的にランキングの上位 5 言語に入ります。

2. JavaScript/Typescript

JavaScript は最も人気のある Web スクリプト言語であると言えますが、その設計には 2 つの欠点があり、1 つは単純すぎるということです。もう 1 つは型付けが弱いということです。構文エラーは実行時まで検出されません。原因不明の警告ボックスが Web ページ上に表示されることに遭遇した人はいないでしょう。 JS コードが 10,000 行を超えると、その単純な構文と弱い型付けは保守担当者に大きな負担をもたらします。私は JS ページを数百行しか書いたことがなく、弱い型付けに耐えられませんでした。Sina もダウンロードしました。 .com before 複雑なポータル Web サイトの JS コードを見て、さらに深く理解できない場合は、正直、諦めてしまいます。 Typescript は、まさに JavaScript のこれら 2 つの設計上の欠陥を解決するために登場しました。

Typescript については、おそらく JavaScript に慣れている人であれば、表現力を高めるオブジェクト指向やその他の言語機能を、単純さがより複雑になると考えて拒否するでしょう。しかし、もう 1 つの機能は、JavaScript にコンパイル時の型チェックを無料で追加することです。間違ったアプローチを指摘する記事を書くのと同じように、そのような機能を拒否する人はいないでしょう。したがって、JS ページを作成する人は TS のスーパーセットに切り替える必要があります。

3、C#

C# は Huawei にとってさらにニッチな言語ですが、最も人気のある言語の 1 つでもあり、Java の地位に真に挑戦できる言語は C# です。残念なことに、Microsoft はそれを Windows システムに限定しており、これにより世界トップクラスの言語およびコンパイラの専門家も制限されます。デンマークの Anders Hejlsberg の影響により、C# は現在、最も強力な統合環境に依存しており、オープンソースへの移行が進んでいます。

上記は Go、Java、C およびその他の主流のプログラミング言語の分析です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


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