CSDN veröffentlichte einmal einen Artikel „C Language is Dead“, der einige Kontroversen auslöste. Tatsächlich wurde dieser Artikel aus Ed Burnettes Blog nachgedruckt. Der Originaltitel lautete „Stirb, C, die!“, was wörtlich mit „Stirb, C, die!“ übersetzt werden sollte. „drückt eher einen Fluch als ein Urteil aus. In der Übersetzung hieß es „C-Sprache ist tot“, was offensichtlich ein Missverständnis ist, das die Flammen angefacht hat. CSDN-Internetnutzer haben seine Ansichten kritisiert, aber ehrlich gesagt, da diese Kritik auf einem verzerrten übersetzten Text basiert, ist nicht nur nichts Neues, sondern sie erfasst auch nicht den Fokus des ursprünglichen Autors.
In letzter Zeit gibt es in ausländischen technischen Communities einen Trend, und viele Leute diskutieren über Java als Ersatz für die C-Sprache gängige grundlegende Software-Programmiersprache. Nach den Meinungen der meisten Menschen zu urteilen, gibt es immer noch Unterstützung für den Trend, Java durch C zu ersetzen.
Basissoftware bezieht sich auf eine Art von Software, deren Hauptaufgabe darin besteht, das Potenzial des Computers voll auszuschöpfen und einen effizienten und zuverlässigen Funktionssatz für Anwendungssoftware der oberen Ebene bereitzustellen. Diese Software wird intensiv aufgerufen, und eine kleine Leistungsverzögerung wird sich in der Praxis um das Hundert- oder Tausendefache vergrößern. Für Basissoftware ist die Leistung also mindestens genauso wichtig wie die Zuverlässigkeit. Im Quellcode einiger Basissoftware sehen wir oft einige hässliche Designs und einige perverse Hacking-Techniken. In anderen Bereichen wird dies nicht empfohlen, aber in Basissoftware ist dies akzeptabel.
Die C-Sprache ist in einigen Bereichen immer noch stark. In Bezug auf die Entwicklung von Betriebssystemen, virtuellen Maschinen und Gerätetreibern ist sie möglicherweise der ewige König. Aber in anderen grundlegenden Softwarebereichen wie Datenbanken, Netzwerkservern, Grafik- und Bildverarbeitung usw. gibt es eigentlich nur zwei Gründe, warum die C-Sprache weiterhin dominiert. Der eine ist, dass sie schnell ist, und der andere, dass es viele gibt Menschen, die sich damit auskennen und über umfangreiche Erfahrungen verfügen.
Aber beide Punkte werden jetzt in Frage gestellt.
An erster Stelle steht die Geschwindigkeit. Die Ausführungsgeschwindigkeit von Java erreichte in JDK1.4 ein solches Niveau, dass für einen durchschnittlichen Entwickler das von ihm geschriebene C++-Programm nicht mehr schneller läuft als das entsprechende Java-Programm. Die nachfolgenden JDK 5.0 und 6.0 verbesserten die Ausführungsleistung weiter. Mehrere von verschiedenen Organisationen durchgeführte Evaluierungsergebnisse zeigten, dass die Lücke bei der Gesamtausführungseffizienz zwischen der Java- und der C-Sprache weniger als doppelt so hoch ist Geschwindigkeit Die C-Sprache, die vieles aufgegeben hat, ist jetzt weniger als doppelt so schnell wie das voll ausgestattete Java. Ganz zu schweigen davon, dass der Geschwindigkeitsvorteil der C-Sprache unter Berücksichtigung der neuen Computerumgebung möglicherweise nur eine Illusion ist. Denn es gibt nur wenige Menschen auf der Welt, die in der Lage sind, schnell und korrekt große Programme in C-Sprache auf Multi-CPU-Computerplattformen zu schreiben, und unter diesen Menschen gibt es nur sehr wenige Menschen, die in der Lage sind, große Programme zu schreiben Programme in C-Sprache. Ein umfangreiches Parallelprogramm, das die Rechenleistung jedes Knotens in einer großen, heterogenen Netzwerkumgebung vollständig nutzen kann. Mit anderen Worten: Möglicherweise können Sie die Programmleistung verdoppeln und so das Rechenpotenzial eines PCs im Wert von 6.000 Yuan voll ausschöpfen und Kunden 1.000 Yuan sparen. Wenn es sich jedoch um eine große heterogene Netzwerk-Parallel-Computing-Umgebung mit 1.000 Maschinen handelt, ist die Leistung des von Ihnen geschriebenen C-Programms wahrscheinlich weitaus geringer als die des entsprechenden Java-Programms, ganz zu schweigen von den enormen späteren Wartungskosten. Der Verlust kann 10 betragen Millionen oder mehr.
Das Zweite ist Erfahrung. Viele Leute behaupten, über hervorragende C-Kenntnisse zu verfügen, aber tatsächlich müssen selbst echte C-Meister viel Zeit damit verbringen, Fehler, insbesondere Speicherfehler, zu finden und zu debuggen. Die meiste in C geschriebene umfangreiche Software weist einige Speicherfehler auf, was viel Energie und Zeit erfordert, um das Produkt zu stabilisieren. Dabei sind Sicherheitslücken nicht berücksichtigt. Die meisten Entwickler verfügen mittlerweile über sehr geringe Kenntnisse in der Codesicherheit. Sicherheitslücken sind in Code recht häufig, und in der Sprache C ist dieser Mangel besonders offensichtlich. Die vielleicht größte Herausforderung ist das Problem der Parallelität, das auf einer sehr hohen Abstraktionsebene gelöst werden muss. Der Abstraktionsmechanismus der C-Sprache ist daher für Entwickler nicht geeignet Nur mit einigen „Parallelitätsprimitiven“ zu beginnen, um ein gleichzeitiges Programm zu erstellen, unterscheidet sich nicht von der Verwendung eines Bleistiftspitzers, um einen großen Baum zu sägen. Um es ganz klar auszudrücken: Die meisten C-Programmierer sind einfach nicht in der Lage, effiziente und fehlerfreie gleichzeitige Programme zu schreiben.
Die grausame Tatsache ist also, dass, wenn jemand sagt, wie gut er in der C-Sprache ist und wie erfahren er ist, es sehr wahrscheinlich ist, dass er über die Verwendung der C-Sprache spricht Es ist sehr erfahren im Schreiben von Anwendungen, die auf einer Maschine und einem Thread basieren und nicht von der Außenwelt angegriffen werden. Es besteht kein Druck auf das Zeitbudget und Benutzer können eine lange Produktstabilitätsphase ertragen. Leider haben sich das Marktumfeld und die Computerumgebung völlig verändert. Angesichts einer komplexeren Computerumgebung ist die Verwendung der C-Sprache zum Schreiben hochwertiger, umfangreicher Software eine Aufgabe, die nur ein Team echter Experten bewältigen kann. Wenn Sie jemals tagelang damit zu kämpfen hatten, ein Speicherleck oder einen Threading-Fehler aufzuspüren und zu beheben, wissen Sie, dass Sie wahrscheinlich kein solcher Experte sind.
Im Vergleich dazu ist Java in Bezug auf Abstraktionsmechanismen, Infrastruktur, Sicherheit und Parallelität im Vergleich zur C-Sprache wie ein Maxim-Maschinengewehr im Vergleich zu Pfeil und Bogen. Was die Parallelität betrifft, ist beispielsweise das zu Java 5.0 hinzugefügte Paket java.util.concurrent möglicherweise die leistungsstärkste Unterstützungsbibliothek für Parallelitätsprobleme in Mainstream-Sprachen. Auch die Speicherverwaltungs- und Sicherheitsmechanismen von Java können nachweislich Programmfehler wirksam reduzieren. Dies war die Absicht des Originaltextes des vernichtenden Artikels.
Meine Einstellung ist also klar: Ich denke, dass Java eine fortschrittliche Idee ist, aber nur wenige davon können Träume verwirklichen wahr werden. Kann Java im Bereich Basissoftware wirklich ein starker Ersatz für die Sprache C sein? Ich glaube nicht, dass dies zumindest kurzfristig möglich ist. Die Gründe sind folgende:
1. Das Problem der Menschen. Obwohl es nicht viele Leute gibt, die hervorragende Basissoftware in C-Sprache schreiben können, gibt es wahrscheinlich noch weniger Leute, die sie in Java schreiben können. Java hat Millionen von Entwicklern, aber was machen sie? Die meisten von ihnen beschäftigen sich mit der Entwicklung auf Unternehmensebene und der Webentwicklung. Wie viele Menschen verstehen das Speichermodell von Java wirklich? Wie viele Personen beherrschen die im Concurrent-Paket bereitgestellten Tools? Viele Leute, die Java seit vielen Jahren verwenden, haben noch nie ein Socket-Programm geschrieben, verstehen den Overhead von Java-Multithreading nicht und wissen nicht, wie man Leistungsdiagnosen und -optimierungen durchführt. Dies sind wesentliche Fähigkeiten beim Schreiben grundlegender Software. Die meisten Java-Programmierer wenden sich der Webentwicklung zu, nachdem sie gerade Java gelernt haben, und verbringen ihre Hauptenergie damit, nacheinander große, komplexe Frameworks mit dicken Abstraktionsschichten und wunderschönen Strukturen zu beherrschen. Es ist klar, dass sie nicht nur kein Verständnis für die tatsächliche Computerarchitektur haben Ich weiß nichts über die durch Java virtualisierte Computerumgebung. Daher ist es nicht nur sehr schwierig, die Java-Community-Programmierung in eine Avantgarde umzuwandeln, die die nächste Generation grundlegender Softwareentwicklungsarbeiten übernehmen kann, sondern erfordert auch genügend Zeit.
2. Der Speicherverbrauch von Java ist zu groß. Bei Programmen auf Systemebene führt ein hoher Speicherverbrauch dazu, dass die Cache-Trefferquote sinkt und die Möglichkeit des Datenaustauschs mit der Festplatte erhöht wird, was gravierende Auswirkungen auf die Leistung hat. Heutzutage denken viele Leute immer noch, dass Java langsam ist. Der Hauptgrund dafür ist nicht, dass Java langsam läuft, sondern der allgemeine Leistungsabfall, der durch übermäßigen Speicherverbrauch verursacht wird. Wenn dieses Problem nicht gelöst wird, kann Java nur zum Erstellen einer Basissoftware auf höherer Ebene verwendet werden. Vielleicht wird dieses Problem mit der Entwicklung der Computerhardware allmählich gelöst?
3. Die Frage des Stils. Ich denke, dieses Problem ist das schwerwiegendste. Grundlegende Softwareentwicklung setzt sich für Freiheit, Direktheit, Transparenz, Einfachheit und Effizienz ein. Sie sollte so scharf wie ein Dolch, so mutig wie ein Krieger und so einfach wie ein Bauer sein. Sie sollte im Gegensatz zu umständlichen und prächtigen Designs und Ebenen der Abstraktion stehen , und Komplexität Struktur und unnötige Flexibilität. Der von der Java-Community im Laufe der Jahre geformte Designstil ist damit nicht kompatibel und kann sogar als das Gegenteil bezeichnet werden. Java ist ideologisch auf die Entwicklung von Unternehmensanwendungssoftware ausgerichtet und legt daher besonderen Wert auf Architektur, Designmuster, Standards, Regeln, hohe Bekanntheit und ein luxuriöses Palasttemperament. In C isst man einfach die Schüssel, um zu trinken, legt die Stäbchen hin, um zu fluchen, wirft die Arme ab, um nach Fleisch zu greifen, und krempelt die Ärmel hoch, um Öl aufzutragen. Um in Java etwas zu tun, müssen Sie oft zuerst ein Objekt neu erstellen und dieses Objekt dann als Parameter für ein neues anderes Objekt verwenden. Wiederholen Sie dies n-mal, um das Objekt zu erhalten, das Sie wirklich benötigen, und rufen Sie schließlich das Objekt dieses Objekts auf. Eine Methode besteht darin, Weihrauch zu verbrennen, das Gesicht zu waschen, beim Essen mit Mund und Händen zu gurgeln, vorsichtig und respektvoll zu sein. Wenn Sie in C auf Probleme stoßen, sollten Sie wie ein Gesetzloser sein, wie die Gangsterversion von Cheng Yaojin. Er kümmert sich nicht um Sie, aber er stürmt mit drei Äxten vorwärts und hat Angst, dass er es nicht schaffen wird um dich zu töten. Wenn Sie in Java auf Probleme stoßen, müssen Sie wie Song Xianggong sein, Sie müssen eine Aussage machen, Sie müssen ehrlich sein, Sie müssen ein Land der Etikette sein, Sie müssen Ihre Allüren öffnen und Sie müssen vorsichtig sein. Der Slogan von Java lautet: Egal ob Sie sterben oder nicht, Sie müssen zuerst Ihr Kind beeindrucken. Diese umständlichen Dinge sind für die grundlegende Softwareentwicklung sowohl unnötig als auch schwer zu gewöhnen. Es sollte beachtet werden, dass dies bei der Java-Sprache kein Problem darstellt. Tatsächlich muss Java selbst nicht so kompliziert und barock sein. Aus der Perspektive der Sprache selbst kann Java lebhaft und direkt oder herzhaft sein. Es ist nur so, dass es seit mehr als zehn Jahren fast niemand mehr auf diese Weise verwendet hat, sodass nicht mehr jeder weiß: Wie schreibt man ein Programm in Java, wenn man es nicht Schritt für Schritt macht?
Gerade aus den oben genannten Gründen (die möglicherweise nicht vollständig sind) wurde bis vor kurzem der Großteil der erstklassigen Basissoftware in C-Sprache geschrieben Zumindest sein Kernteil davon basiert immer noch auf C. Und ich glaube nicht, dass sich diese Situation kurzfristig wesentlich ändern wird. Wenn es der Java-Community gelingt, die oben genannten Probleme zu überwinden, die Vorteile von Java selbst voll auszuschöpfen und eine große Anzahl erstklassiger unterstützender Software in grundlegenden Bereichen zu entwickeln, kann sich die Situation natürlich ändern, und diese Änderung gilt auch fortschrittlich und würdig, willkommen zu sein.
Das Obige ist die Möglichkeit, dass Java die C-Sprache ersetzt. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!