Java-Programmiersprache
Java ist eine objektorientierte Programmiersprache, die plattformübergreifende Anwendungssoftware schreiben kann. Es handelt sich um eine Java-Programmiersprache und Java-Plattform, die im Mai 1995 von Sun Microsystems eingeführt wurde. der allgemeine Name von JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)).
Dieser Artikel analysiert hauptsächlich C, C++98, C++11, Java und Go und erörtert hauptsächlich die Schlüsselfunktionen der Sprache. Im Diskussionsprozess werden wir den Austausch zwischen den Sprachprogrammierungsexperten von Huawei und den wichtigsten Entwicklern der Telekommunikationssoftware von Huawei kombinieren. Wir werden die Streitigkeiten über Sprachpräferenzen oder Sprachsekten aufgeben und versuchen, die Merkmale und Mängel jeder Sprache von einem objektiven Standpunkt aus zu diskutieren Eine faire Perspektive dient der Auswahl der Sprache als objektive Referenz.
Schreiben Sie dies auf und hoffen Sie, die Korrekturen und das Feedback aller zu erhalten, um die gesamte Analyse objektiver zu gestalten. In Bezug auf die Leistung werde ich mich auf eine eingehende Analyse und Referenz von Go konzentrieren. Es gibt viel Inhalt und die Erwartungen werden Sie nicht abschrecken.
Gesamtüberblick über die Sprache
1. Go
In Bezug auf die Parallelität bieten die Goroutine- und Kanalmechanismen einen einfachen und reibungslosen Parallelitätsmechanismus auf Sprachebene In Bezug auf die Leistung bietet es eine Leistung, die der von Java in nichts nachsteht (in Bezug auf den Speicherressourcenverbrauch hat es offensichtliche Vorteile gegenüber Java und anderen dynamischen Sprachen. In Bezug auf die Syntax hat es einige). In Bezug auf die Objektinitialisierung, -konstruktion und -serialisierung können diese Verarbeitungscodes 10 bis 50 % des Codes ausmachen, insbesondere für Datenverarbeitungs-, Konfigurations- und Protokollzuordnungsszenarien Bei C, C++ und Java ist dieser Aspekt ungeschickt, was der Schlüssel dafür ist, warum dynamische Sprachen so faszinierend sind.
Dies ist auch der Hauptgrund, warum die erste Version der Go-Sprache bei ihrer Veröffentlichung so viel Aufmerksamkeit erregte, insbesondere für dynamische Sprachen. Sie bietet Parallelitäts- und Leistungsvorteile, die dynamische Sprachen nicht haben, Pike Der Zweck des Entwurfs der Go-Sprache besteht darin, als weitere optionale Rolle für C/C++ zu dienen (beachten Sie, dass sie kein Ersatz ist und ihr Entwurfsziel nicht darin besteht, sie zu ersetzen). Pike, der Vater der Go-Sprache, Chef-Softwareentwickler Bei Google erklärte er dies in seiner „Road to Simplicity“-Rede 2012 voller Frustration und eines der Zitate: „Obwohl wir erwarteten, dass C++-Programmierer Go als Alternative sehen würden, kommen die meisten Go-Programmierer aus Sprachen.“ „Der Wert von C++ liegt im Wesentlichen darin, dass die Sprache umfassendere Abstraktion, Eleganz und flexiblere Funktionen bietet und diese Ausdrucksmöglichkeiten keine Hardwarekosten verursachen. Die C-Sprache verursacht keine Hardwarekosten Designziel von Anfang an, aber die Sprachausdrucksfähigkeit wird durch C++ gelöst, und die Denkrichtung von Go ist offensichtlich nicht Nullkosten, zumindest nicht Null-CPU-Kosten, Gos Vorschlag besteht eher darin, die Arbeitsbelastung des Programmierers zu minimieren.
Das eine ist das ultimative Streben nach kostenloser Hardware, und das andere besteht darin, die Arbeitsbelastung der Programmierer zu minimieren. Go kann nicht beide Ziele gleichzeitig erreichen wählt dynamische Syntax und gc ist dazu bestimmt, Entwicklungseffizienz zu wählen und Hardwareeffizienz für Entwicklungseffizienz zu opfern, also geht es in eine andere Richtung, nämlich die Anwendungsrichtung, in der Java gut ist, insbesondere die aktuellen Netzwerk- und HTTP-Anwendungen, die eine gute Standardbibliothek erfordern und Ökosystemunterstützung. In Bezug auf die Standardbibliothek bietet Go eine leichtere und hervorragende Codebibliothek für die Verarbeitung von TCP/http/xml/json/Verschlüsselung und Entschlüsselung usw. sowie Unterstützung für hohe Parallelität für http, das Kernprotokoll von Das Netzwerk wurde mit einem Sprungbrett zur Nutzung von Java ausgestattet.
Aber wir müssen uns mit seinen aktuellen Mängeln auseinandersetzen, was wichtige Sprachmerkmale und Genauigkeit betrifft, und es gibt immer noch viele Fehler oder vorübergehende Lösungen, die sich jedoch auch auf die Reife seiner Ökologie auswirken werden. Diese Probleme müssen in der neuen Version noch gelöst werden. Die erste Version der Go-Sprache wurde am 28. März 2012 offiziell veröffentlicht. Bisher wurden in fast einem Jahr zwei Hauptversionen veröffentlicht, zwischen denen mehrere Beta- und RC-Versionen veröffentlicht wurden dass die Go-Sprache noch nicht vollständig ist.
Zusammenfassung
Go hat sich als idealer Kandidat für Python und Ruby im Hinblick auf dynamische Sprachleistungsanforderungen im Hinblick auf die Anwendungsentwicklung erwiesen, insbesondere bei HTTP-bezogenen Anwendungen Als Herausforderer von Java bietet es neben C/C++ auch eine weitere Rolle an Orten, an denen die Kontrolle über Ressourcen nicht so stark ist.
In Bezug auf die Produktivität sind die Sprachfunktionen und das Ökosystem noch nicht ausgereift, und die Version wird im Vergleich zu dynamischen Sprachen und Java noch nicht ausgereift Diese Sprachen sind in bestimmten Szenarien eingeschränkt. Langfristig werden mit der starken Unterstützung von Google weiterhin neue Funktionen und Bibliotheksanwendungsfunktionen hinzugefügt. Zu diesem Zeitpunkt wird jedoch empfohlen, dass der Umfang und die Komplexität des Programms verbessert werden Die Sprache und die Ökologie sind noch nicht vollständig entwickelt. Um eine fundierte Unterstützung zu bieten, müssen wir uns auch der Risiken bewusst sein, die durch die Unreife und die schnelle Versionsiteration entstehen.
2. Java
Der Erfolg von Java war auf die starke Unterstützung großer Unternehmen wie SUN, IBM und Oracle zurückzuführen, die vor 10 Jahren von Unix-Systemen dominiert wurden und es dem Unternehmen ermöglichten, im Bereich Unternehmensanwendungen und WEB-Anwendungen fest Fuß zu fassen , und in den folgenden 10 Jahren verließ es sich in der ersten Jahreshälfte auf die Revolution von x86+Linux, um seinen Anteil weiterhin zu behaupten. In der zweiten Jahreshälfte war es der Erfolg von Android, der es ihm ermöglichte, die Spitze zu erreichen wieder nach dem Stocken und Anhalten. In den letzten zwei Jahrzehnten hat Java das leistungsstärkste Ökosystem aufgebaut. Man kann sagen, dass Java seit langem ein riesiger Flugzeugträger ist, was seinen Status und Erfolg beweist . Die Komplexität seiner Sprache, Bibliotheken, Frameworks und Ökosysteme stellt jedoch große Hindernisse für Techniker dar, wie z. B. Parallelität, der synchronisierte Mechanismus der Sprache, die Benachrichtigung und anschließende Gleichzeitigkeit der Standardbibliothek, und HTTP kann auch über den Apache + Tomcat-Container usw. abgerufen werden. Basierend auf der JVM-Technologie weist Java eine gute Interoperabilität mit anderen Sprachen wie Scala auf. Sie können zwischen Actor und Akka wählen, das ebenfalls in Scala geschrieben ist Szenarien für mehr. Es gibt zu viele...
Das ist die Welt von Java. Es gibt nie zu viel und es besteht keine Notwendigkeit, das Rad neu zu erfinden. Es wurde durch die Geschichte herbeigeführt und Java bietet zu viele Optionen. Nach eingehender Untersuchung werden Sie wissen, dass die Lernkosten für Java höher sind als für C++ und dass die Anforderungen an Programmierer höher sind als für C++ Wenn Sie vor 7 oder sogar 10 Jahren noch Java-Technologie verwenden, muss das technische Personal das Framework und das Design sehr sorgfältig organisieren, da sonst das Ergebnis verschiedener Wiederverwendungen ein extrem aufgeblähtes Programm ist, dessen Ressourcenverbrauch während der Laufzeit Sie manchmal erschreckt Dies ist der Hauptgrund, warum zu viele auf Java basierende Plattformen weithin kritisiert werden. Die Wiederverwendung ist ein zweischneidiges Schwert und muss nicht auf eine einheitliche Größe angepasst werden , es sei denn, die Sprache und die Standardbibliothek bieten die besten und direktesten Optionen.
Zusammenfassung
Java hat seit langem bewiesen, dass es allumfassend ist. In den letzten zehn Jahren war es im Grunde die am besten bewertete Sprache und hat das leistungsfähigste Ökosystem aufgebaut. Um das nächste Missverständnis aufzuklären: Heutzutage sind die Lernkosten von Java und die Qualifikationsanforderungen für Entwickler viel höher als die von C/C++. Vielleicht können die meisten Entwickler den Flugzeugträger von Java nicht kontrollieren. Wenn Sie Java über einen längeren Zeitraum verwenden möchten, müssen Sie mit der neuesten Java-Technologie Schritt halten. Gleichzeitig müssen Sie über ein gutes Gespür für die Wiederverwendung verfügen. Andernfalls werden höhere Anforderungen an das Personal gestellt Extrem einfach zu schreibende Ressourcenbelegung und Laufzeiteffizienz, die einer Anwendung Angst machen wird.
3. C, C++98, C++11...
C/C++ nimmt immer noch eine solide Position in der eingebetteten und Systemebene-Programmierung ein, da Programme wie Java und Der Schwerpunkt von Sprachen wie Go liegt offensichtlich auf der Seite der Entwicklungseffizienz. Bitte beachten Sie die Diskussion im vorherigen Kapitel zu Go.
In Bezug auf Parallelität, Netzwerk- und Anwendungsprogrammierung befindet es sich jedoch in einem dunklen Zeitalter der Geheimhaltung. Die Sprache selbst bietet keine Unterstützung, und die zu dünne Standardbibliothek hat diesbezüglich keine Ambitionen Hinsichtlich des Standards von C/C++ befürchte ich, dass die Größe der Bibliothek niemals mit der von Java und Go vergleichbar sein wird, da C/C++ von keinem großen kommerziellen Unternehmen kontrolliert wird und eine völlig „freie Standardbibliothek“ ist erfordert kontinuierliche Investitionen großer kommerzieller Unternehmen. Aus diesem Grund dauerte es 13 Jahre, bis die Standardbibliothek ein umfassendes Update erhielt. Dies führte direkt dazu, dass C/C++ die System-APIs verschiedener Hardwareplattformen kapseln musste. Bevor Linux+x86 Unix im großen Stil besiegte, erschwerten zahlreiche Unix-Systeme die plattformübergreifende Programmierung. Das ACE-Plattformprogramm und die ebenso schlechte MFC-Bibliothek voller makrostatischer globaler Variablen wurden von Programmierern offensichtlich schnell aufgegeben Warum gibt es so viele Menschen, die Angst davor haben, dass C/C++ geheim bleibt? Zu dieser Zeit stellte Java Standardbibliotheken für Multithreading, Netzwerk- und Anwendungsentwicklung sowie plattformübergreifende Unterstützung auf Basis der JVM-Technologie bereit und drängte Java zu einer Mainstream-Programmiersprache, was der Schlüssel zum Erfolg von Java in den ersten zehn Jahren war.
Für C/C++-Programmierer gibt es ein aufregendes Ereignis. Im Vergleich zu C++98 ist es ein großer Fortschritt in Bezug auf die Sprache und die Standardbibliothek Es ist übertrieben zu sagen, dass der Vater von C++ eine neue Sprache ist. Gleichzeitig haben die Beiträge so vieler Top-C++-Experten zur Boost-Bibliothek (die eigentlich eine Echtzeit-Standardbibliothek ist) bereits einen großen Unterschied gemacht von Netzwerken, gleichzeitiger Programmierung und einigen grundlegenden Anwendungen. Es bietet der Bibliothek die beste Leistung, was die Entwicklungsschwierigkeiten in diesem Bereich erheblich verringert. Herkömmliche C++-Programmierer müssen so schnell wie möglich auf C++11 umsteigen, was eine Aktualisierung der Kompilierungsumgebung erfordert, und die Aktualisierung der Kompilierungsumgebung wird die leistungsstärksten Tools für die Speichererkennung und Leistungsanalyse mit sich bringen, die CC++ einst am meisten hatte In Bezug auf grenzüberschreitende Probleme und Leckagen kann es angesichts der Version gcc5.2 und der neuesten CPU von Intel zu einer Speicherüberlastung kommen. Gleichzeitig ist das von Intel bereitgestellte Leistungsanalysetool vtune das mächtigste Werkzeug, das mir bisher begegnet ist.
Zusammenfassung
Traditionelle C++-Programmierer sollten so schnell wie möglich auf C++11 umsteigen und die neue Standardbibliothek und Boost nutzen, was die Effizienz der Entwicklung und Wartung bei der Programmierung auf eingebetteter und Systemebene erheblich verbessern wird. Wir müssen eine neue Sprache annehmen, und eine umfassende Verbesserung der Sprache ist auch eine neue Sprache im weitesten Sinne. Sie muss auch in eine ebenso wichtige Position gebracht werden, um die Wirksamkeit vorhandener Ressourcen besser zu nutzen. Was die Anwendungsentwicklung betrifft, so sollte die Standardbibliothek in den Bereichen, in denen sie am besten ist, ehrlich gesagt ihr Bestes geben, da die Standardbibliothek zum jetzigen Zeitpunkt nicht erwartet, dass sie mit Go konkurrieren kann, geschweige denn mit Java.
Sprachfunktionen
1. Parallelität
Go bietet die größten Vorteile in Bezug auf Leichtigkeit und Einfachheit: Goroutine- und Kanalmechanismen bieten einen leichten und reibungslosen Parallelitätsmechanismus auf Sprachebene, die Standardbibliothek stellt auch darauf basierende Anwendungsbibliotheken bereit;
In Bezug auf die Hybridprogrammierung in der gleichzeitigen Welt bietet Java die größte Auswahl und ökologische Unterstützung: Nach der Veröffentlichung von java.util.concurrent vor zehn Jahren hat es Java vorangetrieben Der Höhepunkt der gleichzeitigen Programmierung. Unter der Cloud weist Java eine gute Interoperabilität mit Frameworks und Sprachen mit hoher Parallelität wie Scala auf Die Standardbibliothek und die Boost-Bibliothek der Erweiterungsbibliothek haben eine hervorragende plattformübergreifende Kapselung bereitgestellt und sich von der Wartung von Betriebssystem-APIs verabschiedet, genau wie die Veröffentlichung des gleichzeitigen Pakets von Java vor 10 Jahren, wodurch die Kosten dieser Sprache erheblich gesenkt wurden mentale Belastung auf allen Plattformen in Bezug auf die gleichzeitige Programmierung, aber in Bezug auf die Thread-Planung und -Verwaltung müssen Sie diese dennoch sorgfältig selbst pflegen
Für C/C++98 verlässt sich nur Huawei-Telekommunikationssoftware auf SNE / ENIP, einige verlassen sich auf ACE, und einige haben ihre eigenen plattformübergreifenden Pakete unterschiedlicher Stile. Vor allem vor 10 Jahren war es schwierig, Windows, Linux, Solaris, Aix und andere Plattformen zu unterstützen Der Grund für die Entwicklung von C/C++ lag vor allem darin, dass Parallelität und Netzwerkprogrammierung von Sprachen und Bibliotheken nicht unterstützt werden, sodass man bei Null anfangen muss.
Zusammenfassung
Entwicklungsschwierigkeit Go
2. Objektorientiert
Java, C++ und Python bieten alle eine gute objektorientierte Sprachunterstützung. Java und C++ unterstützen Designmuster, Typsysteme und Toolketten Fähigkeit zum Erstellen Die Grundelemente großer Programme; Obwohl die Go-Sprache behauptet, objektorientiert zu sein, wird sie indirekt über Methoden und Schnittstellen usw. simuliert und kann die Objektstruktur nicht direkt und klar organisieren und sie initialisieren und zerstören. Wie C wird es mit einer großen Anzahl globaler Objekte und Strukturen gefüllt sein, die Kosten für die Objektverwaltung sind relativ hoch. Im Hinblick auf die Erstellung umfangreicher Programme sind die Sprachfunktionen noch relativ schwach und es sind neue Sprachfunktionen erforderlich hinzugefügt werden.
3. Organisation der physischen Struktur
Bei mittelgroßen und großen Programmen spielt die Organisation der physischen Struktur eine wichtigere Rolle als der Ausdruck logischer Strukturen wie Klassenschnittstellen, wie z. B. Es gibt etwa 1 Million Zeilen C++-Code, wenn die Struktur nicht gut organisiert ist, liegen die Auswirkungen auf der strategischen Ebene (die Auswirkungen der logischen Strukturorganisation auf umfangreiche Programme liegen auf der taktischen Ebene): für eine einzelne Codezeile Die Kompilierungs- und Verknüpfungszeit kann mehr als 10 Minuten oder sogar mehrere Stunden betragen. Allein die für das Kompilieren und Neustarten aufgewendete Zeit hat möglicherweise die gesamte Entwicklungseffizienz beeinträchtigt.
Paket: In Bezug auf die Codeorganisation muss die Rolle von Paketen nicht näher erläutert werden. Java und Go sind grundsätzlich mit dieser Sprachfunktion ausgestattet, während C/C++ sie offensichtlich nicht hat relativ schwacher Namensraum, um Namenskonflikte zu vermeiden (mehr über die Organisation der logischen Struktur) und mehr über die Organisation der Codeklassifizierung durch Verzeichnisse, Header-Dateien/Quelldateien/HPP-Dateien, die sehr sorgfältig behandelt und entworfen werden müssen, sonst ist dies üblich Durch die Einführung von Zyklen und verwirrenden Abhängigkeiten erfordert die Organisation umfangreicher Programme höhere Personalkompetenzen.
Bibliothek: In Bezug auf die Programmausführung unterstützt Java das dynamische Laden von JAR-Paketen und verfügt über gute Erweiterungs- und Upgrade-Funktionen, während C/C++ sowohl statische als auch dynamische Verknüpfungsmethoden unterstützt, was jedoch in Bezug auf Lademethoden der Fall ist Grundsätzlich ist kein Control so flexibel wie Java. Es basiert grundsätzlich nur auf der libc-Bibliothek unter Linux. Es unterstützt keine dynamische Verknüpfung, sondern nur eine statische Verknüpfung. Schließlich wird ein ausführbares Programm kompiliert, das mit dem GDB-Format kompatibel ist , mit minimalistischer Konfiguration in Bezug auf die Bereitstellung. Die Programmgröße muss jedoch kontrolliert werden, da es sonst zu verknüpften Upgrades in der Betriebsdomäne kommen kann.
Zusammenfassung
Java ist in dieser Hinsicht am besten, während C++ mit Vorsicht zu genießen ist und Go irgendwo dazwischen liegt.
4. Typensystem und Generika
Sowohl Java als auch C++ unterstützen die Erkennung stark typisierter Kompilierzeit und bieten so Sicherheit beim Kompilieren, um die Erkennung von Typfehlern auf niedriger Ebene zu erleichtern. Sie unterstützen auch Generika, um den Ausdruck allgemeiner Algorithmen und Container zu erleichtern Aufgrund der dynamischen Syntax von Python ist der Code in Bezug auf die Verarbeitung von Typdeklarationsdefinitionen prägnanter, der Typ wird jedoch derzeit nicht unterstützt, was große Hindernisse und Typunsicherheiten für den Ausdruck allgemeiner Algorithmen und Container mit sich bringt Schnittstelle {} Um zu simulieren, erben alle Objekte von Object, genau wie void * in der C-Sprachwelt oder Java vor 10 Jahren. Natürlich ist die Schnittstelle {} nicht nur ein Objekt- oder Datenstrukturtyp Java hat bewiesen, dass dieser Weg früher oder später nicht zu Generika führen wird, daher unterstützt die Go-Sprache ihn derzeit nicht, aber sein Erfinder sagte auch, dass es keine gute Unterstützungsmethode sei wurde schon gefunden.
Zusammenfassung
Go braucht immer noch neue Funktionen auf Sprachebene. Ich glaube, dass dies früher oder später passieren wird. Unter den aktuellen Sprachen ist C++11 die beste. , gefolgt von Java, und C++98 leidet oft unter obskuren und äußerst schwierigen Syntaxfehlern beim Umgang mit generischen Typen.
5. Initialisierung
Initialisierung ist ein entscheidender Faktor für die Robustheit, Flexibilität und Lesbarkeit des Programms vorgestellt.
Java ist besser, hat gute GC, ist objektorientiert, unterstützt keine globalen Variablen, Datenelemente unterstützen die schrittweise Initialisierung und es gibt klare Anfangswerte für nicht angezeigte Zuweisungen, und es kann auch währenddessen verwendet werden Laden von Klassen. Steuern Sie komplexe Abhängigkeiten zwischen Klassen und JAR-Paketen.
Die Sprachunterstützung von C für die Initialisierung ist die primitivste und im abfälligen Sinne die „schlechteste“. Sie unterstützt keine objektorientierten, globalen Variablen, freien Funktionen und Anfangswerte ohne klare Bedeutung viele Verfahrensprobleme.
C++ bietet eine bessere Unterstützung und ist objektorientiert. Es ist die einzige Sprache unter diesen Sprachen, die die Objektzerstörung und RAII unterstützt. Es verfügt über die stärkste Kontrolle über die Initialisierungsverwaltung zwischen komplexen Objekten und die Objektzusammenarbeit +11 Führt dynamische Funktionen wie Auto und DeclType ein, um die Leistung von C++ zu verbessern. Es ist jedoch auch mit der schlechten Initialisierung der C-Sprache kompatibel. Wenn Sie C++ wie C verwenden, ist das Ergebnis möglicherweise dasselbe wie bei der C-Sprache Sehr häufig. Dies ist auch der Punkt, an dem C++ kritisiert wird. Dies ist einer der negativen Aspekte der Vererbung von C-Sprachressourcen. Es kann sehr, sehr schlecht gemacht werden.
Go In Bezug auf die Initialisierung übernimmt Go einen Teil der dynamischen Sprache von Python. In Bezug auf Strukturen wie Variablen, Arrays, Strukturen, Listen und Karten wird meiner Meinung nach jeder, der es gesehen hat, seine Einfachheit loben . Es sind jedoch noch weitere Versionen erforderlich, um ausgereift zu sein: gc wurde im Vergleich zur Version vor 1.5 erheblich verbessert. Es unterstützt derzeit keine Konstruktion und Zerstörung und simuliert sie bis zu einem gewissen Grad, verglichen mit den RAII- und Java-Objekten von C++ Andere Mechanismen sind noch nicht ausgereift, und es kann leicht zu Leistungs- und Ressourcenverlusten kommen. Die Initialisierung ist nicht einheitlich, und verschiedene Initialisierungsmethoden in bestimmten Feldern wie New, make, {} usw. legen auch das Sprachdesign offen Los. Auf der ausgereiften Seite müssen Sie wissen, dass für Java, C++ und C nur ein neues oder malloc erforderlich ist.
6. Fehlerbehandlung
Die Fehlerbehandlung ist für die Organisation komplexer Logik und die Robustheit des Programms von entscheidender Bedeutung. Um beispielsweise eine einfache Datei zu lesen, muss die Datei in C geöffnet werden Beurteilen Öffnen Sie das Ergebnis, lesen Sie die Daten, ordnen Sie die Daten einem Objekt zu, beurteilen Sie das Ergebnis jedes Parameters ... Sie werden wissen, wie umständlich die Fehlerbehandlung ist.
Gute Programmiersprachen wie Java/C++/Python/C# geben der Ausnahmebehandlung zweifellos die erste Priorität. Leider unterstützt Go dies derzeit nicht. Stattdessen werden mehrwertige Rückgabefehlercodes oder der Panic-Recover-Mechanismus verwendet, um die gesamte Logik mit Fehlerbehandlungscode zu füllen. Im Vergleich zur Fehlerrückgabe von C kann dies jedoch der Fall sein.
7. Dynamische Syntax
Warum sollte dynamische Syntax als Schlüsselelement angesehen werden? Ich glaube, dass diejenigen, die Python usw. verwendet haben, zweifellos aufgefrischt werden durch seine Einfachheit, insbesondere bei der Objektinitialisierung und -konstruktion, und hier können 10 % oder sogar 50 % des Programmcodes liegen, insbesondere bei Systemen, die sich mit Daten, Konfiguration und Analyse befassen.
Go übernimmt einen Teil der dynamischen Syntax von Python, was eine große Verbesserung im Vergleich zur Unbeholfenheit von traditionellem JAVA und C++ darstellt. Natürlich muss dieser Aspekt immer noch verbessert werden, insbesondere bei Zeichenfolgen und Typen. Hinsichtlich der Kompatibilität gibt es noch viele Lücken. Es besteht kein Zweifel daran, dass Go in Bezug auf die Datenverarbeitung die bessere Wahl ist als Java, C++ und C.
8. Andere wichtige Sprachfunktionen
Das Überladen von Operatoren ist zweifellos das eleganteste für skalierbare Operationen. Es wird gesagt, dass es für die inkrementelle Wartung und Entwicklung nützlich ist ist ebenfalls unverzichtbar; Lambda ist bereits eine erforderliche Option für die solide allgemeine Sprache C++11/Java/Python/C#. Lambda ist zweifellos ein leistungsstarkes Werkzeug in Bezug auf Dateninitialisierung und Steuerlogikausdruck ... Go-Sprache wird noch nicht unterstützt Diese wichtigen Syntaxfunktionen erfordern Verbesserungen in nachfolgenden Versionen.
Ökologie
1. Standardbibliothek
Die Standardbibliothek von Java ist zweifellos die ausgereifteste und leistungsstärkste und bietet gebrauchsfertige, hochgradig wiederverwendbare Klassen und Bibliotheken, ohne dass das Rad neu erfunden werden muss. Dies ist der Schlüssel zum Erfolg von Java, aber die Entwicklung von Java ist bisher so Sprache, Klassenbibliotheken und Frameworks sind bereits zu einem Flugzeugträger geworden, und rund um die JVM entstehen ständig neue Lernkosten. Viele Java-Programmierer geraten ebenso ins Hintertreffen. Java-Technologie von vor 7 oder sogar 10 Jahren darf noch verwendet werden. Im Bereich der Java-Anwendungen muss man mit dem Tempo neuer Technologien Schritt halten und gleichzeitig müssen das Framework und das Design sehr sorgfältig organisiert werden, da sonst die Das Ergebnis verschiedener Wiederverwendungen ist eine Anomalie. Der Ressourcenverbrauch aufgeblähter Programme beim Ausführen kann Ihnen manchmal Angst machen, und dies ist der entscheidende Punkt, der bei manchen Plattformen weithin kritisiert wird. Es muss maßgeschneidert werden. Hergestellt und nicht für alle geeignet. Der Umfang der Anwendung erfordert zweifellos die teuersten.
Go bietet nicht nur grundlegende Funktionen ähnlich der C++11-Standardbibliothek und der Boost-Bibliothek, sondern auch hervorragende Bibliotheken, die Parallelität in Bezug auf Anwendungsbibliotheken unterstützen, insbesondere Netzwerk- und WEB-Programmierung, wenn Sie über C++-Anwendungen verfügen Fähigkeiten Da man Angst vor der Schwäche und Größe von Java hat, besteht kein Zweifel daran, dass Go eine gute Wahl ist.
C++11, gleichzeitige Programmierung usw. wurden in die Standardbibliothek integriert. Gleichzeitig bietet die Erweiterung der Echtzeit-Standarderweiterungsbibliothek zweifellos grundlegende Funktionen zur Wiederverwendung von Anwendungen Plattformübergreifende Parallelität und Netzwerkanwendungen können das traditionelle C/C++98 vollständig ersetzen und im dunklen Zeitalter einen großen Schritt nach vorne machen. Im Hinblick auf die Entwicklung von Unternehmensanwendungen wie WEB, Datenbank und Datenanalyse ist die C++11-Bibliothek jedoch immer noch sehr dünn.
2. Toolkette
Die Toolkette von C/C++/Java muss nicht im Detail beschrieben werden. Sie kann vom Editor über das Durchsuchen des Codes bis hin zum Debuggen und der automatischen Generierung von Codedokumenten reichen , und Komplexitätsmessung, Fehlersuche, Speicherfehlerbehebung, Leistungsüberwachung usw. sind ebenfalls sehr authentisch. Die CI-Umgebung von Huawei bietet ebenfalls eine gute Unterstützung, daher werde ich nicht auf Details eingehen.
Die Entwicklungsumgebung wählt normalerweise Eclipse oder LiteIDE. Aufgrund der Chinesischen Mauer können Plug-Ins nicht direkt bezogen werden: Go-Projekte erfordern GoEclipse Für das Debuggen müssen Sie Guru und Godef separat installieren Persönlich dauert die Arbeit etwa 0,5 bis 2 Tage. Daher wird empfohlen, dass LiteIDE grundsätzlich im Paket enthalten ist und nach der Installation fast verwendet werden kann. Diese Umgebungen können jedoch nur einfach verwendet werden, und während der Entwicklungsarbeit treten viele wichtige Erfahrungsprobleme auf, wie folgt:
Mangelnde wichtige Erfahrung beim Bearbeiten und Lesen
Code-Browsing: Objekte, Funktionen und Variablen ohne Code Die globalen Such- und Suchfunktionen können nur einzeln zum Anzeigen geöffnet werden. Wenn Sie bei großen Projekten mit vielen Dateien und großen Dateien an Eclipse, Source Insight und .net gewöhnt sind, werden Sie ohne verrückt Durchsuchen; Codesuche und -sprung: Namen können nicht gedruckt werden, Funktionsklassenschnittstellen usw. können nicht automatisch aufgelistet werden, und die Vorwärts- und Rückwärtssprungfunktionen sind grundsätzlich nicht verfügbar, was bei großen Projekten einen großen Erfahrungsverlust darstellt: kein Refactoring Tools, keine Tools zur automatischen Codegenerierung und Kompilierungsfehler.
Mangel an wichtiger Code-Debugging-Erfahrung
Windows-Debugging ist auf GDB angewiesen In der Windows-Umgebung nicht sehr zuverlässig. Erwarten Sie daher nicht, dass es in der Windows-Umgebung wie erwartet funktioniert. Wenn Sie mit der Windows-Umgebung vertraut sind, ist es am besten, das Debugging durchzuführen. Möglicherweise müssen Sie sich an die neue nichtgrafische Umgebung anpassen.
Mangel an dynamischen und statischen Erkennungstools
Mangel an zyklomatischer Komplexität, Codex-Suite-Sicherheitsprüfung (kann C/C++-Code direkt aufrufen), Speicherprüfung (kann Zeiger direkt verwenden und C-Code aufrufen) .
Zusammenfassung
Grundsätzlich verwendbar, aber einige wichtige Erfahrungen, die die Effizienz verbessern, gehen zu diesem Zeitpunkt verloren, wenn ich der Java/C++-Entwicklungsumgebung 5 Punkte gebe, kann ich ihr nur 2 Punkte geben Die Go-Umgebung hat fast zwei Hauptversionen pro Jahr, was auch eine große Herausforderung für die Entwicklungsumgebung darstellt (Java/C++ nutzt die Umgebung sogar vor 5 oder sogar 10 Jahren). Dies ist erforderlich, und die Auswirkungen des durch Iteration verursachten Wechsels müssen schnell kontrolliert werden. Einer der Zwecke von Googles frühem Open Source besteht darin, von der Industrie zu erwarten, dass es mehr Tools bereitstellt, und die Tools sind im Grunde Beiträge aus der Open Source-Welt. Android wurde auf Basis von Java entwickelt, sodass Google es direkt verwenden kann Als völlig neue Sprache ist Go derzeit hinsichtlich der Entwicklungsumgebung unzureichend.
3. Sprachpopularität und Open-Source-Projektanalyse
Wenn es um Sprache geht, fallen uns unweigerlich die Rankings von TIOBE, PYPL und GitHub ein:
TIOBE-Daten
Die Beliebtheit einer Sprache muss anhand der maßgeblichen TIOBE-Weltsprachenrankings im Juni 2016 ermittelt werden:
Das neueste Ranking der neuen Sprache Go liegt auf Platz 48, und der Beliebtheitsunterschied zu Java beträgt das 100-fache. Vor zwei Jahren, im Juli 2014, lag die Go-Sprache mit einem Index von 0,222 % auf Platz 30. Im Juli 2015 war Go nicht unter den Top 50. Die Platzierungen im letzten Mai 2016 waren: 50+, 38, 48 , 44 und 42. .
Rangliste der Sprachpopularität in den letzten dreißig Jahren:
Die neuesten Daten von PYPL
GITHUB-Daten
Open-Source-Community, wählen Sie die repräsentativsten Open-Source-Sprachrankings auf Github aus:
Kommentare
Mainstream-Programmiersprachen hatten nach den Daten der letzten zehn Jahre immer eine starke Vitalität. Java, C, C++, C#, Python, JavaScript und PHP haben die Top Ten nie verlassen Andere Sprachen spielen in einigen Fällen eine optionale Rolle. Beachten Sie, dass es sich nicht um einen Ersatz für diese Mainstream-Sprachen handelt, da es derzeit keine Anzeichen für deren Niedergang gibt.
Java war in den letzten zehn Jahren immer der König; C/C++ hatte immer eine dominierende Stellung in der eingebetteten und systemischen Programmierung sowie in Bezug auf die Einfachheit von Python und Ökologie machen es zum Klebstoff Natürlich kann die Rolle der Sprache auch zum Schreiben serverseitiger Programme genutzt werden, die nicht so hohe Anforderungen an die Leistung stellen wie bei Websites. Selbstverständlich sind 70 % der Websites immer noch in PHP und JS geschrieben PHP.
Die offizielle Version von Go im Jahr 2009 war nur noch zwei Jahre von ihrer Veröffentlichung entfernt und löste eine Welle der Begeisterung aus. Wie der Vater der Go-Sprache sagte, schuf sie eine weitere Rolle, eine, wenn Python/Ruby Leistung braucht . Optionale Rolle; im Vergleich zu Java schafft es eine leichtere und effizientere Rolle und bietet ein Sprungbrett, um das prähistorische Monster Java zu nutzen, aber die Reife der Sprache, der Standardbibliothek und der Toolkette ist von entscheidender Bedeutung für die Produktivität In Bezug auf die Leistung ist der Scheduler noch nicht bereit. Weitere Informationen finden Sie in einem anderen Artikel.
4. Branchenanwendungen
Was Java, C und C++ betrifft, wurde bereits erklärt, dass Java in Bezug auf die Produktivität bereits ein allumfassender Flugzeugträger ist, während in Bezug auf Obwohl C/C++ eine hohe Leistung verlangt, bleibt es fest verankert. Für Go wurde tatsächlich nachgewiesen, dass es eine Option für Skriptsprachen wie Python und Ruby ist, wenn Leistung erforderlich ist, und diese dynamischen Sprachskripte werden hauptsächlich im Verwaltungsbereich verwendet: Überwachung und Bereitstellung von Anwendungen für Umgebungsressourcen usw., und einige verwenden sie für die serverseitige Entwicklung, und wenn die Leistung entscheidend ist, sind diese Sprachen wirklich nicht gut darin, in den Bereichen, in denen Java/C/C++ gut ist, gibt es zu viele In manchen Szenarien wie Datenanalysen oder HTTP-Anwendungen ist Go eine optionale Rolle, und in allgemeinen und komplexen Anwendungsgeschäftsfeldern ist es unabhängig von Sprache, Ökologie und Reife noch nicht bereit. Go hat noch viel zu tun und es müssen noch weitere Iterationen durchgeführt werden.
Eine kurze Einführung in andere gängige Sprachen der Branche
Python/JavaScript/C# war in den letzten zehn Jahren eine der beliebtesten Sprachen und dominiert in ihre jeweiligen Bereiche wie Java/C/C++/PHP, und diese Sprachen werden mehr oder weniger in Abteilungen eingesetzt, aber aufgrund von Nicht-Geschäftsmodulen liegt der Schwerpunkt tatsächlich nicht so hoch auf Seiten, Tools und Verwaltungsdomänen beinhalten wichtige Erfahrungsprobleme, denen noch genügend Aufmerksamkeit geschenkt werden muss, da sonst der angesammelte Code Wenn es mehr gibt, werden Wartbarkeit und Erfahrung eine zunehmende Belastung mit sich bringen.
1. Shell/Python
Historisches Erbe und seine Trägheit, in Bezug auf Installations-, Bereitstellungs-, Upgrade- und Überwachungsverwaltungsaufgaben, werden grundsätzlich immer noch die Syntax von verwendet Die Shell ist tiefgründig und weist eine extrem schlechte Lesbarkeit auf. Gleichzeitig ist die Bearbeitungs- und Debugging-Umgebung am primitivsten und die Entwicklungs- und Wartungseffizienz ist im Allgemeinen am geringsten. und es gibt eine Menge angesammelten Code, der engagiertes Personal erfordert, das mit der Shell-Wartung vertraut ist. Python ist die einfachste und produktivste Sprache unter den in diesem Artikel aufgeführten Sprachen, wenn es um den Umgang mit Strings, Containern und Umgebungen geht.
Es wird empfohlen, Python so oft wie möglich für Skripte in der Betriebsdomäne zu verwenden. In der Verwaltungsdomäne ist der Name der Klebersprache unübertroffen, und Python gehört grundsätzlich zu den fünf führenden Sprachen in der Rangliste.
2. JavaScript/Typescript
JavaScript kann als die beliebteste Web-Skriptsprache bezeichnet werden, aber ihr Design weist zwei Kritikpunkte auf: Der eine ist zu einfach, der andere ist schwach . Grammatikfehler werden erst zur Laufzeit entdeckt. Es sollte niemanden geben, der noch nie auf eine Warnmeldung aus unbekannten Gründen gestoßen ist. Wenn der JS-Code 10.000 Zeilen überschreitet, stellen seine einfache Syntax und die schwache Typisierung eine große Belastung für das Wartungspersonal dar. Ich habe nur ein paar hundert Zeilen JS-Seiten geschrieben und kann auch schwache Typisierungen nicht ertragen .com vor dem Betrachten des JS-Codes einer komplexen Portal-Website. Um ehrlich zu sein: Wenn Sie nicht tiefer gehen können, geben Sie einfach auf. Typescript schien genau diese beiden Designfehler von JavaScript zu beheben.
Bei Typescript lehnen diejenigen, die an JavaScript gewöhnt sind, möglicherweise die objektorientierten Sprachfunktionen ab, die die Ausdruckskraft verbessern, und denken, dass dadurch die Einfachheit komplexer wird. Eine weitere Funktion besteht darin, JavaScript kostenlos um eine Typprüfung zur Kompilierungszeit zu erweitern. Ich glaube, niemand wird eine solche Funktion ablehnen, genauso wie das Schreiben eines Artikels, um auf den falschen Ansatz hinzuweisen. Daher sollten diejenigen, die JS-Seiten schreiben, auf die Obermenge von TS umsteigen.
3. C#
C# ist bei Huawei noch eher eine Nische, aber es ist auch eine der beliebtesten Sprachen. Leider hat Microsoft es auf Windows-Systeme beschränkt, was auch die Top-Sprachen der Welt einschränkt Aufgrund des Einflusses des dänischen Maschinenexperten Anders Hejlsberg bewegt sich C# derzeit schrittweise in Richtung Open Source.
Das Obige ist die Expertenanalyse gängiger Programmiersprachen wie Go, Java und C. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!