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 !

Pourquoi les programmeurs systèmes sont-ils trop attachés au C ?
Que doit proposer un langage moderne pour les attirer ?

Le , par Hinault Romaric

21PARTAGES

5  3 
« Le bon vieux langage C », un terme souvent utilisé par l’un de mes amis pour qualifier ce langage système créé en 1970, qui malgré le rythme d’évolution de l’informatique et la sortie des langages modernes demeure le favori des programmeurs systèmes.

Pourquoi ceux-ci restent-ils autant attachés au C en dépit des avancées majeures qui ont permis la création de nouveaux langages riches et flexibles ces dernières décennies ?

Jonathan Shapiro, un chercheur du département des sciences informatiques de l’université Johns Hopkins, dans un article essaye de répondre à cette question en proposant des solutions pour un remplaçant du C.

Les langages de programmation récents comme ML ou Haskell fournissent des types nouveaux, plus forts et expressifs que ceux des langages systèmes comme C ou Ada. Constate Shapiro. Mais, ces langages sont ignorés par les développeurs systèmes.

Pour Shapiro, ce manque d’intérêt serait en quelque sorte dû au fait que les langages de programmation modernes ont été développés au prix d’un niveau prohibitif de l’abstraction.

Les programmeurs systèmes adopteront un nouveau langage si celui-ci leur offre une plus grande facilité dans la compréhension et la maintenance des programmes assez complexes qu’ils écrivent. Ce qu’ils attendent, c’est un langage qui préserve l’état, la gestion du stockage, la représentation et le contrôle de bas niveau. Explique Shapiro.

La solution que propose celui-ci est BitC. BitC n’est pas l’implémentation d’un nouveau langage de programmation. Il a pour objectif de fusionner les progrès de langages de programmation modernes en laissant de coté le polymorphisme et autres sémantiques mathématiques, avec les exigences de la programmation système, tout en fournissant des performances comparables à C.

BitC combine donc les concepts de programmation fonctionnelle de ML et Haskell avec la proximité de l’interaction matérielle des langages de bas niveau comme C.

Les concepts qui ont donné naissance à BitC sont-ils suffisants pour attirer le programmeur système ? Que doit fournir un langage moderne pour se positionner comme une véritable alternative à C ?

le site de BitC

Source : Article de Jonathan Shapiro

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

Avatar de Davidbrcz
Rédacteur https://www.developpez.com
Le 25/05/2012 à 19:41
D'après wikipedia, le langage est mort ....
http://en.wikipedia.org/wiki/BitC
14  1 
Avatar de Firwen
Membre expérimenté https://www.developpez.com
Le 26/05/2012 à 14:42
la prog objet à elle seule ne fait par perdre de performance contrairement à ce que j'entends partout.
j'ai envie de dire, oui et non.

Oui, la programmation objet utilisée avec parcimonie et efficacité ne nuit pas aux perfs.

Mais beaucoup de langages qui se réclament "full-objet" amènent souvent une vtable utilisée par défaut, des allocations mémoires (couteuses ) en cascades, un comptage de refs ou un GC, des patterns utilisés à tord dans tous les sens pour rester "objet", des grands coups de reflexivité partout pour compenser justement les faiblesses de "l'objet".

Je corrigerai ça en : Un support Objet dans un langage bien designé, ne nuit pas FORCEMENT aux performances.

de plus le c++ offre plus de sécurité sur le typage, et quand en portant une appli x86 vers x64 ton compilateur t'insulte que tous les pointeurs ont été stockés dans des int, ça fait quand même plaisir d'avoir changer de langage.
j'approuve et je signe, le GROS plus de C++ par rapport au C n'est pas l'objet, l'overloading et autre gadget, c'est la sureté de typage, et la programmation générique qui sont du pain béni en prog système.
13  0 
Avatar de tiloopz
Membre à l'essai https://www.developpez.com
Le 27/05/2012 à 1:38
Bonjour,

La langage C est très proche de l'électronique sur lequel il fonctionne. La notion de pointeurs est facilement assimilable à la notion de bus d'adresses et la notion de variables à la notion de bus de données. Pour des raisons de performances, j'ai déjà optimisé l'assembleur d'un code C, je vous déconseille d'essayer de faire pareil avec du C#, enfin après que le MSIL se soit compilé sur votre plateforme bien sur

Les types de bases répondent aux besoins de variables de taille différentes. Des types plus complexes sont superflus et diminuent les performances et prennent plus de place. On peux toujours créer des structures ou classes pour cela.

Pour revenir sur la notion de soi disante sécurité, il faut savoir que soit on fait de la sécurité, soit on fait de la performance. Et comme dirait Benjamin Franklin : "Ceux qui sont prêts à sacrifier une liberté essentielle pour acheter une sûreté passagère, ne méritent ni l’une ni l’autre." Par exemple, pourquoi interdire les pointeurs si leur incrémentation permet de réaliser des FFT plus rapide. Au programmeur de savoir ce qu'il fait. Sinon, c'est comme manger sans couteau par crainte du risque de se couper lol.

Pourquoi un autre langage, quel apport ? A mon avis, il faudrait que le support physique et les modes de fonctionnement changent pour éventuellement trouver un langage plus adapté.

Une large communauté, des librairies éprouvées, des millions de codes comme autant de preuves de son efficacité, sans conteste le langage C est le langage par excellence et ce n'est pas prêt de changer
12  0 
Avatar de tomlev
Rédacteur/Modérateur https://www.developpez.com
Le 25/05/2012 à 21:59
Pourquoi ceux-ci restent-ils autant attachés au C en dépit des avancées majeures qui ont permis la création de nouveaux langages riches et flexibles ces dernières décennies ?
Parce que les OS sur lesquels ils bossent sont tous écrits en C, et C reste donc le moyen le plus pratique pour interagir avec les API système. Il est évidemment possible de le faire avec d'autres langages, mais presque toujours via des abstractions qui ne sont pas forcément assez fines pour les besoins de la programmation système.

Les langages de programmation récents comme ML ou Haskell fournissent des types nouveaux, plus forts et expressifs que ceux des langages systèmes comme C ou Ada. Constate Shapiro. Mais, ces langages sont ignorés par les développeurs systèmes.
Euh, il a fumé quoi ?
Déjà que le code bas niveau est généralement assez dur à comprendre, j'ose même pas imaginer ce que ça donnerait en Haskell
Les langages fonctionnels ne sont pas du tout adaptés à la programmation système, vu qu'un de leurs principes est d'éviter les effets de bord. Il est possible de causer des effets de bord, via des monades, mais rien que pour comprendre le concept de monade il faut bien se retourner la cervelle.
En programmation système, les effets de bord sont justement le but recherché (interactions avec le matériel, les applis...) ! Un langage impératif est donc beaucoup plus adapté.
13  2 
Avatar de psychadelic
Expert confirmé https://www.developpez.com
Le 25/05/2012 à 19:22
Pourquoi faudrait-il encore un N-ieme Langage ??

Qui voudrait réécrire Apache, Linux... en BitC ?
et perdre toutes les années à fiabiliser toutes les lignes de codes ??

Et BitC est t'il suffisament bas niveau pour garantir la performance atteinte par le C ???

Sincèrement, j'ai un gros doute...
13  3 
Avatar de Squeak
Membre actif https://www.developpez.com
Le 27/05/2012 à 0:34
Pour moi, le C (et dans une moindre mesure) le C++ sont des langages :

- répandus : ils existent et sont utilisés depuis des années.
- éprouvés : ils ont démontrés leurs capacités à être utilisés dans de nombreuses applications.
- pérennes : pas ou peu de changements dans le langage en lui-même, au contraire d'autres langages qui évoluent plus vite.

Il n'y a pas que des nouveaux projets en informatique. Il y a tout l'existant qui est en grande partie codé en C. C'est un peu comme pour certaines grosses applications de gestion qui sont toujours en Cobol et où on demande sans cesse des programmeurs dans ce langage pour les maintenir (domaine bancaire par exemple, il y a des programmes écrits il y a 30 ans qui fonctionnent encore aujourd'hui et n'ont pas donné une erreur d'un centime...).

Le C est et restera inévitable un bon bout de temps car trop de choses dépendent encore de ce langage.
10  0 
Avatar de stardeath
Membre expert https://www.developpez.com
Le 26/05/2012 à 11:38
si on parle de débutants, effectivement, je dirai même que TOUS les langages peuvent mener à du code qui tombe en marche.

mais si on ne considère que les débutants, dans ce cas, autant ne plus faire de programmation ; et on tombe dans le cas ou les ingés, dès que tu leur demande de diminuer la conso mémoire d'une appli par 2, ou, ne serait ce que d'éviter un malloc dans une boucle de rendu, te répondent qu'ils ne savent pas faire.

là je pense qu'il faut regarder plus vers les programmeurs qui ont de la bouteille, et là c'est bête mais quand j'entends "le c c'est plus rapide", "quoi tu utilises des std::string, looser, char* ftw" j'ai envie de dire flute, zut ...
la prog objet à elle seule ne fait par perdre de performance contrairement à ce que j'entends partout.

de plus le c++ offre plus de sécurité sur le typage, et quand en portant une appli x86 vers x64 ton compilateur t'insulte que tous les pointeurs ont été stockés dans des int, ça fait quand même plaisir d'avoir changer de langage.
9  0 
Avatar de istace.emmanuel
Membre actif https://www.developpez.com
Le 26/05/2012 à 18:04
Pourrait-on aussi se poser la question de savoir si rajouter de nouveaux concept à la manière dont le sysdev est fait actuellement aurait un intérêt ? Est-ce que l'apport de concepts objet apporte un bénéfice pour le dev d'un ordonnanceur ?

En plus il faut voir ce que l'on appel sysdev au final. Si on parle d'un gestionnaire de filesystem ou d'un switcher audio, d'une architecture monolithique ou µkernel, les besoins sont différents et donc les langages choisis peuvent aussi différer.

Pourquoi ne pas plutôt rester sur du "Core" en C et ensuite utiliser des langages plus haut niveau pour le reste ?

Et puis, ne pas oublier qu'on a un historique de C assez lourd, avec des skills actuel de sysdev en C principalement. Changer de langage signifierais un gros investissement en temps et en argent pour former ainsi qu'une période de stagnation au niveau des avancées sur le systèmes. (on reste avec 24h sur une journée, si on passe 8h à apprendre un nouveau langage, on ne le passe pas a faire évoluer le produit)

Bref, est-ce que le jeux en vaut la chandelle ? Ça marche très bien en C le sysdev il me semble, pourquoi vouloir le changer ?
9  0 
Avatar de Lucie-58D1FCBD
Futur Membre du Club https://www.developpez.com
Le 27/05/2012 à 12:47
Le titre ne sonne pas bien en français: "trop attachés" relève de l'affirmation, alors que titre est une question.
Sinon, pourquoi ressortir un article datant de 2006, sur un concept abandonné en 2010, et qui possède des erreurs de conception ?

"Finally, in March 2012 he announced that he had permanently ceased work on BitC, saying that the language had fundamental design flaws and would not work in its current form." (source Wikipedia)

Si on veut quelque chose qui a un goût de programmation fonctionnelle dans un descendant du C, on peut regarder les fonctions anonymes en C++11, Boost.Phoenix, ou les blocks en Objective-C (extension Apple).
7  0 
Avatar de stardeath
Membre expert https://www.developpez.com
Le 28/05/2012 à 19:37
Citation Envoyé par souviron34 Voir le message
euh... Tu n'as pas souvent dû analyser les perfs d'un programme, alors, ou vouloir l'optimiser... *

De plus, suivant le domaine, une modélisation du flux un découpage du soft, une maintenance, est souvent beaucoup plus simple....

*: par exemple les "new" font des allocs et des initialisations sytématiques. Quelqu'un qui sait ce qu'il fait d'une part pourrait créer un tableau, entièrement ou partiellement dynamique, d'autre part pourrait "économier" out un tas d'initialisations si les valeurs sont en fait utilisées seulement après avoir été crites une fois : on peut donc économier N fois les intilialisations sytématique des new.. Et ce n'est qu'un exemple parmi d'autre...
et qu'est ce qui t'empêche de faire la même chose en c++, avec en bonus le typage, les templates et tout le reste.

utiliser le c++ n'implique pas d'utiliser des hiérarchies d'objets polymorphiques de fous, ou des designs patterns qui font le café.

c'est typiquement le genre de commentaire que j'ai décrit, tu crois que ça va tout foutre en l'air alors que c'est juste du c++, tu as les avantages et tu n'es pas obligé d'utiliser les concepts de hauts niveaux.
8  1