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

70PARTAGES

9  4 
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

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de 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.
7  0 
Avatar de Vincent PETIT
Modérateur https://www.developpez.com
Le 24/11/2015 à 20:54
Et en plus le langage C est porté par un secteur probablement plus important que l'informatique; l'électronique et l'embarqué dans le sens général du terme. C'était mon métier !

Dans quasiment tous les appareils qui t'entourent il y a probablement un petit microcontrôleur avec un programme qui tourne dedans. Tous les fabricants, de ce genre de composants, fournissent des compilateurs C (libre comme AVR-GCC, MSP-GCC, ARM-GCC etc... ou privé Keil, IAR etc...)

Pourquoi le C ? Car tu as des micro qui n'ont que 512 octets de RAM (j'ai bien dit octets) et c'est largement suffisant pour ce qu'on lui demande de faire puisque dans beaucoup de cas de figure c'est le PC qui fait les gros calculs. Tout ça pour dire que tu as besoin d'avoir un langage qui te permet de tout maîtriser. Tu imagines que dans les 512 octets tu as la pile et le tas ! Inutile de penser à un langage de haut niveau avec des notions d'héritage, POO, polymorphisme etc... adieu aussi tout ce qui est langage avec Garbage collector (ramassé miette). C'est hyper efficace mais on a pas assez de maîtrise.

On peut quand même imaginer prendre du C++ ou Java mais ça sera pour programmer en fonctionnel comme le C (du coup y a aucun intérêt si ce n'est le masochisme)

Pour moi, il n'y a aucun langage qui peut remplacer le C à cause de l'embarqué (et ce n'est pas une discipline à part car chez vous je suis quasiment sur qu'il y a très certainement au moins 5 fois plus de petits systèmes embarqués que de PC) des petits micro il peut en avoir dans les jouets, manettes de console, télécommande TV, dans la TV, Box, radio réveil, machine à laver, sèche linge, posté à souder, radiateur, thermostat programmable, etc. On est cerné !
7  0 
Avatar de grim7reaper
Membre éclairé https://www.developpez.com
Le 12/11/2015 à 19:22
Citation Envoyé par Metalman Voir le message
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.
Typage relativement faible ?
Undefined/Unspecified/Implementation-defined behavior à tous les étages ?
Langage peu défini sur certains points (on ne te garanti pas IEEE 754, on ne te garanti pas le complément à deux, …).
Assembleur portable je veux bien, mais dans la réalité faire du code vraiment portable au sens de la norme (et pas aux sens de « ce que j’ai observé dans ma vie c’est tel comportement sur tel archi ») c’est loin d’être simple (d’où la célèbre référence à la DS9K que l’on rencontre parfois sur comp.lang.c).
D’autant plus que le C n’est pas si bien équipé que ça pour du code bas-niveau (impossible de packer une structure de manière portable (ce qui se fait très bien en Ada, et en Rust aussi il me semble) par exemple) donc bon, le coup de l’assembleur portable…

Citation Envoyé par NSKis
Si un Google ou un Microsoft décide que le prochain langage à la mode sera le "Zozo", nul doute que ce langage sera rapidement adopté par de nombreuses grandes entreprises, que du jour au lendemain des postes de développeurs "Zozo" seront à pourvoir et qu'une grosse communauté de développeurs spécialisés dans le Zozo apparaitra

Dura lex, sed lex!
Bah nope, suffit de regarder Go : y’a Google derrière et pourtant je n’ai pas vu « de nombreuses grandes entreprises » se mettre à l’utiliser.
Idem pour certains langages de Microsoft qui ont fait des flops.
7  1 
Avatar de Gugelhupf
Modérateur https://www.developpez.com
Le 13/11/2015 à 11:20
La question "Quel langage pourrait remplacer C ?" ou ses dérivés ("Est-ce que le C va mourir ?" etc) revient tout les ans, dans 20 ans on aura toujours du C et niveau concept il n'aura pas bougé d'un poil.
6  0 
Avatar de Iradrille
Expert confirmé https://www.developpez.com
Le 24/11/2015 à 20:30
Citation Envoyé par Tatiekamlionel Voir le message
Le langage qui peut remplaçer le C est le Java puisqu'il est portable et peut fonctionner sur toutes les plates formes
Si Java pouvait remplacer le C, il l'aurait déjà fait.
6  0 
Avatar de 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.
5  0 
Avatar de YingYan
Nouveau membre du Club https://www.developpez.com
Le 13/11/2015 à 12:36
"Andrei Alexandrescu (un des co créateur du langage D)"

Article biaisé de base car il propose comme alternative un langage dont il est un des co créateur.

Donc aucun intérêt sur les avantages/inconvénients car il y a forcément un parti pris.

Et puis quel langage pourras remplacer tel autre ? aucun. chaque langage à ces spécificités et chacun est intéressent suivant les besoins, difficultés à résoudre ...

C'est comme si on se pose la question de quel langage pourras remplacer l'assembleur. Aucun puisqu'au final tout langage compilé devient de l'assembleur, ou un bit code interprété par une machine virtuel qui elle est finalement en assembleur.

Donc si on suit un tel résonnement le seul langage valable est l'assembleur.

Alors chacun sont langage, avec ces avantages et inconvénients et nos moutons seront bien gardés.
5  0 
Avatar de CodeurPlusPlus
En attente de confirmation mail https://www.developpez.com
Le 14/11/2015 à 20:28
Les amateurs de C sont comme les membres d'une secte (dont je fais partie). On ne les convaincra pas que leur langage fétiche peut être remplacé par untel ou untel.

Les amateurs de C++ sont encore plus fanatiques.
5  0 
Avatar de Médinoc
Expert éminent sénior https://www.developpez.com
Le 24/11/2015 à 20:13
Mais il ne remplit pas du tout la même fonction que C.
5  0 
Avatar de RyzenOC
Inactif https://www.developpez.com
Le 12/11/2015 à 19:27
Pourquoi remplacer le C ?

J'ai jamais trop compris l'intérêt de vouloir "remplacer". Le C à des avantages et des inconvénient, ces forces et ces limites font qu'il répond a un besoin: la performance.

En générale, moi je code les partis critique d'un programme en C et le reste en Python.
7  3 
Contacter le responsable de la rubrique Accueil

Partenaire : Hébergement Web