CSDN はかつて「C 言語は死んだ」という記事を掲載し、物議を醸しました。実際、その記事は Ed Burnette のブログから転載されたもので、元のタイトルは「Die, C, die!」で、直訳すると「死ね、C 、死ね!」となります。 』は裁きではなく呪いを表現しています。翻訳では「C言語は死んだ」と書かれていたが、これは明らかに炎上を煽った誤解だ。 CSDN のネチズンは彼の見解を批判していますが、率直に言って、これらの批判は歪曲された翻訳テキストに基づいているため、何ら新しい点がないだけでなく、原著者の焦点を捉えていません。
最近、海外のテクノロジーコミュニティでは、Java が C 言語に代わる最も主流の基本的なソフトウェアプログラミング言語になる可能性があると議論する傾向があります。ほとんどの人が表明した意見から判断すると、Java が C に取って代わる傾向は依然として支持されています。
基本ソフトウェアとは、コンピューターの可能性を最大限に引き出し、上位層のアプリケーション ソフトウェアに効率的で信頼性の高い機能セットを提供することを主な任務とするソフトウェアの種類を指します。これらのソフトウェアは集中的に呼び出されるため、パフォーマンスのわずかな遅れが実際には何百倍、何千倍にも拡大します。したがって、基本的なソフトウェアの場合、パフォーマンスは信頼性と少なくとも同じくらい重要です。一部の基本的なソフトウェアのソース コードでは、醜いデザインや倒錯的なハッキング手法がよく見られますが、他の分野ではこれは推奨されませんが、基本的なソフトウェアではこれは許容されます。
C 言語は、オペレーティング システム、仮想マシン、デバイス ドライバーの開発に関して、一部の分野では依然として強力です。しかし、データベース、ネットワーク サーバー、グラフィックスや画像処理など、他の基本的なソフトウェア分野で C 言語が主流であり続ける理由は、実際には 2 つだけです。1 つは高速であること、もう 1 つは言語の数が多いことです。それに精通しており、豊富な経験を持つ人々。
しかし、これらの点の両方が現在挑戦されています。
まずはスピードです。 Java の実行速度は JDK1.4 で非常に高いレベルに達し、平均的な開発者にとって、彼が作成した C++ プログラムは同等の Java プログラムよりも速く実行できなくなりました。その後の JDK 5.0 と 6.0 では、実行パフォーマンスがさらに向上しました。さまざまな組織が実施した複数の評価結果では、Java と C 言語の全体的な実行効率の差が 2 倍未満であることが示されました。つまり、JDK はその速度とパフォーマンスの高さで知られています。多くのことを放棄した C 言語は、完全装備の Java の 2 倍未満になっています。言うまでもなく、新しいコンピューティング環境を考慮すると、C 言語の速度の利点は単なる幻想に過ぎない可能性があります。なぜなら、マルチ CPU コンピューティング プラットフォーム上で C 言語で大規模なプログラムを高速かつ正確に作成できる能力を持っている人は世界中で数人だけであり、その中でも大規模なプログラムを作成できる能力を持つ人は非常に少数だからです。 C 言語によるプログラム。大規模な異種ネットワーク環境で各ノードの計算能力を最大限に活用できる大規模な並列プログラム。言い換えれば、プログラムのパフォーマンスを 2 倍にすることができ、それによって 6,000 元相当の PC のコンピューティング能力を最大限に活用し、顧客は 1,000 元を節約できる可能性があります。しかし、1,000 台のマシンで構成される大規模な異種ネットワーク並列コンピューティング環境では、作成した C プログラムのパフォーマンスはおそらく、対応する Java プログラムよりもはるかに低くなり、後のメンテナンスコストが膨大になる可能性があります。 1000万以上であること。
2つ目は経験です。多くの人が優れた C スキルを持っていると主張していますが、実際には、真の C マスターであっても、エラー、特にメモリ エラーの発見とデバッグにはかなりの時間を費やす必要があります。 C で書かれた大規模なソフトウェアのほとんどにはメモリ エラーがあり、製品を安定させるには多大なエネルギーと時間を必要とします。これにはセキュリティ上の欠陥が考慮されていません。現在、ほとんどの開発者はコードのセキュリティに関する知識が非常に乏しいのが一般的ですが、C 言語ではこの欠点が特に顕著です。おそらく最大の課題は同時実行性です。同時実行性は、非常に高いレベルの抽象化で解決する必要がある非常に複雑な問題です。そのため、開発者は、高度な抽象化を行うことができません。いくつかの「同時実行プリミティブ」を使って同時実行プログラムを構築することは、鉛筆削りを使って大きな木を切るのと何ら変わりません。率直に言って、ほとんどの C プログラマーは効率的でバグのない同時実行プログラムを作成することができません。
残酷な事実として、ある人が C 言語がいかに上手で、経験が豊富であるかを言うとき、その人は単一マシンおよび単一スレッドのプログラムを C 言語で書いていると言っている可能性が非常に高いということです。 C 言語は、外部からの攻撃に対して脆弱で、時間的制約がほとんどなく、ユーザーは長い製品安定期間に耐えることができるアプリケーションでの経験が豊富です。残念ながら、市場環境やコンピューティング環境は完全に変わってしまいました。より複雑なコンピューティング環境に直面して、高品質の大規模ソフトウェアを C 言語で作成することは、真の専門家チームのみが完了できるタスクです。メモリ リークやスレッド エラーを何日も追跡してデバッグするのに苦労したことがあるなら、自分がおそらくそれほど専門家ではないことがわかるでしょう。
それに比べて、Java は、C 言語と比較すると、抽象化メカニズム、インフラストラクチャ、セキュリティ、同時実行性の点で、マキシムの機関銃と弓矢のようなものです。たとえば、同時実行性に関しては、Java 5.0 に追加された java.util.concurrent パッケージは、主流言語における同時実行性の問題に対する最も強力なサポート ライブラリである可能性があります。 Java のメモリ管理およびセキュリティ メカニズムは、プログラムの欠陥を効果的に削減できることも証明されています。これがこの忌まわしい記事の原文の意図だった。
したがって、私の態度は明確であり、C を Java に置き換えることは進歩的なアイデアだと思います。しかし、世の中には進歩的なアイデアはたくさんありますが、夢を実現できるものはほとんどありません。 Java は本当に基本ソフトウェアの分野で C 言語の有力な代替となり得るのでしょうか?少なくとも短期的には不可能だと思います。理由は次のとおりです。
1. 人々の問題。 C言語で優れた基本ソフトウェアを書ける人は多くありませんが、Javaで書ける人はさらに少ないでしょう。 Java には何百万人もの開発者がいますが、彼らは何をしているのでしょうか?彼らのほとんどはエンタープライズレベルの開発と Web 開発に従事しています。Java のメモリ モデルを本当に理解している人はどれだけいるでしょうか。コンカレント パッケージで提供されるツールの使用に習熟している人は何人いますか?長年 Java を使用している人の多くは、ソケット プログラムを作成したことがなく、Java マルチスレッドのオーバーヘッドを理解しておらず、パフォーマンスの診断とチューニングを実行する方法を知りません。これらは、基本的なソフトウェアを作成する際に必須のスキルです。ほとんどの Java プログラマは、Java を学んだばかりの後に Web 開発に目を向け、厚い抽象化層と豪華な構造を備えた大規模で複雑なフレームワークを次々と習得することに主なエネルギーを費やしているだけでなく、実際のコンピュータ アーキテクチャを理解していないことは明らかです。 Java で仮想化されたコンピューティング環境についてはわかりません。したがって、Java コミュニティ プログラミングを次世代の基本的なソフトウェア開発作業を担う先駆者に変えることは非常に難しいだけでなく、十分な時間を必要とします。
2. Java のメモリ消費量が多すぎます。システムレベルのプログラムの場合、メモリ消費量が多いということは、キャッシュ ヒット率が低下し、ディスクとデータを交換する可能性が高まることを意味し、パフォーマンスに重大な影響を及ぼします。現在でも、Java が遅いことが主な理由だと考えている人が多くいますが、その主な理由は Java の動作が遅いことではなく、過剰なメモリ消費によって引き起こされる全体的なパフォーマンスの低下です。この問題が解決されない場合、Java はより高度な基本ソフトウェアを作成するためにのみ使用できます。おそらくコンピュータハードウェアの発展により、この問題は徐々に解決されるのでしょうか?
3. スタイルの問題。この問題が一番深刻だと思います。基本的なソフトウェア開発は、自由、直接性、透明性、シンプルさ、効率性を主張します。それは、短剣のように鋭く、戦士のように勇敢で、農場主のようにシンプルでなければなりません。複雑で豪華なデザインや抽象化の層とは反対のものでなければなりません。 、構造の複雑さと不必要な柔軟性。 Java コミュニティが長年にわたって形成してきた設計スタイルは、これとは相容れず、逆であるとさえ言えます。 Java はイデオロギー的にエンタープライズ アプリケーション ソフトウェアの開発を指向しているため、アーキテクチャ、デザイン パターン、標準、ルール、知名度、豪華な宮殿の気質に特に重点を置いています。 Cでは、食事をするときは、ボウルを持ち上げて飲み、箸を置いて悪態をつき、腕を投げ出して肉をつかみ、袖をまくって油を塗るだけです。 Java では、何かを行うために、最初にオブジェクトを新規作成し、次にそのオブジェクトをパラメータとして使用して別のオブジェクトを新規作成することがよくあり、これを n 回繰り返して、本当に必要なオブジェクトを取得し、最後にそのオブジェクトのオブジェクトを呼び出します。 1つの方法は、お香を焚く、顔を洗う、食事中に口と手をうがいする、用心深く敬意を払うなどです。 Cでは、問題に遭遇したとき、チェン・ヤオジンのギャングバージョンのように、無法者のようにならなければなりません。彼はあなたのことなど気にしていませんが、3つの軸で突進し、それができないことを恐れています。あなたを殺してください。ジャワでは、問題に遭遇したときは、宋香功のようにならなければなりません。発言しなければなりません。正直でなければなりません。礼儀正しい国でなければなりません。心を開いて、注意しなければなりません。 Java のスローガンは、あなたが死ぬかどうかにかかわらず、まず子供に良い印象を与えなければなりません。 この一連の面倒なことは、基本的なソフトウェア開発には不必要であり、慣れるのが困難です。これは Java 言語の問題ではないことに注意してください。実際、Java 自体はそれほど複雑で複雑である必要はありません。言語自体の観点から見ると、Java は活発で直接的な場合もあれば、活発な場合もあります。ただ、10 年以上この方法で Java を使用している人はほとんどいないため、誰もが「一度に 1 ステップずつ実行しない場合、Java でプログラムを作成するにはどうすればよいでしょうか?」ということをもはや知りません。
上記の理由(包括的ではないかもしれませんが)により、最近まで、一流の基本ソフトウェアのほとんどはC言語で書かれているか、少なくともそのコア部分は依然としてCに基づいていました。そして、この状況が短期的に大きく変わるとは思えません。もちろん、Java コミュニティが上記の問題を克服し、Java 自体の利点を最大限に発揮し、基礎的な分野で一流のサポート ソフトウェアを多数開発できれば、状況は変わる可能性があります。進歩的であり、歓迎に値します。
上記は Java が C 言語を置き換える可能性に関するものです。その他の関連コンテンツについては、PHP 中国語 Web サイト (m.sbmmt.com) に注目してください。