CSDN a publié un article "C Language is Dead", qui a suscité une certaine controverse. En fait, cet article a été réimprimé du blog d'Ed Burnette. Le titre original était "Meurs, C, meurs!", qui devrait être traduit littéralement par "Meurs, C, meurs!". » exprime une malédiction plutôt qu’un jugement. La traduction disait "Le langage C est mort", ce qui est évidemment un malentendu qui a attisé les flammes. Les internautes du CSDN ont critiqué ses opinions, mais franchement, parce que ces critiques sont basées sur un texte traduit déformé, non seulement il n'y a rien de nouveau, mais elles ne parviennent pas non plus à saisir l'attention de l'auteur original.
La situation actuelle est la suivante: Récemment, il y a eu une tendance dans les communautés techniques étrangères, et de nombreuses personnes discutent de Java comme remplacement du langage C ou comme étant le plus répandu. langage de programmation logiciel de base courant. À en juger par les opinions exprimées par la plupart des gens, la tendance à remplacer Java par C est toujours soutenue.
Le logiciel de base fait référence à un type de logiciel dont la tâche principale est de libérer pleinement le potentiel de l'ordinateur et de fournir un ensemble de fonctions efficaces et fiables pour les logiciels d'application de couche supérieure. Ces logiciels seront appelés de manière intensive, et un petit décalage de performances sera amplifié des centaines ou des milliers de fois dans la pratique. Ainsi, pour les logiciels de base, les performances sont au moins aussi importantes que la fiabilité. Dans le code source de certains logiciels de base, nous voyons souvent des conceptions laides et des techniques de piratage perverses. Dans d'autres domaines, cela n'est pas encouragé, mais dans les logiciels de base, cela est raisonnable.
Le langage C est encore fort dans certains domaines en termes de développement de systèmes d'exploitation, de machines virtuelles et de pilotes de périphériques, il est peut-être le roi éternel. Mais dans d'autres domaines logiciels de base, tels que les bases de données, les serveurs de réseau, le traitement graphique et d'images, etc., il n'y a en réalité que deux raisons pour lesquelles le langage C continue de dominer. L'une est qu'il est rapide et l'autre est qu'il en existe de nombreuses. des personnes qui le connaissent et qui ont une riche expérience.
Mais ces deux points sont désormais remis en question.
La première est la vitesse. La vitesse d'exécution de Java a atteint un tel niveau dans JDK1.4 que pour un développeur moyen, le programme C qu'il a écrit ne s'exécute plus plus vite que le programme Java équivalent. Les JDK 5.0 et 6.0 ultérieurs ont encore amélioré les performances d'exécution. Plusieurs résultats d'évaluation menés par différentes organisations ont montré que l'écart global d'efficacité d'exécution entre le langage Java et le langage C est inférieur au double. de vitesse. Le langage C, qui a abandonné beaucoup de choses, est désormais moins de deux fois plus rapide que Java entièrement équipé. Sans oublier que si le nouvel environnement informatique est pris en compte, l’avantage de vitesse du langage C n’est peut-être qu’une illusion. Parce qu'il n'y a que quelques personnes dans le monde qui ont la capacité d'écrire rapidement et correctement des programmes volumineux en langage C sur des plates-formes informatiques multi-CPU, et parmi ces personnes, il n'y a que très peu de personnes qui ont la capacité d'écrire de gros programmes. programmes en langage C. Un programme parallèle à grande échelle qui peut utiliser pleinement la puissance de calcul de chaque nœud dans un environnement réseau hétérogène à grande échelle. En d'autres termes, vous pourrez peut-être doubler les performances du programme, exploitant ainsi pleinement le potentiel informatique d'un PC d'une valeur de 6 000 yuans et permettant aux clients d'économiser 1 000 yuans. Mais s'il s'agit d'un grand environnement informatique parallèle en réseau hétérogène composé de 1 000 machines, les performances du programme C que vous écrivez seront probablement bien inférieures à celles du programme Java correspondant, sans parler des énormes coûts de maintenance ultérieurs. millions ou plus.
La deuxième chose est l'expérience. Beaucoup de gens prétendent avoir de grandes compétences en C, mais en réalité, même les vrais maîtres du C doivent passer un temps considérable à rechercher et à déboguer les erreurs, en particulier les erreurs de mémoire. La plupart des logiciels à grande échelle écrits en C comportent des erreurs de mémoire, ce qui nécessite beaucoup d'énergie et de temps pour stabiliser le produit. Cela ne prend pas en compte les failles de sécurité. La plupart des développeurs ont désormais des connaissances très faibles en matière de sécurité du code. Les vulnérabilités de sécurité sont assez courantes dans le code, et dans le langage C, cette lacune est particulièrement évidente. Le plus grand défi est peut-être le problème de la concurrence. La concurrence est un problème très complexe qui doit être résolu à un niveau d'abstraction très élevé. Le mécanisme d'abstraction du langage C est trop simple et ne peut donc pas fournir une abstraction de haut niveau. ne peut construire qu'un programme concurrent à partir de certaines « primitives de concurrence » et n'est pas différent d'utiliser un taille-crayon pour scier un grand arbre. Pour le dire franchement, la plupart des programmeurs C sont tout simplement incapables d'écrire des programmes simultanés efficaces et sans bugs.
Le fait cruel est donc que lorsqu'une personne dit à quel point elle est bonne en langage C et à quel point son expérience est riche, il est très probable qu'elle parle d'utiliser C Il est très expérimenté dans l'écriture d'applications monomachine et monothread et ne sera pas attaqué par le monde extérieur. Il n'y a aucune pression sur le budget temps et les utilisateurs peuvent supporter une longue période de stabilité du produit. Malheureusement, l’environnement du marché et l’environnement informatique ont complètement changé. Face à un environnement informatique plus complexe, utiliser le langage C pour écrire des logiciels de haute qualité à grande échelle est une tâche que seule une équipe de véritables experts peut accomplir. Si vous avez déjà eu du mal à détecter et à déboguer une fuite de mémoire ou une erreur de thread pendant des jours, vous saurez que vous n'êtes probablement pas un tel expert.
En comparaison, Java est comme une mitrailleuse lourde Maxim contre un arc et des flèches en termes de mécanisme d'abstraction, d'infrastructure, de sécurité et de concurrence par rapport au langage C. Par exemple, en ce qui concerne la concurrence, le package java.util.concurrent ajouté à Java 5.0 peut être la bibliothèque de prise en charge la plus puissante pour les problèmes de concurrence dans les langages courants. Il a également été prouvé que les mécanismes de gestion de la mémoire et de sécurité de Java sont capables de réduire efficacement les défauts des programmes. C’était l’intention du texte original de cet article accablant.
Donc, mon attitude est claire. Je pense que Java remplaçant C est une idée progressiste. Cependant, il existe de nombreuses idées progressistes dans le monde, mais peu d'entre elles peuvent faire rêver. devenir réalité. Java peut-il vraiment être un substitut puissant au langage C dans le domaine des logiciels de base ? Je ne pense pas que cela puisse être fait au moins à court terme. Les raisons sont les suivantes :
1. Le problème des gens. Bien que peu de personnes soient capables d’écrire d’excellents logiciels de base en langage C, il y a probablement encore moins de personnes capables de les écrire en Java. Java compte des millions de développeurs, mais que font-ils ? La plupart d'entre eux sont engagés dans le développement au niveau de l'entreprise et dans le développement Web. Combien de personnes comprennent vraiment le modèle de mémoire Java ? Combien de personnes maîtrisent l’utilisation des outils fournis dans le package concurrent ? De nombreuses personnes qui utilisent Java depuis de nombreuses années n'ont jamais écrit de programme socket, ne comprennent pas la surcharge du multithreading Java et ne savent pas comment effectuer un diagnostic et un réglage des performances. Ce sont des compétences essentielles lors de l'écriture de logiciels de base. La plupart des programmeurs Java se tournent vers le développement Web après avoir juste appris Java et consacrent leur énergie à maîtriser les uns après les autres des frameworks vastes et complexes avec d'épaisses couches d'abstraction et des structures magnifiques. Non seulement ils n'ont aucune compréhension de la véritable architecture informatique, c'est clair, mais. Je ne connais pas l'environnement informatique virtualisé par Java. Par conséquent, il est non seulement très difficile de transformer la programmation communautaire Java en une avant-garde capable de prendre en charge la prochaine génération de travaux de développement logiciel de base, mais cela nécessite également suffisamment de temps.
2. La consommation de mémoire de Java est trop importante. Pour les programmes au niveau du système, une consommation de mémoire élevée signifie que le taux de réussite du cache est réduit et que la possibilité d'échanger des données avec le disque est augmentée, ce qui a un impact sérieux sur les performances. De nos jours, beaucoup de gens pensent encore que Java est lent. La raison principale n'est pas que Java s'exécute lentement, mais la baisse globale des performances causée par une consommation excessive de mémoire. Si ce problème n'est pas résolu, Java ne peut être utilisé que pour créer des logiciels de base de niveau supérieur. Peut-être qu’avec le développement du matériel informatique, ce problème sera progressivement résolu ?
3. La question du style. Je pense que ce problème est le plus grave. Le développement de logiciels de base prône la liberté, la franchise, la transparence, la simplicité et l'efficacité. Il doit être aussi tranchant qu'un poignard, aussi courageux qu'un guerrier et aussi simple qu'un agriculteur. Il doit s'opposer aux conceptions encombrantes et magnifiques, aux couches d'abstraction. , et la complexité et la flexibilité inutile. Le style de conception formé par la communauté Java au fil des années est incompatible avec cela, et peut même être considéré comme opposé. Java est idéologiquement orienté vers le développement de logiciels d'application d'entreprise, il accorde donc une importance particulière à l'architecture, aux modèles de conception, aux normes, aux règles, à la notoriété et au tempérament luxueux d'un palais. En C, quand vous mangez, vous mangez simplement. Vous levez le bol pour boire, posez les baguettes pour jurer, jetez vos bras pour attraper de la viande et retroussez vos manches pour appliquer de l'huile. En Java, pour faire quelque chose, vous créez souvent d'abord un objet, puis utilisez cet objet comme paramètre pour créer un autre objet. Répétez cette opération n fois pour obtenir l'objet dont vous avez vraiment besoin, et enfin appelez l'objet de cet objet. Une méthode consiste à brûler de l'encens, à se laver le visage, à se gargariser la bouche et les mains en mangeant, en étant prudent et respectueux. En C, lorsque vous rencontrez des problèmes, vous devriez être comme un hors-la-loi, comme la version gangster de Cheng Yaojin. Il ne se soucie pas de vous, mais il se précipite avec trois axes et il a peur de ne pas pouvoir le faire. te tuer. À Java, lorsque vous rencontrez des problèmes, vous devez être comme Song Xianggong, vous devez faire une déclaration, vous devez être honnête, vous devez être un pays d'étiquette, vous devez ouvrir vos airs et vous devez être prudent. Le slogan de Java est le suivant : que vous mouriez ou non, vous devez d'abord impressionner votre enfant. Cet ensemble de choses encombrantes est à la fois inutile et difficile à s’habituer pour le développement logiciel de base. Il convient de noter que ce n'est pas un problème avec le langage Java. En fait, Java lui-même n'a pas besoin d'être aussi compliqué et baroque. Du point de vue du langage lui-même, Java peut être vif et direct, ou copieux. C'est juste que presque personne ne l'a utilisé de cette manière depuis plus de dix ans, donc tout le monde ne sait plus : comment écrire un programme en Java si on ne le fait pas une étape à la fois ?
C'est précisément pour les raisons ci-dessus (qui ne sont peut-être pas exhaustives) que jusqu'à récemment, la plupart des logiciels de base de premier ordre étaient écrits en langage C, ou en au moins son noyau, une partie est toujours basée sur C. Et je ne pense pas que cette situation changera de manière significative à court terme. Bien sûr, si la communauté Java peut surmonter les problèmes ci-dessus, tirer pleinement parti des avantages de Java lui-même et développer un grand nombre de logiciels de support de premier ordre dans des domaines de base, alors la situation peut être changée, et ce changement est également progressiste et digne d'être accueilli.
Ce qui précède est la possibilité que Java remplace le langage C. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (m.sbmmt.com) !