Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

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

221PARTAGES

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 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.
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
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 grim7reaper
Membre éclairé https://www.developpez.com
Le 12/11/2015 à 20:23
Citation Envoyé par sazearte
J'ai jamais trop compris l'intérêt de vouloir "remplacer".
Citation Envoyé par Metalman
(sinon je suis comme sazearte : pourquoi vouloir absolument remplacer ?...)
Il y a remplacer et remplacer.
Remplacer totalement je n’y crois pas : on ne jette pas une base de code si énorme d’un claquement de doigts (COBOL en est la preuve vivante…). Et puis le temps qu’il faudrait investir dans ce genre d’entreprise est colossal, pour un gain discutable (ce temps pourrait être mieux utilisé à mon avis).

Par contre, la question du remplacement du C dans certains de ses usages actuels se pose et est pertinente je pense.

Exemple : OpenSSL. C’est quoi l’avantage du C dans ce genre de code (sur les bouts de code sensible aux timing attack, je dis pas mais ça ne concerne pas tout le code…) ? On a vu les résultats avec Heartbleed & cie…
Et histoire de bien répéter l’histoire, on fait une nouvelle implémentation (LibreSSL) en C encore…
Je préfère l’approche des gens qui sont en train de faire une implémentation de TLS en (quasi)pure OCaml.

Citation Envoyé par sazearte
Le C à des avantages et des inconvénient, ces forces et ces limites font qu'il répond a un besoin: la performance.
Je trouve qu’on sacrifie beaucoup de choses sur l’autel de la performance…
En a-t-on besoin à ce point que l’on sacrifie sécurité, vérification statique, notre temps à débugger, … pour avoir cette performance ?
Encore aujourd’hui alors que nous avons (ou commençons à voir) des alternatives qui peuvent nous offrir le même niveau performance (ou quasiment, selon le langage, et ce sont des choses qui progressent au fil du temps) sans avoir à sacrifier autant ?

Et la performance c’est bien beau, mais les ordinateurs ont changés depuis la création du C, et le C ne suis pas toujours ces évolutions qui pourtant permettent d’exploiter au mieux les machines actuelles (et donc d’avoir cette performance si recherchée) :
- parallélisme (CPU multi-core, hyperthreading, …), concurrence : il a fallu attendre C11 pour avoir la notion de thread dans le langage (Ada le faisait déjà en 1983…)
- SIMD : rien en C. Normal me direz-vous, car ce n’est pas portable et je suis d’accord. C’est donc le boulot du compilateur de faire la vectorisation : le problème c’est que le langage est tellement « souple » que le compilateur galère (car il doit être très conservateur), problème que l’on ne rencontre pas dans d’autres langages car ils laissent le compilateurs avoir plus d’informations (Haskell par exemple).
- GPGPU : un peu la même chose que le vectoriel, dans l’idéal ça serait le boulot du compilateur. En C il faut réécrire le code pour en tirer partie, en Haskell pas besoin (je cite pas mal Haskell car c’est un langage que je connais, mais il y en a sûrement d’autres).

Donc bon, la performance et le C c’est pas si rose.

Ça n‘empêche que j’aime bien le C quand même (j’en fait très souvent) et que je ne serais pas contre son remplacement dans pas mal de cas. Mais de là à vouloir le remplacer totalement…

Édit :
Citation Envoyé par Metalman
Excepté le typage : je suis très compréhensif sur l'ultra-manipulabilité des types, étant donné un de ses buts de bas niveau (à méditer cependant)
Même pour ce genre de chose le C joue parfois contre toi.
Exemple avec le type punning qui peut te mettre dans un UB (ce qui entraîne des bugs du genre cité dans cet article (C++, mais pour le coup ça s’applique aussi bien au C)) grâce aux règles de strict aliasing (cf. ici pour un tour d’horizon).
Pour un langage qui se veut bas-niveau, ça devrait être trivial. Mais ça ne l’est pas tant que ça.
4  0 
Avatar de Iradrille
Expert confirmé https://www.developpez.com
Le 18/11/2015 à 14:33
Tient j'écrivais quelques lignes de C, et je me suis rendu compte à quelle point la généricité était chiante en C (void * / macro).

Pourquoi on voit pas mal de "C with classes" mais très peu (voir pas du tout) de "C with templates" ?

Le "C with classes" c'est une abomination, soit en code en C soit en C++... Mais du C avec des templates (pour répondre au manque évident du C dans ce domaine), pourquoi pas ?
Les templates (et les exceptions) sont les premiers composants de C++ à sauter quand un mélange de C/C++ est utilisé, pourquoi ?

Pour les exceptions c'est souvent l'argument du coût : un if toutes les deux lignes serait moins cher qu'un bloc try / catch par ci par là, mais les templates ?
4  0