Quel langage pourrait remplacer C ?
Après avoir comparé Go, Rust et D, le choix d'Andrei Alexandrescu se porte sur D
Le langage C est un des langages de programmation les plus utilisés au monde. Et pour cause, il dispose de nombreux atouts tels que la vitesse d’exécution du code, la possibilité d’écrire une application qui pourra être exécutée sans avoir forcément besoin de bibliothèque ou machine virtuelle, l’existence d’un grand nombre de compilateurs et bibliothèques, une compatibilité avec plusieurs architectures…
Ayant été inventé dans les années 70, ce langage jouit encore aujourd’hui d’une forte communauté. Toutefois, en raison de certains inconvénients qu’on lui connait, plusieurs solutions ont été proposées en vue de remplacer ce langage.
Nous avons par exemple C++ qui est apparu en 1983, la même année de la création d’un comité de normalisation du langage C. L’objectif était d’améliorer ce dernier en introduisant certains concepts comme les classes, les classes dérivées, les typages forts, etc.
La soif d’améliorer le langage C n’ayant pas pu être étanchée avec C++, certaines personnes se sont lancées dans une entreprise visant à fournir de nouveaux outils pour remplacer ces deux langages. Dans ce sens, on peut citer le langage D apparu en 1999 qui s’appuie sur C++, Java et Eiffel. Google a suivi le pas depuis ces dernières années en proposant Go qui s’inspire de C et Pascal et enfin Rust qui a été dévoilé par la fondation Mozilla en 2010.
Pour soutenir son choix, Andrei Alexandrescu (un des co créateur du langage D) s’est proposé de présenter D, Go et Rust dans un tableau comparatif.
Inconvénients de Go
Problème de performance : parmi les caractéristiques principales de Go, l’on a les appels indirects de fonction et l’implémentation d’un ramasse-miettes. Toutefois, selon Andrei, ce sont des éléments qui constituent des régressions dans la mesure où ils font décroitre les performances du code exécuté.
Absence de programmation générique : le fait que la programmation générique n’est pas encore possible avec Go constitue, du point de vue d’Andrei, un gros handicap. Les développeurs ont réclamé cette fonctionnalité, mais ces derniers doivent attendre jusque-là. Selon Andrei, ce choix est fait sciemment et est plus de l’ordre politique qu’autre chose.
La simplicité qui devient un handicap : Go se veut par essence relativement simple. Rob Pike, l’un des trois créateurs de Go, affirmait au sujet des jeunes développeurs « qu’ils ne sont pas capables de comprendre un langage brillant, mais nous voulons les amener à réaliser de bons programmes. Ainsi, le langage que nous leur donnons doit être facile à comprendre et facile à adopter ». Toutefois, Andrei explique qu’à cause de cette volonté de faciliter les choses, les développeurs se retrouvent à écrire et réécrire les mêmes choses, car Go n’offrirait pas beaucoup d’abstraction de code. Eu égard à ce fait, Andrei souligne qu’un développeur qui a utilisé Go dans un projet ne souhaiterait plus retourner vers ce langage.
Avantages de Go
Langage alternatif pour la programmation système : Go a été conçu afin d’offrir un langage de programmation simple pour le développement des applications système. Ce domaine a été longtemps dominé par Java. L’équipe de Go qui souhaitait également faire une percée dans ce domaine a usé de stratégies afin de pénétrer le marché des services de réseau.
Bonne équipe en amont : pour assurer un code de qualité à Go, Google a fait appel à une équipe solide. Cela constitue un point important, souligne Andrei, qui estime que les ingénieurs derrière ce langage ont su compenser le manque de performance du langage par la qualité de Go et précisément avec la bibliothèque et les outils réseau dont dispose Go.
Bonne image de marque : le fait que Go a été développé par Google représente selon Andrei un élément essentiel pour attirer les développeurs vers cette plateforme, même s’il n’est pas foncièrement extraordinaire. La seule image de Google est suffisante pour inciter les développeurs à adopter le langage.
Inconvénients de Rust
Répartition disproportionnée des efforts : selon Andrei, l’équipe de Rust alloue beaucoup d’efforts à la gestion de la mémoire, mais néglige les autres aspects du langage.
Syntaxe atypique : pour Andrei, la syntaxe de Rust est peu commune aux autres langages de développement. Cela pourrait être frustrant ou même constituer un frein au cas où certaines personnes n’auraient pas de motivation pour s’investir dans un tel apprentissage.
Avantages de Rust
Nouvelles théories : des trois langages évoqués, admet Andrei, Rust est le seul langage disposant de théoriciens en langage de classe mondiale. Cela dénote de la précision et de la profondeur de l’approche technique de Rust.
Un langage beaucoup plus sécurisé : l’objectif de Mozilla en implémentant ce langage est d’offrir un langage sécurisé, concurrent, et disposant de fonctionnalités essentielles pour réaliser ce que l’on souhaite. Pour Andrei, l’aspect sécurité est un avantage à ne pas omettre dans les atouts de ce langage.
Bonne préversion : pour pouvoir atteindre la première version stable, l’équipe de Rust a mis environ cinq années en enchainant préversion sur préversion. Selon Andrei, cela constitue un avantage, car le produit fini est meilleur et comporte moins de bogues. L’effet collatéral est que la communication autour des différentes itérations a été assez forte.
Inconvénients de D
Mauvaise perception : à l’origine, D avait été conçu pour être le successeur de C. Mais depuis sa création en 1999, il bénéficie d’une adoption limitée. Cela est dû au fait que les gens perçoivent D comme un langage assez jeune. Cette perception complique davantage les choses dans le milieu professionnel, car les ingénieurs et décideurs sont réticents à adopter un langage qui ne parvient pas à décoller depuis toutes ces années.
Rejet du ramasse-miettes : D dispose d’un récupérateur de mémoire qui ne jouit pas d’une bonne réputation. L’introduction du ramasse-miettes dans ce langage a été rejetée en grande partie par la communauté des développeurs C et C++. Et même s’il est vrai que l’on pourrait utiliser D avec RAII pour libérer la mémoire des objets non utilisés ou encore utiliser un style de gestion manuel, pour Andrei, cela reviendrait à créer tout le noyau de l’infrastructure et donc à utiliser ce langage de manière bancale.
Manque du soutien de grandes firmes : il est notoire que plusieurs langages de développement ont été fortement adoptés du fait du soutien de grandes entreprises. Malheureusement, D ne bénéficie pas de ce coup de pouce. Son développement est donc laissé entre les mains de sa communauté fortement peuplée d’ingénieurs qui font plus preuve de perspicacité que de leadership, charisme ou vision à long terme.
Avantages de D
Vitesse de compilation du code : la compilation du code D est beaucoup plus rapide que celle du C++ pour des performances équivalentes en ce qui concerne les performances du code exécuté. Go se compile beaucoup plus rapidement, mais produit à l’exécution un code plus lent.
Également langage de script rapide : D peut être également utilisé pour écrire rapidement des scripts. Et qui plus est, les scripts exécutés bénéficient de performances énormes indépendamment du nombre de scripts écrits (qu’ils soient en petit nombre ou en grand nombre). Par ailleurs, D dispose d’un nombre important de bibliothèques.
Interfaçage facile avec les bibliothèques C : D utilise la même structure de mémoire que C et C++, ce qui fait que la bibliothèque entière de C est facilement accessible à D. Andrei ajoute que des travaux sont en cours pour faire la même chose avec C++.
Langage de prédilection pour remplacer C et C++
Pour Andrei, les caractéristiques d’introspection statique, le temps de compilation assez rapide ainsi que les nombreux atouts uniques au langage D font de celui-ci le remplaçant idéal à C. Partant de ce fait, il trouve que Go est dépassé et n’a même pas saisi le problème, tandis Rust s’essaye à donner quelques éléments de solutions. Et pour aller encore plus loin, Andrei estime que comparativement à D même C++ « s’est égaré dans les bois ».
Source : Quora
Et vous ?
Que pensez-vous des conclusions d’Andrei ? Pensez-vous que D est le successeur idéal face à C ?
Quel est votre choix personnel pour remplacer C ?
Voir aussi
Forum C
Partager