Quel langage pourrait remplacer C ?
Après avoir comparé Go, Rust et D, le choix d'Andrei Alexandrescu se porte sur D

Le , par Olivier Famien, Chroniqueur Actualités
Quel langage pour remplacer le C ?
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


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de SkyZoThreaD SkyZoThreaD - Membre expérimenté https://www.developpez.com
le 12/11/2015 à 12:48
Citation Envoyé par Olivier Famien Voir le message
Toutefois, en raison de certains inconvénients que l’on lui connait, plusieurs alternatives ont été proposées en vue de remplacer ce langage.
Un petit rappel des inconvénients svp? A part les overflows (inévitables en quasi-lowlevel), et en ne considérant que les domaines dans lesquels il est utilisé, c'est un très bon langage à mes yeux...

ps : le gros inconvégniant de Rust c'est qu'il est un peu rouillé
Avatar de imperio imperio - Membre chevronné https://www.developpez.com
le 12/11/2015 à 13:19
Citation Envoyé par Olivier Famien Voir le message
Quel langage pourrait remplacer C ?
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.
Pour le développement de Rust, il y a plusieurs équipes qui se concentrent chacune sur un aspect du langage. Je n'ai plus entendu parler "d'efforts de la gestion de la mémoire" depuis un moment. Après je me trompe peut-être...

La syntaxe du Rust est très proche des langages actuels donc à ce niveau-là, pas de souci. C'est plutôt avec le borrow checker que les développeurs passeront le plus de temps.
Avatar de grim7reaper grim7reaper - Membre éclairé https://www.developpez.com
le 12/11/2015 à 14:17
Citation Envoyé par Andrei Alexandrescu
Rust puts safe, precise memory management front and center of everything. Unfortunately, that's seldom the problem domain, which means a large fraction of the thinking and coding are dedicated to essentially a clerical job (which GC languages actually automate out of sight).
Je n’ai pas l’impression que ça ne soit centré tant que ça sur la gestion de la mémoire. L’un des concept central en Rust c’est le concept d’ownership et ça s’applique aux ressources de manières générale (la mémoire bien sûr, mais aussi mutex, fichiers, socket, …).
C’est aussi de ce concept que découle la promesse de Rust de permettre de faire de la programmation concurrence garantie (à la compilation) sans data race.

Parmi les trois langages discutés ici, pour moi Rust est la meilleure alternative au C. Après, je ne pense pas que quoique ce soit remplace le C à court terme…

Go est une blague à ce niveau-là, il ne joue pas dans la même cour que le C (d’ailleurs Go attire plus les gens qui viennent de Python et Ruby que les gens qui viennent de C et C++).
Pour D, je ne connais pas trop si ce n’est qu’il y a eu une sorte de split de la communauté et qu’il y a eu deux bibliothèques standard (Phobos et Tango)… Mais maintenant que Andrei à quitté Facebook pour se consacrer au D les choses vont peut-être s’améliorer pour le langage.
Avatar de DonQuiche DonQuiche - Expert confirmé https://www.developpez.com
le 12/11/2015 à 16:35
Citation Envoyé par grim7reaper Voir le message
Je n’ai pas l’impression que ça ne soit centré tant que ça sur la gestion de la mémoire. L’un des concept central en Rust c’est le concept d’ownership et ça s’applique aux ressources de manières générale (la mémoire bien sûr, mais aussi mutex, fichiers, socket, …).
Oui mais 99% du temps c'est bien de mémoire dont on parle puisque tu manipules celle-ci en permanence. C'est d'ailleurs cette omniprésence du vérificateur d'emprunts (borrow checker) qui rend Rust parfois pénible à utiliser.

Parmi les trois langages discutés ici, pour moi Rust est la meilleure alternative au C. Après, je ne pense pas que quoique ce soit remplace le C à court terme…
La base de code installée étant immense, C/C++ seront là pour longtemps. Mais pour les nouveaux projets je pense que Rust va rapidement s'imposer comme leur remplaçant. D'autant que là où les concepteurs de matériel commençaient auparavant par écrire un compilo C, de plus en plus souvent ils écrivent plutôt un backend LLVM.

Go est une blague à ce niveau-là, il ne joue pas dans la même cour que le C (d’ailleurs Go attire plus les gens qui viennent de Python et Ruby que les gens qui viennent de C et C++).
Pour D, je ne connais pas trop si ce n’est qu’il y a eu une sorte de split de la communauté et qu’il y a eu deux bibliothèques standard (Phobos et Tango)… Mais maintenant que Andrei à quitté Facebook pour se consacrer au D les choses vont peut-être s’améliorer pour le langage.
Go ne joue effectivement pas du tout dans la même cour, c'est à se demander si ses dévs savaient où ils allaient quand ils l'ont présenté comme tel. En revanche Go pourrait devenir *le* langage pour les centres de données grâce au nom de Google.

Quant au D, pour moi il appartient à la même génération que Java et C# et s'est fait bouffer par ces deux-là.
Avatar de grim7reaper grim7reaper - Membre éclairé https://www.developpez.com
le 12/11/2015 à 16:40
Citation Envoyé par DonQuiche
C'est d'ailleurs cette omniprésence du vérificateur d'emprunts (borrow checker) qui rend Rust parfois pénible à utiliser.
Je préfère un truc pénible à la compilation qu’a l’exécution

Citation Envoyé par DonQuiche
Mais pour les nouveaux projets je pense que Rust va rapidement s'imposer comme leur remplaçant.
J’en suis pas si sûr, mais j’espère me tromper.

Citation Envoyé par DonQuiche
D'autant que là où les concepteurs de matériel commençaient auparavant par écrire un compilo C, de plus en plus souvent ils écrivent plutôt un backend LLVM.
Tu as une (des?) source à ce sujet*?
Avatar de Metalman Metalman - Membre expert https://www.developpez.com
le 12/11/2015 à 17:02
Même question que SkyZoThread : quels sont les inconvénients de C ?...
Parce que "l'assembleur portable" me semble toujours être super : pas de fioritures, juste des instructions sous une forme compréhensibles.
Avatar de atha2 atha2 - Membre éprouvé https://www.developpez.com
le 12/11/2015 à 17:31
Je pense qu'il serait pas mal de mentionner que Andrei Alexandrescu n'est autre que le créateur du langage D. D'une certaine façon son avis est forcément biaisé.

Edit : @Niark13 : effectivement, désolé de l’imprécision. +1 à tout ce que tu as dit.
Avatar de kmedghaith kmedghaith - Membre averti https://www.developpez.com
le 12/11/2015 à 17:40
Comme l'avait dit Bjarne Stroustrup dans cppcon2015, pour qu'un nouveau language prenne, il faut attendre au minimum 10 ans.
Aujourd'hui, pour moi les remplaçants du C/C++ c'est C++11/14/17.
Il y est possible de coder autrement tout en restant backward compatible avec le legacy code.
Pour des projects personnles/open source, utiliser un langage moderne est faisable. Mais dans l'industrie, avec un historique de code et de produits, sans librairie standard/ librarires riches, sans communauté ou consulting, ceci est tout bonnement pas possible.

Bref, l'avenir du C/C++, c'est le C/C++.

MG
Avatar de Niark13 Niark13 - Membre éclairé https://www.developpez.com
le 12/11/2015 à 18:22
Citation Envoyé par atha2 Voir le message
Je pense qu'il serait pas mal de mentionner que Andrei Alexandrescu n'est autre que le créateur du langage D. D'une certaine façon sont avis est forcément biaisé.
Il n'est pas créateur (c'est Walter Bright), mais il est effectivement à l'origine du reboot du langage en 2010 (D 2.0). Officiellement il est « Architect ».

Pour moi, D n'est pas le remplaçant de C, car il est un peu trop gros pour tourner sur des microcontrôleurs par exemple. C'est plutôt un C++ sous stéroïdes qu'un remplaçant de C.
Avatar de Uther Uther - Expert éminent https://www.developpez.com
le 12/11/2015 à 18:34
Il serait quand même important de noter dans l'article la place centrale de Andrei Alexandrescu dans le développement de D, ce qui permet de comprendre que son avis est forcément orienté. Il ne s'en cache d'ailleurs pas dans le message original.

Citation Envoyé par SkyZoThreaD Voir le message
Un petit rappel des inconvénients svp? A part les overflows (inévitables en quasi-lowlevel), et en ne considérant que les domaines dans lesquels il est utilisé, c'est un très bon langage à mes yeux...
La liste est longue, mais globalement il lui manque la gestion native des fonctionnalités que l'on trouve généralement dans les langages de plus haut niveau (polymorphisme, génériques, ...) et il n'y a pas la moindre notion de sécurité :
- La mémoire est manipulée sans le moindre contrôle (overflow, double free, ...)
- Il y a aussi dans la syntaxe des choix naturel a l'époque qui se sont avérés plus a risque d'erreur (mutabilité par défaut, switch non exhaustifs, pré/post-incrémentation,...)
- Le typage est certes statique mais permet de convertit trop facilement tout en n'importe.

Citation Envoyé par imperio Voir le message
Pour le développement de Rust, il y a plusieurs équipes qui se concentrent chacune sur un aspect du langage. Je n'ai plus entendu parler "d'efforts de la gestion de la mémoire" depuis un moment. Après je me trompe peut-être...

La syntaxe du Rust est très proche des langages actuels donc à ce niveau-là, pas de souci. C'est plutôt avec le borrow checker que les développeurs passeront le plus de temps.
C'est une contrainte générale du langage, de toute façon on ne peut plus vraiment changer la façon dont ça fonctionne actuellement, même si il devrait être légèrement allégé grace au travail sur le compilateur(une nouvelle représentation intermédiaire).

Citation Envoyé par atha2 Voir le message
Je pense qu'il serait pas mal de mentionner que Andrei Alexandrescu n'est autre que le créateur du langage D. D'une certaine façon sont avis est forcément biaisé.
Ce n'est pas le principal créateur du langage, mais en effet c'est actuellement le membre central du projet.
Contacter le responsable de la rubrique Accueil