Maison >Java >javaDidacticiel >Les maîtres analysent pour vous les langages de programmation traditionnels tels que Go, Java et C
Langage de programmation Java
Java est un langage de programmation orienté objet qui peut écrire des logiciels d'application multiplateformes. Il s'agit d'un langage de programmation Java et d'une plate-forme Java lancés par Sun Microsystems en mai 1995. (C'est-à-dire que le nom général de JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)).
Cet article analyse principalement C, C 98, C 11, Java et Go, et aborde principalement les capacités clés du langage. Au cours du processus de discussion, nous combinerons les échanges entre les experts en programmation linguistique de Huawei et les principaux développeurs des logiciels de télécommunications de Huawei. Nous abandonnerons les différends sur les préférences linguistiques ou les sectes linguistiques et tenterons de discuter des caractéristiques et des lacunes de chaque langage d'un point de vue objectif et objectif. perspective équitable. Le choix de la langue sert de référence objective.
Écrivez ceci et j'espère obtenir les corrections et les commentaires de chacun pour rendre l'ensemble de l'analyse plus objective. En termes de performances, je me concentrerai sur une analyse approfondie et une référence de Go. Il y a beaucoup de contenu et les attentes ne vous rebuteront pas.
Aperçu général du langage
1. Go
En termes de concurrence, les mécanismes goroutine et canal fournissent un mécanisme de concurrence léger et fluide au niveau du langage ; de performances En termes de performances, il offre des performances qui ne sont pas inférieures à Java (les performances sont une fausse proposition). En termes de consommation de ressources mémoire, il présente des avantages évidents par rapport à Java et aux autres langages dynamiques. En termes de syntaxe, il présente certains avantages. des fonctionnalités dynamiques du langage Python.En termes d'initialisation, de construction et de sérialisation d'objets, ils fournissent des expressions extrêmement concises, et ces codes de traitement peuvent représenter 10 à 50 % du code, en particulier pour les scénarios de traitement des données, de configuration et de mappage de protocole. avec C, C et Java, cet aspect est maladroit, ce qui explique pourquoi les langages dynamiques sont si fascinants.
C'est aussi la principale raison pour laquelle la première version du langage Go a attiré tant d'attention lors de sa sortie, en particulier pour les langages dynamiques, elle offre des avantages de concurrence et de performances que les langages dynamiques n'ont pas, Pike Le but de la conception du langage Go est de servir d'autre rôle facultatif pour C/C (notez qu'il ne s'agit pas d'un remplacement et que son objectif de conception n'est pas de le remplacer par Pike, le père du langage Go et ingénieur logiciel en chef). chez Google, l'a mentionné dans son discours « Road to Simplicity » de 2012. Goal est plein de frustrations, citant l'une des lignes : « Même si nous nous attendions à ce que les programmeurs C voient Go comme une alternative, la plupart des programmeurs Go viennent de langages comme Python et Ruby. Très peu viennent du C. " L'essence de la valeur du C est la suivante : le langage offre des fonctionnalités d'abstraction, d'élégance et de flexibilité plus étendues, et ces capacités d'expression sont à un coût matériel nul. Le langage C a un coût matériel nul quant à sa conception. objectif depuis le début, mais la capacité d'expression du langage est résolue par C, et la direction de la pensée de Go n'est évidemment pas un coût nul, du moins pas un coût CPU nul, la proposition de Go vise davantage à minimiser la charge de travail du programmeur.
L'un est la recherche ultime d'un matériel sans coût, et l'autre est de minimiser la charge de travail des programmeurs. Personne ne peut remplacer la partie la plus précieuse de quiconque. Go ne peut pas atteindre les deux objectifs en même temps. choisit une syntaxe dynamique et gc est destiné à choisir l'efficacité du développement et à sacrifier l'efficacité du matériel pour l'efficacité du développement, donc cela va dans une autre direction, qui est la direction des applications dans laquelle Java est bon, en particulier les applications réseau et HTTP actuelles, qui nécessitent une bonne bibliothèque standard et la prise en charge de l'écosystème en termes de bibliothèque standard, Go a fourni une bibliothèque de code plus légère et excellente pour le traitement de tcp/http/xml/json/encryption et de décryptage, etc., ainsi qu'une prise en charge à haute concurrence pour http, le protocole de base de. le réseau. Il a été doté d'un tremplin vers l'exploitation de Java.
Mais nous devons faire face à ses lacunes actuelles. Il est loin d'être mature en termes de fonctionnalités linguistiques importantes et de rigueur, et il existe encore de nombreux défauts ou solutions temporaires, qui affecteront également la maturité de son écologie. ces problèmes doivent encore être résolus dans la nouvelle version. La première version du langage Go a été officiellement publiée le 28 mars 2012. Jusqu'à présent, la version 1.7 a été publiée. Deux versions majeures ont été publiées en près d'un an, avec plusieurs versions bêta et RC entre-temps. que le langage Go n'est pas encore terminé. Préparez-vous.
Résumé
Go s'est avéré être un candidat idéal pour Python et Ruby en termes d'exigences de performances dynamiques du langage en termes de développement d'applications, en particulier d'applications liées à HTTP, il est actuellement au premier rang ; Challenger devant Java, il assure également un autre rôle que C/C dans les endroits où le contrôle sur les ressources n'est pas si fort.
En termes de productivité, ses fonctionnalités linguistiques et son écosystème ne sont pas encore matures, et la version est encore rapidement itérée par rapport aux langages dynamiqueset Java, elle n'a pas d'avantages à ce stade. , ces languessont limitées dans certains scénarios. Rôles facultatifs. À long terme, avec le fort soutien de Google, de nouvelles fonctionnalités et capacités d'application de bibliothèque continueront d'être ajoutées. Il s'agit d'un langage de programmation florissant. Cependant, à ce stade, il est recommandé que l'ampleur et la complexité du programme soient adaptées. Le langage et l'écologie ne sont pas encore complètement développés. Pour fournir un support solide, il faut également être conscient des risques causés par son immaturité et l'itération rapide des versions.
2. Java
Le succès de Java est dû au fort soutien de grandes entreprises comme SUN, IBM et Oracle, qui reposaient principalement sur des systèmes Unix il y a 10 ans, ce qui lui a permis de s'implanter solidement dans le domaine des applications d'entreprise. et les applications WEB, et au cours des 10 années suivantes. Au premier semestre, il s'est appuyé sur la révolution apportée par Linux x86 pour maintenir sa part. Au second semestre, c'est le succès d'Android qui lui a permis d'atteindre le sommet. encore une fois après avoir hésité et arrêté. Au cours des deux dernières décennies, Java a accumulé l'écosystème le plus puissant. On peut dire qu'il englobe tout. Il ne fait aucun doute que Java a longtemps été un énorme porte-avions, ce qui suffit à prouver son statut et son succès. . Cependant, la complexité de son langage, de ses bibliothèques, de ses frameworks et de ses écosystèmes crée d'énormes obstacles pour les techniciens, tels que la concurrence, le mécanisme synchronisé du langage, la notification puis la concurrence de la bibliothèque standard, et HTTP peut également être obtenu via le conteneur Apache Tomcat. Basé sur la technologie JVM, Java a une bonne interopérabilité avec d'autres langages, comme Scala en termes de concurrence. Vous pouvez choisir son Actor ou Akka, qui est également écrit en Scala. Bien sûr, l'industrie choisit plus souvent nginx et d'autres scénarios de mashup. trop Trop...
C'est le monde de Java Il n'y en a jamais trop, et il n'est pas nécessaire de réinventer la roue. C'est la clé du succès de Java. historique, permettant à Java de fournir trop d'options.Plus tard, j'ai appris que le coût d'apprentissage de Java est supérieur à celui du C et que les exigences pour les programmeurs sont supérieures à celles du C. À moins que vous ne soyez laissé pour compte et que vous utilisiez toujours la technologie Java 7 ou Il y a encore 10 ans, les techniciens devaient organiser le framework et le concevoir avec beaucoup de soin, sinon le résultat des diverses réutilisations est d'empiler un programme extrêmement volumineux, et sa consommation de ressources lors de l'exécution peut parfois vous effrayer. La critique du trop grand nombre de plates-formes développées sur la base de Java. La réutilisation est une arme à double tranchant. Elle doit être adaptée plutôt que universelle. L'échelle requise par les développeurs est sans aucun doute la plus exigeante, à moins que le langage et la bibliothèque standard ne soient utilisés. fournir les options les meilleures et les plus directes.
Résumé
Java a prouvé depuis longtemps qu'il est global. Au cours des dix dernières années, il a fondamentalement été le langage le mieux classé et accumulé l'écosystème le plus puissant. Pour clarifier le prochain malentendu : aujourd'hui, le coût d'apprentissage de Java et les compétences requises pour les développeurs sont bien plus élevés que ceux de C/C. Peut-être que la plupart des développeurs ne peuvent pas contrôler le porte-avions de Java. Si vous souhaitez utiliser Java pendant une longue période, vous devez suivre les dernières technologies Java. En même temps, vous devez avoir un bon sens de la réutilisation. Cela imposera des exigences plus élevées en matière de compétences du personnel. extrêmement facile à écrire sur l'occupation des ressources et l'efficacité d'exécution qui fera peur à l'application.
3. C, C 98, C 11...
C/C occupe toujours une position solide dans la programmation embarquée et au niveau système, en raison de la popularité des langages comme Java et Go. L'accent est évidemment mis sur l'efficacité du développement. Veuillez vous référer à la discussion du chapitre Go précédent.
Cependant, en termes de concurrence, de programmation réseau et d'applications, nous sommes dans une époque sombre et secrète. Le langage lui-même ne fournit aucun support, et la bibliothèque standard, trop mince, n'a aucune ambition en la matière. En ce qui concerne le standard C/C, la taille de la bibliothèque ne sera peut-être jamais comparable à celle de Java et Go, car C/C n'est contrôlé par aucune grande entreprise commerciale et est totalement « libre ». La bibliothèque standard nécessite un investissement continu de la part des grandes entreprises. entreprises commerciales. C'est pourquoi la norme C 98 a mis 13 ans pour que la bibliothèque reçoive une mise à jour majeure. Cela a directement conduit à la nécessité pour C/C d'encapsuler les API système de diverses plates-formes matérielles. Avant que Linux x86 ne batte Unix à grande échelle, de nombreux systèmes Unix rendaient la programmation multiplateforme plus difficile. Avant 2000, un très mauvais multiplateforme. Le programme ACE, ainsi que la tout aussi mauvaise bibliothèque MFC sur la plate-forme Windows qui regorge de variables globales macrostatiques, étaient autrefois considérés comme des pailles salvatrices par les programmeurs. Ces technologies ont évidemment été rapidement abandonnées par l'histoire. pourquoi tant de gens Peur de garder des secrets sur C/C. À cette époque, Java fournissait des bibliothèques standard pour le développement multithread, de réseaux et d'applications et une prise en charge multiplateforme basée sur la technologie JVM, poussant Java vers un langage de programmation grand public, ce qui fut la clé du succès de Java au cours des dix premières années.
Pour les programmeurs C/C, il y a un événement passionnant. Par rapport à C 98, c'est un énorme pas en avant en termes de langage et de bibliothèque standard. Le père de C l'a dit. il n'est pas exagéré de dire qu'il s'agit d'un nouveau langage. Dans le même temps, les contributions de nombreux experts du C à la bibliothèque boost (qui est en fait une bibliothèque standard en temps réel) ont fourni les meilleures performances en termes de réseau, la programmation simultanée et certaines applications de base d'excellentes bibliothèques réduisent considérablement la difficulté de développement dans ce domaine. Les programmeurs C traditionnels doivent passer à C 11 dès que possible, ce qui nécessite la mise à jour de l'environnement de compilation, et la mise à jour de l'environnement de compilation apportera les outils les plus puissants en matière de détection de mémoire et d'analyse des performances. CC a été le plus critiqué. mémoire hors limites et concernant le problème de fuite, face à la version gcc5.2 et au dernier processeur d'Intel, une panne de mémoire peut être détectée dès la première scène. Dans le même temps, l'outil d'analyse des performances vtune fourni par Intel est le plus puissant. outil que j'ai rencontré jusqu'à présent.
Résumé
Les programmeurs C traditionnels devraient passer à C 11 dès que possible et adopter la nouvelle bibliothèque standard et Boost, ce qui améliorera considérablement l'efficacité du développement et de la maintenance dans la programmation embarquée et au niveau du système. Une nouvelle langue doit être adoptée, et une mise à niveau majeure de la langue est également une nouvelle langue au sens large. Elle doit également être placée dans une position tout aussi importante pour mieux utiliser l'efficacité des atouts existants. En termes de développement d'applications, puisque la bibliothèque standard ne s'attend pas à ce qu'elle soit capable de rivaliser avec Go au stade actuel, encore moins avec Java, elle devrait donc honnêtement faire de son mieux dans les domaines dans lesquels elle est la meilleure.
Fonctionnalités du langage
1. Concurrence
Go présente les plus grands avantages en termes de légèreté et de simplicité : les mécanismes de goroutine et de canal fournissent un mécanisme de concurrence léger et fluide au niveau du langage, la bibliothèque standard. fournit également des bibliothèques d'applications basées sur ceci ;
En termes de programmation hybride dans le monde concurrent, Java offre le plus de choix et de support écologique : après la sortie de java.util.concurrent il y a dix ans, il a poussé Java à l'apogée de la programmation simultanée. Sous le cloud, Java a une bonne interopérabilité avec les frameworks et langages à haute concurrence tels que Scala
C 11 est un pas en avant par rapport à C/C 98. Un grand pas en avant, la bibliothèque standard et la bibliothèque d'extension boost ont fourni une excellente encapsulation multiplateforme, disant au revoir à la maintenance des API du système d'exploitation, tout comme la sortie du package simultané de Java il y a 10 ans, elle a considérablement réduit la programmation simultanée de ce langage. -charge mentale de la plate-forme, mais en termes de planification et de gestion des threads, vous devez toujours la maintenir soigneusement
Pour C/C 98, seuls les logiciels de télécommunications Huawei s'appuient sur SNE/ENIP et ACE, il existe des auto- ; a créé des packages multiplateformes de différents styles, en particulier il y a 10 ans, lorsqu'il était nécessaire de prendre en charge Windows, Linux, Solaris, Aix et d'autres plates-formes. À l'ère sombre de la programmation simultanée, la difficulté du développement C/C était principalement due à sa complexité. concurrence et programmation réseau, le langage Heku n'a fourni aucun support et a dû repartir de zéro.
Résumé
Difficulté de développement Go
2. Orienté objet
Java, C et Python offrent tous une bonne prise en charge du langage orienté objet Avec la prise en charge des modèles de conception, des systèmes de types et des chaînes d'outils, Java et C ont le potentiel. capacité à construire les éléments de base de programmes à grande échelle ; bien que le langage Go prétende prendre en charge l'orientation objet, il est indirectement simulé via des méthodes et des interfaces, etc., et ne peut pas organiser directement et clairement la structure des objets, ni les initialiser et les détruire. Comme le C, il sera rempli d'un grand nombre d'objets et de structures globaux, le coût de gestion des objets est relativement élevé. En termes de construction de programmes à grande échelle, les capacités du langage sont encore relativement faibles et de nouvelles fonctionnalités du langage sont nécessaires. être ajouté.
3. Organisation de la structure physique
Pour les programmes à moyenne et grande échelle, l'organisation de la structure physique joue un rôle plus crucial que l'expression de structures logiques telles que les interfaces de classe, telles que Il existe environ 1 million de lignes de code C Si la structure n'est pas bien organisée, l'impact se fera au niveau stratégique (l'impact de l'organisation de la structure logique sur les programmes à grande échelle se situe au niveau tactique) : pour une seule ligne de changement de code. , le temps de compilation et de liaison peut être supérieur à 10 minutes, voire des heures , le seul temps passé à compiler et à redémarrer peut avoir détruit toute l'efficacité du développement.
Package : En termes d'organisation du code, le rôle des packages n'a pas besoin d'être élaboré. Java et Go ont fondamentalement cette fonctionnalité du langage naturellement, alors que C/C n'en a évidemment pas une relative. espace de nom faible pour éviter les conflits de noms (plus sur l'organisation de la structure logique), et plus sur l'organisation de la classification du code à travers des répertoires, des fichiers d'en-tête/fichiers sources/fichiers HPP, qui doivent être manipulés et conçus avec beaucoup de soin, sinon l'introduction de cycles et des dépendances confuses sont monnaie courante, l'organisation de programmes à grande échelle nécessite des compétences humaines plus élevées.
Bibliothèque : en termes d'exécution du programme, Java prend en charge le chargement dynamique des packages jar et possède de bonnes capacités d'extension et de mise à niveau, tandis que C/C prend en charge les méthodes de liaison statiques et dynamiques, mais en termes de méthodes de chargement, il existe fondamentalement, aucun contrôle n'est aussi flexible que Java. Après la compilation de Go, il s'appuie essentiellement uniquement sur la bibliothèque libc sous Linux. Il ne prend pas en charge les liens dynamiques et ne prend en charge que les liens statiques. Enfin, un programme exécutable compatible avec le format gdb est compilé. et a une configuration minimaliste en termes de déploiement. Cependant, la taille du programme doit être contrôlée, sinon cela peut entraîner des mises à niveau liées dans le domaine d'exploitation.
Résumé
Java est le meilleur à cet égard, tandis que C doit être manipulé avec précaution, et Go se situe quelque part entre les deux.
4. Système de types et génériques
Java/C prennent en charge la détection au moment de la compilation fortement typée, offrant une sécurité de type au moment de la compilation pour faciliter la découverte des erreurs de type de bas niveau, et prennent en charge les génériques pour faciliter l'expression d'algorithmes et de conteneurs généraux ; le langage Go prend en charge Python ; Syntaxe dynamique , le code est plus concis dans le traitement des définitions de déclaration de type, mais il est légèrement plus faible en termes de types. Les génériques ne sont pas pris en charge à ce stade, ce qui entraîne de grands obstacles et une insécurité de type dans l'expression des algorithmes et des conteneurs généraux, et nécessite. interface {} Pour simuler, tout comme void * dans le monde du langage C, ou Java sans génériques il y a 10 ans, ses objets héritent tous de Object. Bien sûr, interface {} n'est pas seulement un type d'objet ou de structure de données. Java a prouvé que cette voie ne fonctionnera pas. Tôt ou tard, il atteindra les génériques, donc le langage Go ne le prend pas en charge au stade actuel, mais il devrait être pris en charge à long terme. Son inventeur a également déclaré qu'il n'y avait pas de bonne méthode de support. n'a pas encore été trouvé.
Résumé
Go a encore besoin de nouvelles fonctionnalités au niveau du langage. Je pense que cela arrivera tôt ou tard. En termes de génériques, parmi les langages actuels, C 11 est le meilleur. Deuxièmement, C 98 souffre souvent d'erreurs de syntaxe obscures et lourdes lorsqu'il s'agit de gérer des types génériques.
5. Initialisation
L'initialisation est un lien crucial pour la robustesse, la flexibilité et la lisibilité du programme. Le programme ne peut pas bien attribuer des valeurs aux variables dans divers scénarios complexes. imaginé.
Java fait mieux, a un bon gc, est orienté objet, ne prend pas en charge les variables globales, les membres de données prennent en charge l'initialisation par étapes, et il existe des valeurs initiales claires pour les affectations non affichées, et il peut également être utilisé pendant chargement des classes. Contrôlez les dépendances complexes entre les classes et les packages jar.
Le support du langage C pour l'initialisation est le plus primitif. Dans un sens péjoratif, c'est le « pire ». Il ne prend pas en charge les variables globales orientées objet, les fonctions libres et les valeurs initiales sans signification claire. beaucoup de problèmes de procédure.
C a un meilleur support et est orienté objet. Parmi ces langages, c'est le seul qui prend en charge la destruction d'objets et RAII. Il a le contrôle le plus fort sur la gestion de l'initialisation entre les objets complexes et la collaboration entre objets, et C 11. Il introduit des fonctionnalités dynamiques telles que auto et decltype pour améliorer les performances du C ; mais il est également compatible avec la mauvaise initialisation du langage C. Si vous utilisez C comme C, le résultat sera le même que celui du langage C, et cela peut être très. commun, c'est pourquoi C La critique est que c'est l'un des aspects négatifs de l'héritage des atouts du langage C. Cela peut être très bien fait, ou cela peut être très, très mal fait.
Go En termes d'initialisation, Go emprunte une partie du langage dynamique à Python. En termes de structures telles que les variables, les tableaux, les structures, les listes et les cartes, je pense que tous ceux qui l'ont vu loueront sa simplicité. . Mais d'autres versions sont encore nécessaires pour mûrir : gc a été grandement amélioré par rapport à la version antérieure à la 1.5. Il ne prend actuellement pas en charge la construction et la destruction, et defer les simule dans une certaine mesure, mais par rapport au RAII de C et aux objets de Java, enfin et d'autres mécanismes ne sont pas encore matures et il est facile d'introduire des défauts tels que des fuites de performances et de ressources ; l'initialisation n'est pas uniforme, et diverses méthodes d'initialisation dans des domaines spécifiques tels que New, make, {}, etc. exposent également la conception du langage de Allez-y du côté mature, vous devez savoir que Java et C n'ont besoin que d'un seul new ou malloc.
6. Gestion des erreurs
La gestion des erreurs est cruciale pour l'organisation d'une logique complexe et la robustesse du programme. Par exemple, pour une simple lecture d'un fichier, le traitement du langage C nécessite l'ouverture du fichier. fichier et jugement Ouvrez le résultat ; lisez les données, jugez le résultat de la lecture des données ; mappez les données dans un objet, jugez le résultat de chaque paramètre..., vous saurez à quel point la gestion des erreurs est lourde.
Les langages de programmation solides tels que Java/C/Python/C# donnent sans aucun doute la première priorité à la gestion des exceptions. Malheureusement, Go ne le prend pas en charge actuellement. Au lieu de cela, il utilise des codes d'erreur de retour à valeurs multiples ou le mécanisme de récupération de panique pour remplir toute la logique avec le code de gestion des erreurs. Par rapport au retour d'erreur de C, cela peut parfois être pire.
7. Syntaxe dynamique
Pourquoi la syntaxe dynamique devrait-elle être considérée comme un élément clé Je crois que ceux qui ont utilisé Python, etc., quels que soient les autres facteurs d'efficacité opérationnelle, seront sans aucun doute rafraîchis ? par sa simplicité, en particulier dans l'initialisation et la construction des objets, et c'est là que peuvent se trouver 10 %, voire 50 % du code du programme, en particulier pour les systèmes qui gèrent les données, la configuration et l'analyse.
Go emprunte une partie de la syntaxe dynamique de Python. Avec la coopération de la réflexion, c'est une grande amélioration par rapport à la maladresse du JAVA et du C traditionnels. Bien sûr, cet aspect nécessite encore une amélioration continue, notamment les chaînes et les types. En termes de compatibilité, il existe encore de nombreuses lacunes. En termes de traitement des données, Go est sans aucun doute un meilleur choix par rapport à Java, C et C.
8. Autres fonctionnalités importantes du langage
La surcharge d'opérateurs est sans aucun doute la plus élégante pour les opérations de type évolutives. La surcharge de fonctions est utile pour la maintenance et le développement incrémentiels et prend en charge divers appels simples. indispensable ; lambda est déjà une option requise pour le bon langage universel C11/Java/python/C#. Lambda est sans aucun doute un outil puissant en termes d'initialisation des données et d'expression de la logique de contrôle... Le langage Go ne prend pas encore en charge ces fonctionnalités de syntaxe importantes requises. améliorations dans les versions ultérieures.
Écologie
1. Bibliothèque standard
La bibliothèque standard de Java est sans aucun doute la plus mature et la plus puissante, fournissant des classes et des bibliothèques prêtes à l'emploi et hautement réutilisables sans avoir besoin de réinventer la roue. C'est la clé du succès de Java, mais le développement de Java jusqu'à présent, son. Le langage, les bibliothèques de classes et les frameworks sont déjà devenus un porte-avions, et de nouvelles technologies et de nouvelles bibliothèques émergent constamment autour de sa JVM. Le coût d'apprentissage pour le maîtriser est en fait le plus élevé. De nombreux programmeurs Java sont en fait à la traîne, tout comme C. De même, Java. la technologie d'il y a 7 ou même 10 ans peut encore être utilisée. Dans le domaine des applications Java, il faut suivre le rythme des nouvelles technologies, et en même temps, le framework et la conception doivent être organisés très soigneusement, sinon le résultat Les différentes réutilisations seront une anomalie. La consommation de ressources des programmes gonflés lors de leur exécution peut parfois vous effrayer, et c'est le point clé pour lequel certaines plateformes sont largement critiquées. La réutilisation est une arme à double tranchant. plutôt qu'une solution universelle. L'échelle d'application nécessite des développeurs. Sans aucun doute le plus coûteux.
En plus de fournir des fonctionnalités de base similaires à la bibliothèque standard C 11 et à la bibliothèque boost, Go fournit également d'excellentes bibliothèques qui prennent en charge la concurrence en termes de bibliothèques d'applications, en particulier la programmation réseau et WEB si vous avez de faibles capacités d'application C. et j'ai peur de l'immensité de Java. Il ne fait aucun doute que Go doit faire un bon choix.
C 11, la programmation simultanée, etc. ont été incorporés dans la bibliothèque standard. Dans le même temps, le boost de la bibliothèque d'extension standard en temps réel fournit sans aucun doute des capacités de réutilisation de base des applications. C 11 est tout à fait capable de faire des transitions. la concurrence de plate-forme et la programmation d'applications réseau. Il peut remplacer le C/C 98 traditionnel et faire un grand pas en avant dans l'âge des ténèbres. Cependant, en termes de développement d'applications d'entreprise telles que le WEB, les bases de données et l'analyse de données, la bibliothèque de C 11 est encore très mince.
2. Chaîne d'outils
Chaîne d'outils C/C/Java, il n'est pas nécessaire de la décrire en détail, passer de l'éditeur, navigation dans le code, débogage, génération automatique de documents de code, complexité la mesure, la recherche de bugs, le dépannage de la mémoire, la surveillance des performances, etc. sont déjà très authentiques. L'environnement CI de Huawei fournit également un bon support, je n'entrerai donc pas dans les détails.
Focus sur le langage Go. L'environnement de développement choisit généralement Eclipse ou LiteIDE. Choisir Eclipse entraînera beaucoup de problèmes. En raison de la Grande Muraille, les plug-ins ne peuvent pas être obtenus directement : les projets Go nécessitent GoEclipse. les sauts de code nécessitent gocode et code. Pour le débogage, vous devez installer gdb. Pour être plus robuste, vous devez installer guru et godef. Certains nécessitent une compilation et un environnement sonore de Go avec Eclipse installé. situation personnelle, cela prendra environ 0,5 à 2 jours pour fonctionner, il est donc recommandé que LiteIDE soit essentiellement inclus dans son package, et vous pouvez presque l'utiliser après l'avoir installé. Cependant, ces environnements ne peuvent être utilisés que simplement, et de nombreux problèmes d'expérience importants seront rencontrés lors des travaux de développement, comme suit :
Manque d'expérience importante en édition et en lecture
Parcourir le code : objets, fonctions et variables sans code Les fonctions globales de navigation et de recherche ne peuvent être ouvertes qu'une par une pour être visualisées. Pour les grands projets avec de nombreux fichiers et des fichiers volumineux, si vous êtes habitué à Eclipse, Source Insight et .net, vous deviendrez fou sans. navigation ; recherche et saut de code : les noms ne peuvent pas être imprimés, les interfaces de classe de fonctions, etc. peuvent être automatiquement répertoriées, et les fonctions de saut avant et arrière sont fondamentalement indisponibles, ce qui constitue une perte d'expérience majeure pour les grands projets : pas de refactorisation ; outils, pas d'outils de génération automatique de code et d'erreurs de compilation Vous ne pouvez pas faire ce que vous voulez...
Manque d'expérience importante dans le débogage de code
Le débogage Windows repose sur gdb. n'est pas très fiable dans l'environnement Windows, alors ne vous attendez pas à ce qu'il fonctionne comme prévu dans l'environnement Windows. Il est préférable de déboguer dans l'environnement Linux ou d'écrire sur la console si vous êtes habitué à l'environnement Windows. , vous devrez peut-être vous adapter au nouvel environnement non graphique.
Manque d'outils de détection dynamiques et statiques
Manque de complexité cyclomatique, contrôle de sécurité de la suite codex (peut appeler directement le code C/C), vérification de la mémoire (peut utiliser directement des pointeurs et appeler du code C) .
Résumé
Il est fondamentalement utilisable, mais certaines expériences importantes qui améliorent l'efficacité sont perdues. À ce stade, si l'environnement de développement Java/C reçoit 5 points, l'environnement Go ne peut que le faire. recevoir 2 points, et Go a près de 2 versions majeures par an, ce qui constitue également un défi important pour l'environnement de développement (Java/C utilise même l'environnement il y a 5 ou même 10 ans). à faire, et il doit contrôler rapidement ses versions L'impact des commutations provoquées par l'itération. L'un des objectifs des premiers open source de Google avant sa maturité est d'attendre de l'industrie qu'elle fournisse davantage d'outils, et les outils sont essentiellement des contributions du monde open source. Android est développé sur la base de Java, afin que Google puisse l'utiliser directement et Go. , en tant que langage complètement nouveau, Go est actuellement à la traîne en termes d'environnement de développement.
3. Popularité des langages et analyse des projets open source
En matière de langage, les classements de TIOBE, PYPL et GitHub nous viendront inévitablement à l'esprit. 🎜>
Données TIOBE La popularité d'une langue doit être déterminée par le classement mondial des langues TIOBE faisant autorité. Le dernier classement des données en juin 2016 :<.>
Le dernier classement du nouveau langage Go est 48ème, et l'écart de popularité avec Java est 100 fois supérieur. Il y a deux ans, en juillet 2014, la langue Go se classait au 30ème rang, avec un indice de 0,222%. En juillet 2015, Go n'était pas classé dans le top 50. Les classements du mois de mai 2016 le plus récent étaient : 50, 38, 48, 44 et 42.
Classement de popularité des langues au cours des trente dernières années :
Les dernières données de PYPL
Données GITHUB
Communauté Open source, sélectionnez le classement des langues open source le plus représentatif sur github :
Commentaires
Les langages de programmation grand public ont toujours eu une forte vitalité. Java, C, C, C#, Python, JavaScript et PHP n'ont jamais quitté le top dix selon les données des dix dernières années. Le jeu d'autres langues est un rôle facultatif dans certains cas. Notez qu'il ne remplace pas ces langues dominantes, car il n'y a actuellement aucun signe de leur déclin.
Java a toujours été le roi au cours des dix dernières années ; la position de C/C a toujours été stable et il a toujours dominé la programmation embarquée et au niveau système en termes de simplicité et d'écologie de Python ; faites-en le ciment Bien entendu, le rôle du langage peut également être utilisé pour écrire des programmes côté serveur qui ne sont pas aussi exigeants en performances que pour les sites Web, PHP et JS. Il va sans dire que 70 % des sites Web sont encore écrits en PHP ;
La version officielle de Go en 2009 n'était qu'à deux ans de sa sortie, et elle a provoqué une vague d'enthousiasme. Comme l'a dit le père du langage Go, elle a créé un autre rôle, celui lorsque Python/Ruby en a besoin. performances. Rôle facultatif ; par rapport à Java, il crée un rôle plus léger et plus efficace, fournissant un tremplin pour exploiter le monstre préhistorique Java, mais la maturité du langage, de la bibliothèque standard et de la chaîne d'outils est essentielle en termes de productivité. n'est pas encore prêt en termes de performances, en tant que nouveau langage, son planificateur n'est pas prêt non plus. Il existe encore de nombreux pièges de performances. Voir un autre article pour en discuter séparément.
4. Applications industrielles
Quant à Java, C et C, il a déjà été expliqué qu'en termes de productivité, Java est déjà un porte-avions global, alors qu'en termes de exigeant des performances, C/C occupe toujours une position forte. Pour Go, il a en effet été prouvé qu'il s'agit d'une option pour les langages de script comme Python et Ruby lorsque la performance est requise, et ces scripts de langage dynamique sont essentiellement utilisés dans le domaine de la gestion : surveillance et déploiement d'applications de ressources environnementales. , etc., et certains les utilisent pour le développement côté serveur, et lorsque les performances sont critiques, ces langages ne sont vraiment pas bons dans les domaines où Java/C/C est bon, il y en a trop ; applications réussies. Go est dans certains scénarios, tels que l'analyse de données ou les applications HTTP. En termes d'aspects, il s'agit d'un rôle facultatif, et dans les domaines d'application généraux et complexes, quels que soient la langue, l'écologie et la maturité. Go a encore beaucoup de travail à faire et d'autres itérations à faire.
Une brève introduction aux autres langages courants de l'industrie
Python/JavaScript/C# a été l'un des langages les plus populaires au cours des dix dernières années et est tout aussi dominant dans leurs domaines respectifs comme Java/C/C/PHP. et ces langages sont plus ou moins appliqués dans les départements, mais en raison des modules non métier, l'accent n'est pas si élevé en fait sur les pages, les outils et. Les domaines de gestion impliquent des problèmes d'expérience importants, qui doivent encore recevoir suffisamment d'attention, sinon le code accumulé s'il y en a plus, la maintenabilité et l'expérience apporteront un fardeau croissant.
1. Shell/Python
L'héritage historique et son inertie, en termes de tâches de gestion d'installation, de déploiement, de mise à niveau et de surveillance, les scripts c shell ou b shell sont essentiellement encore utilisés. Le shell est profond. Il est obscur et a une lisibilité extrêmement mauvaise. En même temps, l'environnement d'édition et de débogage est le plus primitif, et l'efficacité du développement et de la maintenance est fondamentalement la plus faible. Cependant, ces composants non commerciaux sont généralement ignorés. et il y a beaucoup de code accumulé, ce qui nécessite un personnel dédié familier avec la maintenance du shell. Python est le langage le plus simple et le plus productif parmi les langages répertoriés dans cet article en ce qui concerne la gestion des chaînes, des conteneurs et des environnements.
Il est recommandé d'utiliser Python autant que possible pour les scripts dans le domaine d'exploitation. Dans le domaine de la gestion, le nom du langage Glue est inégalé et Python fait essentiellement partie des cinq premiers langages. dans les classements.
2. JavaScript/Typescript
JavaScript peut être considéré comme le langage de script Web le plus populaire, mais sa conception présente deux défauts qui ont été critiqués. L'un est trop simple et l'autre est faible. . Tapez, les erreurs grammaticales ne seront découvertes qu’au moment de l’exécution. Personne ne devrait jamais avoir rencontré une boîte d’avertissement apparaissant sur une page Web pour des raisons inconnues. Lorsque le code JS dépasse 10 000 lignes, sa syntaxe simple et sa frappe faible représenteront un énorme fardeau pour le personnel de maintenance. Je n'ai écrit que quelques centaines de lignes de pages JS et je ne supporte pas une frappe faible. J'ai également téléchargé Sina. .com avant de regarder le code JS d'un site Web portail complexe, pour être honnête, si vous ne pouvez pas aller plus loin, vous abandonnez. Typescript est apparu précisément pour résoudre ces deux défauts de conception de JavaScript.
Pour Typescript, ceux qui sont habitués à JavaScript peuvent rejeter ses fonctionnalités de langage orienté objet qui améliorent l'expressivité, pensant que cela complique la simplicité. Mais une autre fonctionnalité consiste à ajouter gratuitement une vérification de type au moment de la compilation à JavaScript. Je pense que personne ne rejettera une telle fonctionnalité, tout comme l'écriture d'un article pour signaler la mauvaise approche. Par conséquent, ceux qui écrivent des pages JS devraient passer au sur-ensemble de TS.
3.C#
C# est encore plus spécialisé chez Huawei, mais c'est aussi l'un des langages les plus populaires. Celui qui peut vraiment remettre en question le statut de Java est C#. Malheureusement, Microsoft le limite aux systèmes Windows, ce qui limite également les principaux langages du monde. et les compilateurs. Grâce à l'influence de l'expert danois en machines Anders Hejlsberg, C# s'oriente progressivement vers l'open source. En même temps, il s'appuie sur l'environnement intégré le plus puissant à l'heure actuelle.
Ce qui précède est l'analyse de Go, Java, C et d'autres langages de programmation grand public pour vous. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !