Articles précédents : Articles
- [18] LinuxEdu
- [47] Sortie d'OpenBSD 3.7
- [194] Accord entre la FSF et les développeurs OpenOffice au sujet de l'utilisation de Java
- [23] Un point sur l'audiovisuel dans le monde du libre.
- [39] TNT sous Linux
- [74] Une émission de télé en direct sur le libre
- [10] Traduc Party le 21 mai 2005 à la Cité des sciences
- [18] Quatre actions contre la vente liée
- [6] Les publications néerlandaises sont rendues librement accessibles en ligne
- [97] Mozilla définit la politique d'utilisation de ses marques.
Liens connexes
- Shootout (6315 hits)
- OCaml (1290 hits)
- SmartEiffel (971 hits)
- GNAT (Ada) (912 hits)
Dépêche modérée par
Dépêche éditée par
Articles : Langages et performances : les Français à l'honneur !
Posté par Lionel Draghi (page perso, ). Modéré le 19 mai 2005.Le dernier site similaire n'étant plus mis-à-jour depuis 2003, Brent Fulgham a repris le flambeau, et s'est installé sur un serveur Debian.
Ce site permet de soumettre des benchs, de proposer des réalisations de ces benchs pour un langage, et surtout de consulter les résultats sous différentes formes (y compris graphiques) suivant différents critères (en particulier CPU et utilisation mémoire).
La base des résultats actuels est bien remplie, de nombreux langages et compilateurs y figurant avec un bon nombre de benchmarks (il n'est pas nécessaire de tous les réaliser pour figurer dans le classement).
Surprise, juste derrière un C à la domination chancelante, figurent trois technologies dans lesquelles les Français jouent un rôle important (voire qui sont exclusivement française). Il s'agit respectivement de OCaml, Ada et Eiffel.
Shootout (6315 hits)
OCaml (1290 hits)
SmartEiffel (971 hits)
GNAT (Ada) (912 hits)
> Lire la suite (179 commentaires, moyenne: 2,5). [dépêche : 3130 caractères]
Parlons plutôt des langages eux-mêmes, dont les qualités mériteraient d'être utilisées plus souvent. J'espère que leur présence en tête de classement incitera plus de développeurs à la curiosité.
L'argumentaire usuel de ces trois langages se base plutôt sur une sémantique de haut niveau, sur des choix guidés par les besoins du génie logiciel, sur l'efficacité dans le développement, la portabilité, la qualité obtenue, etc. Les excellentes performances sont rarement évoquées. Et pourtant !
Étant donné que tous trois sont disponibles sur une large gamme de plateformes (CPU/OS), ce sont des alternatives à considérer, au moins en lieu et place de C : on peut utiliser un langage bien plus puissant sans rien sacrifier des performances.
Enfin, tous trois sont assez différents des langages "mainstream". Si vos neurones commencent à macérer dans le jus d'accolade, ils vous feront l'effet d'un chewing-gum fortement mentholé.
Notons que ce classement ne fait pas du bien à tout le monde : C++ est loin du peloton de tête, à tel point que Java fait presque aussi bien. C# s'en sort mieux en particulier en CPU. Quant à gcj, bon dernier des deux classements, soyons charitables : laissons lui encore quelques années pour arriver à maturité.
Vous trouverez certainement tous des résultats surprenants dans ces données. Qui aurait dit, par exemple, qu'Ada monterait sur le podium, avec un score quasiment double de C++ ? Je vous laisse faire votre marché aux conclusions. Je n'en suggère qu'une seule : méfions nous des préjugés !
Pour éviter les trolls trop faciles, je termine sur quelques précisions :
- tout d'abord, le bench est bien sûr sujet à discussions et interprétations interminables. Comme il est répété à plusieurs endroit sur le site de Shootout : "benchmarking without analysis is bogus". Il ne faut pas prendre les résultats au pied de la lettre.
- il faut bien identifier le besoin : les logiciels ont rarement besoin d'une empreinte mémoire optimisée, ou de performances aux stéroïdes. Il suffit de considérer la grande quantité de logiciels donnant pleinement satisfaction écrit dans les langages de script les plus populaires.
- il y a bien d'autres critères que les performances pour choisir un langage.
La liste des critères et leur pondération est à considérer à chaque développement (enfin bon, là je parle pour ceux qui font des choix rationnels :-). En bref, ne psychotez pas parce que votre langage favori n'est pas sur le podium.
- enfin, n'oublions pas que ce qui est évalué n'est pas le langage, mais le couple langage/compilateur. Bien que l'on puisse identifier immédiatement quelques caractéristiques du langage qui vont avoir une influence lourde sur les performances, il reste difficile de faire la part des mérites respectifs de la conception du langage et de l'optimisation du compilateur. Si le compilateur n'est pas déjà très bon, il reste une certaine marge de progression, les résultats peuvent changer.
Remarque...
A noter:
And remember, languages that implement more benchmarks will move to the top of the list, and those with many missing benchmarks will stay at the bottom!
Ca peut expliquer certains résultats, quand on voit qu'il manque 9 benchmarks sur le C, et que 3 sur Ocaml, 2 sur l'ADA, ou qu'il en manque 15 sur le C++ Intel...
Un petit test custom
En ne sélectionnant que le sous-ensemble implémenté par tous les langages cités voilà le résulta :
1er C Intel 34
2eme C GCC 31
3eme Ocaml 22
5eme C# Mono 13
6eme Java 11
PS: inclure les C++ aurait néxessiter de désactiver trop de benchs
Ceux qui auront suivi/participé au troll Java v.s C# comprendront qu'ils feraient mieux de se mettre à OCaml s'ils cherchent un langage à la fois puissant et performant. Si tant est qu'on peut qualifier les deux derniers de puissant quand on les compare à OCaml lol.
-
[^]Re: Un petit test custom
Posté par Torquemada () le 19/05/2005 à 14:04. (lien). Évalué à 10.On aura beau troller sur les performances de java vs C#, le choix d'un langage est aussi souvent lié au framework qu'on peut utiliser, et les composants open source disponibles en java sont très nombreux.
OCaml est un langage reconnu pour ses qualités, mais finalement assez peu utilisé; nul doute qu'il serait beaucoup plus utilisé s'il existait un équivalent du projet jakarta pour OCaml.-
[^]Re: Un petit test custom
Posté par vrm (page perso, ) le 19/05/2005 à 14:12. (lien). Évalué à 3.Idem pour Smarteiffel très bon langage, mais bon le framework est un peu pauvre
-
[^]Re: Un petit test custom
Posté par arnaudus () le 19/05/2005 à 14:12. (lien). Évalué à 9.Ce qu'on oublie trop souvent, c'est que 99% des applications utilisées par les gens "normaux" (c'est à dire ni physiciens, ni administrateurs de serveurs) sont des applis qui demandent une charge cpu ridicule. J'ai quand même passé une semaine avec un athlon 1800+ tournant à 662 MHz suite à quelques futilités ludiques involontaires en root, et j'ai pas vu la différence (sauf peut-être au démarrage, mais je me demande si ça n'est pas l'effet placebo). Pourtant, j'utilise plein d'applications courantes, bureautique, jeux, icônes qui bougent, transparence, bref, tous ces trucs indispensables qui nous font acheter des bêtes de courses (ne riez pas, c'en était une à l'époque de l'achat).
Qu'une appli soit écrite en C ou en Turbo Pascal, du moment qu'elle fonctionne correctement, ça ne me fait ni chaud ni froid...
Bien entendu, je fais brûler vif le premier qui écrit un driver en java. Faut pas non plus abuser.-
[^]Re: Un petit test custom
Posté par fmaz fmaz () le 19/05/2005 à 17:38. (lien). Évalué à 2.Tu as raison, c'est sûr.
Mais le programmeur, lui, veut une chose: pouvoir programmer vite
et bien. Pour cela, il y a deux choses commplémentaires:
1. avoir un grand nombre de bibliothèques. Genre, je veux coder un
navigateur web:
#include <navigateur_web.h>
2. avoir un langage qui évite le plus possible d'erreurs.
Je suis d'accord qu'Ocaml n'a pas de bibliothèque pour piloter
automatiquement la cafetière mais c'est un langage qui aide à
coder juste. Un critère objectif qui vaut ce qu'il vaut: le nombre de
lignes de code. C'est l'un des langages les plus denses du comparatif.-
[^]Re: Un petit test custom
Posté par Antoine () le 19/05/2005 à 17:44. (lien). Évalué à 7.Ce n'est pas vraiment le nombre de lignes de code qui détermine la simplicité d'un langage (sinon Perl peut gagner haut la main...), mais le nombre d'atomes lexicaux.
Un exemple, en Python :
if True:
print "yop"
sys.exit(0)
est aussi simple et dense que :
if True: print "yop"; sys.exit(0)
En développement sur le même thème, le texte de Paul Graham "Succinctness is Power" :
http://www.paulgraham.com/power.html(...)
-
-
[^]Re: Un petit test custom
Posté par Camille Vacher () le 19/05/2005 à 17:41. (lien). Évalué à 3.J'ai quand même passé une semaine avec un athlon 1800+ tournant à 662 MHz [...](ne riez pas, c'en était une à l'époque de l'achat)
C'est encore tout à fait honnête. Enfin personnellement, j'utilise souvent une machine à 166 Mhz (bon, pas d'OOo, et le browser c'est w3m) qui tourne très bien.
Ce qu'on oublie trop souvent, c'est que 99% des applications utilisées par les gens "normaux" (c'est à dire ni physiciens, ni administrateurs de serveurs) sont des applis qui demandent une charge cpu ridicule
En effet, aussi, il n'est pas très interressant pour le développeur d'une telle application de se compliquer avec un langage peu expressif et/ou des optimisations ridicules, et je pense que le présent article veut souligner ca. Et ce qui est interressant de voir dans ces benchmarks, c'est le dernier petit indice: lines. Les trois quarts du temps, le code OCaml est (beaucoup) plus petit que l'équivalent C: soit, c'est des benchmarls, donc à prendre à la légère, mais en pratique, de mon expèrience, un code OCaml est beaucoup plus compact qu'un code C, ce qui ajoute encore à sa lisibilité et à sa facilité de compréhension.
Bien entendu, je fais brûler vif le premier qui écrit un driver en java. Faut pas non plus abuser.
Tiens, tu vas pouvoir faire un bucher avec tous les developpeurs du projet JNode: http://www.jnode.org(...) ;)-
[^]Re: Un petit test custom
Posté par Lionel Draghi (page perso, ) le 19/05/2005 à 19:58. (lien). Évalué à 7.un code OCaml est beaucoup plus compact qu'un code C, ce qui ajoute encore à sa lisibilité et à sa facilité de compréhension
Attention à ne pas en faire une généralité : il n'y a aucune corrélation entre longueur et facilité de compréhension.
Fait lire un test même OCaml par un non informaticien, et le même test Ada dont le source est peut-être quatre fois plus long, vois ce qu'il comprend et tu en aura la preuve.
Personellement, je trouve ce critère tellement non significatif que je me demande ce qu'il fait sur ce comparatif.-
[^]Re: Un petit test custom
-
[+] [^]Re: Un petit test custom
Posté par gph () le 20/05/2005 à 17:58. (lien). Évalué à -2.C'est clair que son affirmation est totalement fausse fait un
List.fold_right .... de List.map d'un autre truc ca prendra une ligne de code pour faire un truc super complexe, mais bonjour la lisibilité du code.
OCaml permet de faire des trucs super bien, mais je dirais pas que c'est un grand langage pour sa lisibilité.
-
[^]Re: Un petit test custom
Posté par Thomas Douillard () le 21/05/2005 à 10:13. (lien). Évalué à 2.C'est sur qu'on peut écrire un truc parfaitement incompréhensible en Caml (je suppose que c'est pareil en OCaml) en très très peu de ligne. Du genre une fonction qui prend en paramètre une fonction récursive d'ordre 2 et qui l'applique sur son deuxième paramètre, le résultat est aussi une fonction qui elle permet de trier une liste, ce genre de chose .
C'est très puissant mais prévoir des aspirines pour comprendre ces quelques lignes.-
[^]Re: Un petit test custom
Posté par TeXitoi (Jabber id, page perso, ) le 21/05/2005 à 16:48. (lien). Évalué à 3.oui, on peut, mais on peut faire des trucs compliqués et illisibles dans n'importe quelle language.
-
[^]Re: Un petit test custom
Posté par Thomas Douillard () le 21/05/2005 à 17:00. (lien). Évalué à 1.C'est pas faux, mais je maintiens que des fonctions d'ordre supérieur à plusieurs niveaux, ca peux être très très dense.
-
[+] [^]Re: Un petit test custom
Posté par mirak mirak () le 22/05/2005 à 01:37. (lien). Évalué à -1.Je te soutiens Ô toi qui maintiens.
-
-
-
-
[^]Re: Un petit test custom
Posté par Camille Vacher () le 21/05/2005 à 10:19. (lien). Évalué à 2.Oui, j'ai un peu dit n'importe quoi en disant "plus court -> plus lisible": magnifique contre-exemple: le Perl.
Mais je reste convaincu que pour des fonctions assez courtes, un code "clair" OCaml sera plus court qu'un code "clair" C et a priori, un informaticien qui relira les deux, comprendra plus vite le premier. Je pense que ceci est du essentiellement à deux choses: l'aspect fonctionel d'OCaml permettant d'exprimer très simplement certaines idées pas forcèment intuitive (le fait que OCaml dispose aussi d'outils impératifs lui évite d'être largué par le C quand le besoin s'en fait sentir), et le fait que OCaml soit un langage de plus haut-niveau que le C et disposant d'une bibliothèque standard complète.-
[^]Re: Un petit test custom
Posté par Ontologia (page perso, ) le 23/05/2005 à 18:52. (lien). Évalué à 1.Je suis déjà tombé sur du code en Caml de 3 lignes en passant 10 minutes à comprendre.
Une fois compris, j'ai effectivement réalisé que cela prendreait 10 fois plus de code en langage impératif classique. Mais je pense que j'aurai compris avant.
Après c'est jutse une question d'habitudes
-
[^]Re: Un petit test custom
Posté par Alexandre Beraud () le 27/05/2005 à 10:17. (lien). Évalué à 1.Oui enfin parfois ca reste vrai. En Perl:
my $obj = pop @list;
Va faire un truc aussi comprehensible en sans cacher ton code derriere un appel de fonction.
L'extreme, evidemment, c'est le code de Perl monk:
if (pop)
...
Et la le neophyte se demande sur quoi on pop. Mais il y a un niveau de Perl ou on peut coder clairement tout en gagnant beaucoup de lignes sur le C. Ca vaut aussi en Python, Ruby, bref tous les langages de plus haut niveau.
-
-
-
-
-
-
[^]Re: Un petit test custom
Posté par reno () le 19/05/2005 à 22:04. (lien). Évalué à 5.Euh, la puissance et la performance ne sont pas les seuls critères pour choisir un language: la lisibilité est mon critère favori.
Et là, Ruby enfonce totalement Ocaml auquel je trouve une syntaxe pas terrible..-
[^]Re: Un petit test custom
Posté par V () le 20/05/2005 à 12:13. (lien). Évalué à 4.En fait le principal argument de caml n'est pas la performance ni la puissance mais vraiment le typage fort (avec inférence de type) qui refuse à la compilation tout programme qui risque de planter. Ce qui fait de caml l'un des langages les plus sûrs. Quand ça compile, ça tourne. Pas de segmentation fault possible. Ce qui fait que l'on programme plus vite en Caml (même s'il faut parfois réfléchir un peu plus, on gagne énormément en temps de débogage).
Pour aller plus loin encore dans cette direction l'INRIA développe COQ, qui a un sytème de types tellement fort qu'il assure que le programme non seulement ne plante pas, mais fait exactement ce que l'on veut. Au prix d'une programmation plus difficile (écrire un programme en COQ c'est écrire une preuve mathématique).
Quant à la syntaxe... histoire de goût et de couleurs... celle de caml fait couler de l'encre en tout cas...-
[^]Re: Un petit test custom
Posté par gph () le 20/05/2005 à 18:03. (lien). Évalué à 1.En fait le principal argument de caml n'est pas la performance ni la puissance mais vraiment le typage fort (avec inférence de type) qui refuse à la compilation tout programme qui risque de planter.
Je ne suis pas trop d'accord, je dirais que le typage fort c'est l'avantage d'ADA. L'avantage de Caml c'est que c'est un langage fonctionnel.
L'inférence de type est très souvent génante pour les développeur car cela demande une très grande rigueur. De plus l'inférence de type provoque des surprises à la compilation, tu peux faire une erreur de logique à un endroit et te retrouvé avec un syntaxe error quelques lignes plus bas car le compilateur continue l'analyse tant qu'il arrive à typer ton terme.
Enfin Caml reste quand meme un de mes langages préférés ^^-
[^]Re: Un petit test custom
Posté par TeXitoi (Jabber id, page perso, ) le 20/05/2005 à 18:24. (lien). Évalué à 2.Je ne suis pas trop d'accord, je dirais que le typage fort c'est l'avantage d'ADA. L'avantage de Caml c'est que c'est un langage fonctionnel.
OCaml est un language fonctionnel, impératif, modulaire et objet, pas uniquement fonctionnel, sinon, il serait beaucoup plus limité. Perso, j'aime ce typage fort, et je trouve que c'est un grand avantage.
L'inférence de type est très souvent génante pour les développeur car cela demande une très grande rigueur. De plus l'inférence de type provoque des surprises à la compilation, tu peux faire une erreur de logique à un endroit et te retrouvé avec un syntaxe error quelques lignes plus bas car le compilateur continue l'analyse tant qu'il arrive à typer ton terme.
Oui, ca c'est sur... ;-)
-
-
-
[^]Re: Un petit test custom
Posté par Patrix (page perso, ) le 20/05/2005 à 13:16. (lien). Évalué à 3.la lisibilité est mon critère favori
Moi aussi. Et sur ce critère je pense que le C doit être parmi les derniers de tous les benchs (il n'y a qu'à voir IOCCC), et C++ est bien pire.
Rappelez-vous qu'un code source est lu bien plus souvent qu'il n'est écrit.
(Un programmeur frustré qui fait du C++ parce que son chef lui a dit que c'est le meilleur langage puisque tout le monde l'utilise.)-
[^]Ah les langages
Posté par pierthi () le 20/05/2005 à 18:13. (lien). Évalué à 3.Mouais, ils ont bon dos les langages de programmation, hein ...
Je pense que tu rejetes le problème sur la mauvaise personne. Une API moisie, mal documentée, un programme incompréhensible, complètement bancal serait la faute du langage ? Ben voyons, si c'était si simple, ça se saurait.
Le problème numéro 1, c'est quand même l'interface chaise-clavier. Je mettrais ma tête à couper que ta frustration vient d'une API mal faite, pénible à utiliser et très certainement mal documentée, qui a du évoluer chaotiquement, comme tant d'autre ont du se farcir ici. Je n'aime moi non plus pas particulièrement le C++, mais je ne pense pourtant pas qu'il soit mauvais, loin de là.
Chaque langage à son domaine où il s'illustre un peu mieux que les autres, qui est fortement conditionné par l'api de base fournit avec. Aux programmeurs de faire les bon choix ... ou d'être motivé pour combler les lacunes de l'api (ce qui n'est franchement pas fun, c'est clair).-
[^]Re: Ah les langages
Posté par Patrix (page perso, ) le 21/05/2005 à 17:42. (lien). Évalué à 6.Hélas, je ne parlais pas des API mais bien du langage lui-même. Une ligne de code vaut mieux qu'un long discours:
while (*ptr2++ = *ptr1++) ;
C'est typiquement le genre de code qu'on trouve à longueur de programme C et qui fait la joie des bidouilleurs, ce qui explique sans doute le succès du langage, mais personnellement ça me donne des boutons...-
[^]Re: Ah les langages
Posté par Guillaume Knispel () le 21/05/2005 à 18:17. (lien). Évalué à 1.Bah c'est comme strcpy cte ligne, ca ce lit et comprend instentanément par tout bon hacker ;)
Ceci étant dit il est aujourd'hui débile d'utiliser ce genre de ligne plutot que strcpy :)-
[^]Re: Ah les langages
Posté par Guillaume CASTAGNINO (page perso, ) le 22/05/2005 à 17:31. (lien). Évalué à 2.Surtout que sans validation des pointeurs ci dessus, ce code est dangereux... heureusement que des gens se battent pour renforcer ce genre de fonction pour éviter les buffer overflow...
Quand on code, il faut aussi absolument faire rentrer en jeu un brin de bon sens...
-
-
-
-
-
[^]Re: Un petit test custom
Posté par wahnby () le 21/05/2005 à 08:26. (lien). Évalué à 2.Personellement je trouve le C tres lisible et je ne doit pas etre le seul sur terre. Le fait d'utiliser des { et } pour les bloc est une tres bonne idée a mon avis.
Ceci dit c'est peut etre une habitude pour moi mais il me semble qu'un { est plus facilement repérable qu'un begin (regardez ce post de loin...)
sinons la syntaxe du python n'est pas mal non plus mais cela donne du code un peut trop compacte a mon gout (et je prefaire qd les variables sont déclarées)-
[^]Re: Un petit test custom
Posté par Philip Marlowe (Jabber id, ) le 21/05/2005 à 09:15. (lien). Évalué à 1.il me semble qu'un { est plus facilement repérable qu'un begin (regardez ce post de loin...)
Tu oublies l'indentation. Le nom de la primitive est beaucoup plus lisible, surtout lorsqu'elle n'est pas précédée de scories telles que extern, static, private, virtual, etc. ainsi que de son type ou de sa classe, dont le nom peut être composé (unsigned long), lorsque le nom de cette primitive est le plus à gauche dans le bloc de texte, et que le texte s'y rapportant est visuellement présenté comme y attenant. En tout cas pour moi, il y a une sacrée différence à lire des programmes en Ada ou en Eiffel et d'autres en C, C++, Java, C# et j'en passe, à soin de présentation égal.-
[^]Re: Un petit test custom
Posté par Guillaume Knispel () le 21/05/2005 à 18:19. (lien). Évalué à 2.suffit de passer a la ligne avant d'ecrire le nom de la fonction
-
[^]Re: Un petit test custom
Posté par Philip Marlowe (Jabber id, ) le 21/05/2005 à 19:46. (lien). Évalué à 1.Il y a sûrement plein de monde qui fait comme ça mais, je ne dois pas avoir de chance, je ne suis jamais tombé sur du code C présenté ainsi. En tout cas j'ai assez souvent à coder en C sur des microcontrôleurs et ça ne m'est jamais venu à l'idée de m'écarter des manières habituelles d'éditer le code. Je ne tiens pas à ajouter d'autres défauts à ceux intrinsèques du langage.
Par contre je ne comprends pas du tout que l'on fasse hériter de ce genre de syntaxe des langages censés être de plus haut niveau.-
[^]Re: Un petit test custom
Posté par Yusei () le 21/05/2005 à 20:53. (lien). Évalué à 2.«je ne dois pas avoir de chance, je ne suis jamais tombé sur du code C présenté ainsi.»
Avec n'importe quel éditeur plus évolué que notepad, tu peux:
1 - indenter automatiquement pour avoir le style que tu veux
2 - utiliser de la coloration syntaxique pour faire ressortir les éléments importants du code
C'est presque indispensable pour rendre du code C lisible, mais ça ne me viendrait pas à l'idée de m'en passer sur un langage comme Eiffel, même si sa structure est plus claire. Quel que soit le langage, il est difficile de faire ressortir les éléments importants simplement avec des blancs...-
[^]Re: Un petit test custom
Posté par Philip Marlowe (Jabber id, ) le 21/05/2005 à 22:39. (lien). Évalué à 2.Oui, je suis au courant de ces évidences que tu assènes. M'exprimé-je si mal pour qu'elles constituent une réponse à mon commentaire précédent ? Pour mémoire le point de départ était que les langages comme Ada et Eiffel de par leur syntaxe mettent mieux en évidence le nom des primitives.
Oui c'est sûr, et je suis bien d'accord avec toi, l'enluminure syntaxique permet de lire plus facilement du code de tout langage. Et je plaide non-coupable : je n'ai jamais utilisé Notepad sous Linux.
-
-
-
-
-
-
interesting alternative programs
> - il faut bien identifier le besoin : les logiciels ont rarement besoin d'une empreinte mémoire optimisée, ou de performances aux stéroïdes. Il suffit de considérer la grande quantité de logiciels donnant pleinement satisfaction écrit dans les langages de script les plus populaires.
mmm, j'ajouterai même que les aspects "il faut utiliser l'agortithme tralali tralala" pénalisent les langages qui utilisent les tournures idiomatiques et autres constructions particulières à gogo. Typiquement sur le 1er test (ackermann donc) faut quand même noter qu'à côté du gagnant:
OCaml 0.11 516 0.11 6
en 11 1/100èmes de secondes on trouve tout de même:
C gcc #2 0.07 10,656 0.07 54
C Intel #2 0.07 188 0.07 54
Perl #3 0.07 1,464 0.07 8
les 3 en 7 1/100èmes de secondes, ce qui est remarquable.
Ces dernières versions ne respectent pas à 100% la règle du jeu, mais quand même...
Après il est vrai que si on ne s'impose pas de suivre les mêmes algorithmes on risque de tester les algos plutôt que le langage lui-même. Moi j'aurais eu tendance à autoriser tous les coups. Mais l'approche du test est intéressante car au fond, l'expérience montre que ce qui fait souvent la lenteur des langages de script c'est qu'ils sont parfois utilisés "comme si c'était du C". Je veux dire par là que souvent la transition d'un langage en un autre se résume à un changement de syntaxe et ne s'accompagne pas (en tous cas c'est ma démarche naturelle si je ne m'impose pas de faire les choses "comme il faut") des changements de méthodologie, de paradigmes, qui sont pourtant essentiels.
Cela se traduit par exemple par "vas-y que je te fais un tri à la mimine avec un for 100% scripté" alors qu'il existe des constructions qui permettent de s'en débarasser en une ligne, avec un temps d'exécution divisé par 100. Cet aspect plombant les performances des langages de script dans le monde de la vraie vie, il n'est peut-être pas idiot que ça ressorte quand-même dans le test. Enfin bon pour un puriste tout de même on se dit que s'imposer de faire un programme en Perl en utilisant "cette méthode là et pas une autre" c'est vraiment marcher sur la tête. TIMTOWTDI qu'y disait.
-
[^]Re: interesting alternative programs
Posté par Nicolas Boulay () le 19/05/2005 à 17:10. (lien). Évalué à 3.Je me suis amusé à comparer perl et C, la plus part du temps perl est 20x plus lent que le C (par contre le C est 5 fois plus verbeux).
Sauf dans un teste, ou il est plus rapide. En effet, le code perl ne contient que quelques lignes et utilise à fond les hash et autre.
Tout cela pour dire que les constructions de base haut niveau des langages de script permète d'avoir des perfs meilleurs qu'en C si on ne veut pas se casser la tête lors du codage.-
[^]Re: interesting alternative programs
Posté par Pipo2 () le 19/05/2005 à 17:30. (lien). Évalué à 3.C'est curieux dans la mesure où souvent les instruction shell sont mappées sur des appel à des fonctions développées en C (pour le TCL au moins c'est certain).
En gros, les développeurs des interpréteurs sont plus compétents que les développeurs des codes C testés sur ce site. Ce n'est plus une mesure des performances induites par les langages à ce niveau.-
[^]Re: interesting alternative programs
Posté par Antoine () le 19/05/2005 à 17:39. (lien). Évalué à 5.En gros, les développeurs des interpréteurs sont plus compétents que les développeurs des codes C testés sur ce site.
Sans aucun doute. Mais les micro-benchmarks du Shootout sont souvent très calculatoires et trop basiques pour être optimisés en tirant parti des spécifités du langage.
Sans compter que, par exemple, réécrire un tri par tas (heapsort) en Python au lieu d'utiliser les fonctions intégrées, c'est complètement idiot.-
[^]Re: interesting alternative programs
Posté par Pipo2 () le 19/05/2005 à 17:46. (lien). Évalué à 4.> Sans compter que, par exemple, réécrire un tri par tas (heapsort) en Python au lieu d'utiliser les fonctions intégrées, c'est complètement idiot.
C'est idiot en production mais lorsqu'il s'agit de mesurer les performances à travail équivalent peut-être pas. On tente de se mettre dans une situation au pire pour laquelle aucune fonction intégré n'existe.
Ce qui est peut-être idiot, c'est de comparer des développements en langage compilé et des développements dans des langages interprétés par des interpréteurs eux-mêmes développés dans un langage compilé, peut-être le même. Non ?
-
[^]Re: interesting alternative programs
Posté par Cook Captain () le 19/05/2005 à 18:05. (lien). Évalué à 4.Au moins une des raisons : ces micro-benchmarks sont trés courts et prennent en compte le temps de lancement des interpréteurs qui sont alors fortement défavorisés.
Comme d'habitude, ces benchs ne valent que par ce qu'ils testent et ne sont intéressants que si tu comptes développer le même genre de programme.
Je ne parierai pas un seul kopek sur une formule 1 pour gagner le Paris-Dakar.-
[^]Re: interesting alternative programs
Posté par mdlh () le 19/05/2005 à 18:12. (lien). Évalué à 3.Au moins une des raisons : ces micro-benchmarks sont trés courts
Court peut etre. Tres court, a voir. Certains font plusieurs minutes. A l'echelle d'une boucle et de 2/3 fonctions c'est pas mal.
prennent en compte le temps de lancement des interpréteurs qui sont alors fortement défavorisés.
C'est d'ailleur pour cela qu'ils essayent d'estimer le temps de chargement. D'ou le "CPU time" et le "Full CPU time". Je te laisse lire la documentation pour comprendre la difference.
-
-
[^]Re: interesting alternative programs
Posté par mdlh () le 19/05/2005 à 18:07. (lien). Évalué à 0.Sans compter que, par exemple, réécrire un tri par tas (heapsort) en Python au lieu d'utiliser les fonctions intégrées, c'est complètement idiot.
Pas tant que ca, mais cela depend surtout de l'objectif de la comparaison. Si tu veux comparer le langage lui meme et pas la qualite des extensions...-
[^]Re: interesting alternative programs
Posté par Cook Captain () le 19/05/2005 à 18:17. (lien). Évalué à 2.Comme tout ce bench est inepte, c'est également stupide de ne pas utiliser les fonctions intégrées des langages: quand qq va utiliser Python, à moins d'être taré, il va pas s'amuser à réécrire un tri par tas (sinon on pourrait également interdire les pointeurs en C, les listes en OCAML, etc...).
-
[^]Re: interesting alternative programs
Posté par imalip (page perso, ) le 20/05/2005 à 01:09. (lien). Évalué à 4.Question bete, elle est ecrite en quoi la fonction integree en question ? Parce que pour peu qu'elle ne soit pas ecrite dans le langageque tu veux tester mais en langage X, c'est sur l'implementation en X que tu fais un bench, agrementee d'un appel dans le langage d'origine. La, le bench devient vraiment vide de tout sens.
--
"While a monkey can be a manager, it takes a human to be an engineer" Erik Zapletal-
[^]Re: interesting alternative programs
-
-
-
-
-
-
Un peu fumeux...
Le site Web le dit lui-même : ces benchmarks sont éminemment faillibles. D'abord ce sont tous des micro-benchmarks, des tests sans commune mesure avec l'échelle d'une application sérieuse. Ensuite la règle de chaque test est arbitraire, et peut favoriser certains langages par rapport à d'autres. Enfin, la plupart des tests interdisent d'utiliser des bibliothèques tierces, bien que celles-ci puissent quelquefois donner d'énormes améliorations.
Surtout, ce type de comparaison isole le temps d'exécution en ignorant un autre temps tout aussi important : le temps passé à écrire, débugger, maintenir un programme. Les utilisateurs de langages comme Python ne sont pas dupes, ils savent que le C est plus "rapide" à l'exécution... mais uniquement si on dispose de beaucoup de temps pour écrire un programme aussi soigné et bien conçu qu'on le ferait en Python.
« Are your programs even like these benchmarks?
* Do your programs startup and finish within a few seconds, like these benchmarks?
* Are your programs tiny, like these benchmarks?
* Do your programs avoid library re-use, like these benchmarks? »
http://shootout.alioth.debian.org/miscfile.php?sort=fullcpu&fil(...)
-
[^]Re: Un peu fumeux...
Posté par Pipo2 () le 19/05/2005 à 16:08. (lien). Évalué à 1.Non, ce type de site mesure la qualité d'un résultat (un programme) selon des critères de vitesse d'exécution et d'occupation mémoire et classée suivant le langage utilisé pour produire le code.
Le temps de conception, la durée du développement, sa difficulté (temps de débuggage) et la maintenance soulèvent des problèmes de productivité et de coût de production. Ces problèmes ne sont tout simplement pas traités par le site.
Lorsqu'on doit faire un choix, je trouve pratique de disposer d'une base de donnée en ligne comme celle là qui donne une idée grossière sur l'un des critère (important à mon avis) à prendre en compte : les performances attendues du futur produit en fonction du langage de programmation utilisé. Il est clair que d'autres critères sont à examiner qui, suivant les contraintes, peuvent se révéler prépondérants mais ils ne sont manifestement pas du ressort de Shootout et on ne peut pas le leur reprocher.
Il est également à noter que de nombreux facteurs d'efficacité sur un projet ne sont même pas conditionnés par le langage utilisé (doit-on sous-traiter, quel outil de gestion du projet, du workflow, quel IDE, quel gestionnaire de versions, combien de développeurs utiliser pour diviser les délais, quelle contrepartie est acceptable en gestion du projet, quelle tolérance d'erreur au résultat, ...). Un site comme celui-ci n'a pas vocation à faire les choix à notre place mais veut donner un éclairage sur l'un des aspects techniques importants. Je trouve qu'il ne le fait pas mal dans la mesure où l'affichage des résultat est très customisable.-
[^]Re: Un peu fumeux...
Posté par Nicolas Boulay () le 19/05/2005 à 17:13. (lien). Évalué à 2.Il y a quand même une estimation du temps de développement : la taille du code.
Il faudrait regarder comment fait sloccount pour être précis. Mais à la louche, on peut dire que le temps de codage est proportionnel à la taille du code.-
[^]Re: Un peu fumeux...
Posté par Cook Captain () le 19/05/2005 à 18:19. (lien). Évalué à 5.Euh... j'ai vu des programmes en Perl d'une seule ligne dont le développeur avait du passer un certain temps à l'écrire.
-
[^]Re: Un peu fumeux...
Posté par Krunch (Jabber id, page perso, ) le 21/05/2005 à 00:16. (lien). Évalué à 3.http://slashdot.org/comments.pl?sid=126697&cid=10605709(...)
--
Free Softwares Users Group Arlon (Sud Luxembourg, Belgique)
pertinent, e adj. Approprié ; qui se rapporte exactement à ce dont il est question.
-
[^]Re: Un peu fumeux...
Posté par Alexandre Beraud () le 27/05/2005 à 10:25. (lien). Évalué à 1.Cela n'est vrai que dans le cas d'une expression reguliere. Evidemment si tu fais le pari d'ecrire tout en une ligne, ton expression reguliere va devoir etre monstrueuse. Mais c'est le cas de tous les langages implementant les regex (en natif comme en module).
-
-
-
C comme les sondages ce truc :)
C'est un peut comme les sondages ce truc : plein de chiffres qui ne veulent rien dire, des classements sur des bases non pertinentes, ...
Bref aucun des langages n'est testé à la même manière, pour certains, il manque plein de tests. Comparer des résultats sur un langage/compilo sans avoir effectué les mêmes/même nombre de test ça ne veut rien dire.
De plus, comment faire un truc pareil sans appeler au troll, genre ouais mais il a utilisé gcc 3.4.4 pou gcj alors qu'il y a la 4.0.0 qui est mieux ou inversement. Il a utilisé tels optimisations de compilation alors que pour ce truc, il aurait mieux valu tel ou tel option,il ne sait pas codé en tel langage, et a écrit sont truc comme une procasse, il aurait du coder la même de telle ou telle manière et mon langage aurait tout torcher.
Bref ces benchmarks ne sont aucunement significatifs et ne veulent rien dire du tout !!!
-
[^]Re: C comme les sondages ce truc :)
Posté par Vivi (page perso, ) le 19/05/2005 à 15:29. (lien). Évalué à 2.Bref ces benchmarks ne sont aucunement significatifs et ne veulent rien dire du tout !!!
n'importe quoi : ça veut bien dire quelque chose mais il faut analyser. Il faut un peu faire marcher son cerveau, aller lire le code des différents benchs, comprendre pourquoi ça été ecrit comme ça, et en tirer les conclusions qui conviennent.
C'est stupide de prendre tous ces chiffres pour argent comptant (« mon langage est 23% mieux que le tien ! ») mais c'est encore plus stupide de tout rejeter en bloc.-
[^]Re: C comme les sondages ce truc :)
Posté par Cook Captain () le 19/05/2005 à 18:13. (lien). Évalué à 2.Imagine des sondages dont les questions et le nombre de questions ne sont pas les mêmes en fonction des sondés, j'ai du mal à croire que statistiquement, on puisse en tirer grand chose...
-
[^]Re: C comme les sondages ce truc :)
Posté par Pierre Jarillon (page perso, ) le 21/05/2005 à 17:59. (lien). Évalué à 5.C'est comme les sondages.... surtout quand on sait que 78.36% des statistiques sont fausses.
-
-
[^]Re: C comme les sondages ce truc :)
Posté par farib () le 19/05/2005 à 15:34. (lien). Évalué à 3.> C'est un peut comme les sondages ce truc : plein de chiffres qui ne veulent rien dire
On sait plein de choses sur les sondages, et notamment, qu'un sondage sur 1000 personnes est fiable à 5 points prets à 95%; et que pour que le sondage soit fiable à 1/2 point près, avec le même risque, faudrait interroger 100 000 personnes.
C'est pas parfait, mais ça vaut ce que ca vaux.-
[^]Re: C comme les sondages ce truc :)
Posté par arnaudus () le 19/05/2005 à 16:02. (lien). Évalué à 5.Selon mes calculs, c'est plutôt + ou - 3% pour N = 1000. Si les proportions dans la population sont de l'ordre de grandeur de 50/50, alors on s'attend à avoir en moyenne 500 oui, avec une variance de 0.5*(1-0.5)*1000, soit 250. En approximant par une loi normale, on a une moyenne de 500 et un écart-type de 250^1/2 soit 15,9. On prend un risque bilatéral de 5%, on a donc un intervalle de confiance de x - 1,96*15,9 < X < x + 1,96*15,9, soit, si x = 500 dans l'échantillon, 469 < X < 531 (en pourcentages : 46,9 < p < 53,1).
Je ne connais pas les détails de la fameuse "méthode des quotas", mais je pense qu'ils échantillonnent de manière biaisée pour diminuer l'écart-type (tout en biaisant l'échantillonnage, évidemment), mais l'idée est là quand même : les sondages 51/49, et autre "oh le oui a augmenté", c'est vraiment du pipeau de journaliste inculte ou de politicien de mauvaise foi.
C'était quoi, à la base, le thème de la discussion?-
[^]Re: C comme les sondages ce truc :)
-
[^]Re: C comme les sondages ce truc :)
Posté par arnaudus () le 20/05/2005 à 07:21. (lien). Évalué à 4.C'est comme 42, c'est un nombre magique :-)
En fait, on a 95% de la loi normale entre moyenne - 1,96*écart-type et moyenne + 1,96*écart type . Quand on fait un intervalle de confiance à 95% (c'est à dire qu'on veut avoir 19 chances sur 20 de ne pas se planter), il faut donc prendre 1,96. Si on veut un intervalle de confiance à 99%, c'est 2,58.-
[^]Re: C comme les sondages ce truc :)
Posté par Pierre Jarillon (page perso, ) le 21/05/2005 à 18:06. (lien). Évalué à 5.Si on admet que l'évaluation de l'erreur sur la la valeur moyenne d'une gaussienne suit une loi de Xhi2, on peut démontrer que le rapport entre deux évaluations suit une loi de Fisher-Snedecor.
C'est assez évident et je ne pense pas qu'il soit nécessaire de vous le démontrer ;-))
-
-
-
[^]Re: C comme les sondages ce truc :)
Posté par salvaire () le 19/05/2005 à 16:28. (lien). Évalué à 4.Le problème majeur des sondages, c'est les erreurs systématiques. Le sondé ne sait pas quoi répondre, le dîner est entrain de cramer, frontiste menteur ... Sa explique beaucoup de chose quant on sait de quoi on parle, n'est ce pas Mr/Mme les politiciens/journalistes!
Dans le même registre, la baisse miraculeuse du mois pour le chômage: 0.0001%, fluctuation statistique ou politique efficace?
Un jour, j'ai trouvé un livre écrit par un américain sur le sujet. Si je me souviens bien le titre était "L'illusion statistiques". En bref, les politiciens gouvernent à partir de données qu'ils ne comprennent pas ...-
[^]Re: C comme les sondages ce truc :)
-
-
-
benchmarks bidons
je n'ai pas lu les modalités, mais quand je vois des comparaisons à coup de centièmes de millisecondes, je me dis que c'est pas très sérieux. Il faut des temps d'exécution de l'ordre de la minute pour commencer à avoir des résultats significatifs et que les "dérangements" extérieurs prennent une portion non-significative.
-
[^]Re: benchmarks bidons
Posté par Beretta_Vexee () le 19/05/2005 à 20:41. (lien). Évalué à 1.Qui plus est quand l'on compare des langages compilés et interprétés dans le même teste, personnellement j'attribue au chargement et a la charge fixe de l'interpréteur les très mauvais score de python. De plus la qualité du code de chaque teste celon chaque langage peut varier, ce genre de test fait intervenir énormément de paramétres, et comme cela déjà été dit plus haut la vitesse pure n'est pas forcement le principale critére de choix d'un langage sans quoi on coderait encore tous en ASM.
--
Il relève de la responsabilité du lecteur de contrôler, par tous moyens, l'adéquation du message à ses besoins et de s'assurer qu'il ne causera pas de dommages aux personnes et aux biens.-
[^]Re: benchmarks bidons
Posté par TImaniac (page perso, ) le 19/05/2005 à 20:49. (lien). Évalué à 2.personnellement j'attribue au chargement et a la charge fixe de l'interpréteur les très mauvais score de python.
Autant le chargement on pourrait l'enlever, autant l'interprêteur, comme tu l'indiques, est "fixe". Il contribue donc au score de Python de manière "régulière".
comme cela déjà été dit plus haut la vitesse pure n'est pas forcement le principale critére de choix d'un langage sans quoi on coderait encore tous en AS
Tout est une histoire de compromis et de polyvalance. l'ASM et un langage inteprêté comme Python sont un peu les extrêmes. Je te laisses te faire tes propres conclusions.
-
Ocaml va t'il remplacer C++?
Ce qui est intéressant avec ce benchmark. C'est dévalué la perte de performance avec un langage de haut niveau.
Dans le domaine du calcule numérique en physique, C++ a remplacé Fortran. C++ est un langage oo rapide, mais c'est une horreur. Sa syntaxe est indigeste (surtout pour un physicien). L'introspection est beaucoup trop limité, pas de oo dynamique à la ObjectiveC. Le système d'arguments par défaut est une belle saloperie, vive les labelles. La stl est une aberration (code dans l'interface, code bloat). Il n'y a pas d'interpréteur valable. etc ...
Grâce à ce benchmark on peut voir qu'Ocaml semble peut pénalisant au niveau vitesse par rapport à C++. Je me demande bien qu'elle va être l'intérêt du C++ d'ici quelques années avec les processeurs 4 cores. Il y a 10 ans, on pouvait comprendre son design. Aujourd'hui, j'ai des doutes! Car mêmes en calcule intensif, le temps d'exécution est très relatif par rapport au temps cumulé d'écriture, de compréhension et de mise au point.
-
[^]Re: Ocaml va t'il remplacer C++?
Posté par Matthieu C () le 19/05/2005 à 16:57. (lien). Évalué à 1.Dans le domaine du calcule numérique en physique, C++ a remplacé Fortran.
Le fortran n'est pas si mort que ca : il existe des tas de biblioteque que les entreprises rechignent a migre, le language est encore en evolution et je crois que certain aspet du language (pas de pointeur ???) facilite l'optimisation au niveau de la compilation.-
[^]Re: Ocaml va t'il remplacer C++?
Posté par mdlh () le 19/05/2005 à 18:17. (lien). Évalué à 3.Le fortran n'est pas si mort que ca : il existe des tas de biblioteque que les entreprises rechignent a migre
Je pense qu'il parlait des nouveaux developpements.
e language est encore en evolution et je crois que certain aspet du language (pas de pointeur ???) facilite l'optimisation au niveau de la compilation.
En theorie, oui. Malheureusement il faut trouver un compilateur qui le fasse correctement. Certains le font, mais faute d'utilisation a grande echelle, on a souvent des surprises. "Calcul rapide mais resultat incorrecte" remonte a mon oreille assez souvent a propos des compilos fortran.-
[^]Re: Ocaml va t'il remplacer C++?
Posté par Guillaume Knispel () le 20/05/2005 à 06:47. (lien). Évalué à 2.Je suis sûr à 100% que le fortran n'est pas mort non plus dans les nouveaux developpements... Maintenant étant donné que je me base uniquement sur quelques cas dont j'ai connaissance pour dire ca je ne connais pas trop la proportion dans laquel il subsiste... :)
-
[^]Re: Ocaml va t'il remplacer C++?
Posté par Troy McClure (page perso, ) le 20/05/2005 à 07:27. (lien). Évalué à 3.Non il n'est pas mort, mais ils y a des gens qui se battent:
http://www.fortranstatement.com/(...)
-
-
-
-
[^]Re: Ocaml va t'il remplacer C++?
Posté par Pipo2 () le 19/05/2005 à 17:41. (lien). Évalué à 2.Tu estimes qu'Ocaml est à la fois plus agréable à écrire, mieux conçu et plus performant. Si tu as raison, je crois que tu tiens la réponse à ta question.
Il faut quand même se méfier des raisonnement logiques. On doit aussi tenir compte des parcs installés, de l'importance des communautés d'utilisateurs, éventuellement de l'existence d'un plus ou moins grand nombre d'API et de bibliothèques (encore que le partage de bibliothèques développées en des langages différents mais compilés reste assez simple hors problème de prototypage si on ne dispose pas du .h adapté au langage utilisé, ordre, stockage et format des arguments passés et peut-être d'autres détails). Il y a de l'inertie dans ce domaine. Exemple, il paraît que le Cobol est mort depuis 20 ans.-
[^]Re: Ocaml va t'il remplacer C++?
Posté par ... a little wood elfe () le 20/05/2005 à 07:53. (lien). Évalué à 2.Il parait oui, mais ce n'est pas le cas pour les 12 personnes (dont je fait partie) qui viennent de suivre une formation de 6 semaines pour en faire au cours de leur missions...
-
-
[^]Re: Ocaml va t'il remplacer C++?
Posté par Tobu () le 19/05/2005 à 18:04. (lien). Évalué à 2.On retrouve effectivement le C++ derrière le C, ce qui peut sembler surprenant étant donné que les choix de conception du C++ étaient justement que toutes les fontionnalités du C soient disponibles sans perte de performance.
Ce choix de conception a donné des résultats comme la compilation en statique des templates (Liste<int> et Liste<Widget> sont compilés comme deux classes séparées, parce que les templates ne devaient pas rajouter de coût); de manière générale la taille du code est à peu près 5 fois plus grosse pour pouvoir faire en statique tout ce qui peut l'être, et au final on se retrouve avec des résultats moins performants.
L'explication est sans doute que les binaires plus gros utilisent moins efficacement le cache du processeur, mais en tout cas on voit que concevoir un langage pour la performance en s'attaquant à des cas bien précis ne donne pas de bons résultats.-
[^]Re: Ocaml va t'il remplacer C++?
Posté par Matthieu C () le 19/05/2005 à 18:54. (lien). Évalué à 6.La gestion des exceptions en C++ font aussi grossir les binaire fortement : il faut decrire en format dwarf chaque operation sur la pile (sauvegarde/restauration de pointeur, empillage/depillage) pour pouvoir revenir a un etat coherent...
Par contre en cout d'excecution ca devrait etre negligeable.
PS : pour la petite histoire, y en a qui on fait du traitement d'exception en asm (dans la nptl) et c'est comment dire assez horrible.
Hereusement que les nouvelles version de gas supporte les instruction dfi qui permette de generer le dwarf automatiquement...
-
Dommage ...
Salut,
Je suis un peu déçu par la rédaction de la news. En effet, elle insiste beaucoup sur l'aspect benchmark lui-même, sans ouvrir le débat plus large sur l'utilisation de langages de haut-niveau. Du coup, le débat tient plus du troll mon langage est mieux que le tien, non, c'est le mien qu'il est le mieux, etc... (trolls qu'on a déjà dans la news sur OpenOffice et Java).
Ce qui est intéressant, c'est de voir que les langages de haut niveau ne sont plus sous-performants par rapport à des langages comme le C de base. L'important, ce n'est pas de savoir si Ocaml s'exécute 0.5% plus vite que du Java ou du C++ dans tel cas précis, mais bien de voir que les performances globales des langages de haut niveau sont tout à fait honnêtes.
À partir de là, on pourrait se demander si il ne serait pas judicieux d'arrêter de développer tous les logiciels avec des langages préhistoriques comme le C. Je ne dis pas ça parce que je ne sais pas programmer en C (je bosse sur de la programmation système, donc que du C), mais parce que pour moi coder gkrellm, thunderbird ou grisbi en C, c'est une perte de temps. Des langages de haut niveau existent, ils rendent le code plus lisible, plus abordable pour des contributeurs et ils permettent d'éviter les bugs foireux de débordement de buffers, de mémoire pas libérée et autres. Pour moi, ces langages de haut niveau, c'est vraiment un atout pour le programmeur. Pourquoi ne pas les utiliser plus massivement pour toutes les applications de bureau ?
La performance ne me semble pas être la bonne raison : la plupart des logiciels "de bureau" ne font pas du calcul scientifique qui nécessite d'être optimisés aux petits oignons.
En fait, j'ai l'impression que pour l'instant, le langage C est pris parce que c'est le seul suffisamment répandu. Aucun langage de haut niveau n'a vraiment réussi à s'imposer : ni Ocaml, ni Eiffel, ni Java, ni C#.
Quand je vois Novell qui essaie d'utiliser C# et Mono dans ses nouveaux outils et logiciels, je trouve que c'est plutôt une bonne idée. Une bonne idée dans le principe d'utiliser un langage de haut niveau, mais on sait tous que C# et Mono peuvent peut-être poser des problèmes (pouvoir de Microsoft ? brevets ?).
Qu'en pensez-vous ? Pourquoi les applications sont-elles toutes développées en C ?
-
[^]Re: Dommage ...
Posté par collinm (page perso, ) le 19/05/2005 à 18:16. (lien). Évalué à 2.tout dépent des applications, il y a de moins en moins qui sont écrit en c
dans le commerce c'est haut la main C++ qui gagne...
faut pas raconter n'importe quoi, java s'est imposé en entrerprise, dans les gros système
s'imposerra-t'il sur le marché du bureau avec mustang et dolphin?
gnome utilisera t'il java ou mono?--
www.laboiteaprog.com
-
[^]Re: Dommage ...
Posté par Tobu () le 19/05/2005 à 18:31. (lien). Évalué à 3.Moi j'aime bien la news:
Parlons plutôt des langages eux-mêmes, dont les qualités mériteraient d'être utilisées plus souvent.
Enfin, tous trois sont assez différents des langages "mainstream". Si vos neurones commencent à macérer dans le jus d'accolade, ils vous feront l'effet d'un chewing-gum fortement mentholé.
L'aspect langage pour ses capacités d'expression mérite d'être développé.
Quand à savoir pourquoi le C est utilisé, il faut dire qu'il est facilement identifiable et qu'il permet de rassembler des contributeurs plus facilement. Et il permet d'écrire du code qui sera facilement lib-ifié et pourra s'imposer. En ce qui concerne ses qualités propres, il ne rend pas impossible la programmation de haut niveau (mais sans garde fou).
Par contre, utilisé en tant que langage de haut niveau il coûte beaucoup plus en refactorisation, il est difficile à faire évoluer et à réutiliser. Donc les nouveaux projets ont intérêt à éviter.
-
[^]Re: Dommage ...
Posté par CoinKoin () le 19/05/2005 à 18:40. (lien). Évalué à 6.Qu'en pensez-vous ? Pourquoi les applications sont-elles toutes développées en C ?
Au hasard :
Disponibilité de compilateurs nombreux, efficaces et sûrs (enfin, raisonnablement) => indépendance vis-à-vis du fournisseur du compilateur.
Disponibilité de nombreux développeurs => indépendance (relative) vis-à-vis des développeurs (je parle du point de vue de la méchante entreprise, s'entend), facilité à auditer le code (essayez d'auditer une jvm codée en whitespace :-D ... )
Expérience disponible en interne.
Forte quantité de code libre de qualité facilement réutilisable ("On s'en fout, que ce soit du GPL, puisqu'on le garde en interne", "Tiens? du BSD!"); bibliothèques nombreuses.
Technologie éprouvée, parfaitement maitrisée, problèmes connus (tout le monde sait que le C est sensible aux problèmes de dépassement de tableaux, il suffit d'y faire attention); frilosité des décideurs ou des codeurs.
Maîtrise du code produit, et liberté de faire ce que l'on veut dans le programme (comment fait-on pour faire un lien matériel entre deux fichiers en Java, déjà? - Je VEUX faire un buffer overflow à cet endroit, et je ne comprend pas pourquoi je n'y arrive pas dans en Ada).
Portabilité raisonnable.
Tous les arguments qui précèdent, réunis dans un seul langage.-
[^]Re: Dommage ...
Posté par Lionel Draghi (page perso, ) le 19/05/2005 à 19:50. (lien). Évalué à 7.Je VEUX faire un buffer overflow à cet endroit, et je ne comprend pas pourquoi je n'y arrive pas dans en Ada).
C'est une caractéristique essentiel d'Ada : tout est possible, y compris un buffer overflow.
Mais pour faire une goretterie pareille il faut faire un effort une fois. (Je me demande bien pourquoi, au passage).
Dans d'autre langage c'est pour éviter le buffer overflow qu'il faut faire des efforts... tout le temps.
L'esprit n'est pas le même, et ca fait une grosse différence.
-
[^]Re: Dommage ...
Posté par let antibarbie = xp <- xp - 1 (page perso, ) le 23/05/2005 à 19:07. (lien). Évalué à 1.Rofl, bientôt un troll OCaml contre Whitespace :-)))
Pour ma part, je pense qu'au dela de la disponibilité en nombre de programmeurs, bien que de plus en plus de jeunes en fassent à l'école, il manque aussi à OCaml certains critères pour que le patron moyen (et un patron, c'est malheureusement un patron) ose se pencher un peu dessus :
- Une réputation... actuellement c'est plus du genre "un truc de chercheurs"
- Une belle IDE présente sous Win, Mac et Linux, qui soit pleinement fonctionnelle
- Un débuggeur potable et visuel (i.e. facile à utiliser)
Montrez moi les trois et je tente le coup avec mon patron (on passe notre code delphi en OCaml - ça peut pas être pire que Delphi 5.0 !)
-
-
[^]Re: Dommage ...
Posté par herodiade () le 19/05/2005 à 20:05. (lien). Évalué à 5.Peut être parceque les developpeurs de LL font généralement ça pour le plaisir (et pas pour le rendement, les deadlines etc.) ?
Je pense aussi qu'un grand plaisir est d'utiliser un langage dont l'apprentissage permet aussi de mieux maitriser et comprendre le système sur lequel on l'execute. Ici le C est roi.
Et puis je pense que les devs de LL n'ont pas besoin de se conformer aux lubies des decideux préssés comme en entreprise ; et qu'on ne leur vend pas si facilement du java-c-est-portable et autre c-sharp-c-est-universel à coup de campagnes de marketing sur 01.net ...-
[^]Re: Dommage ...
Posté par Lionel Draghi (page perso, ) le 19/05/2005 à 20:39. (lien). Évalué à 3.Je comprends bien ce que tu dis sur l'aprentissage.
Mais concernant le développement, il ne s'agit de rien d'autre que de ton temps : tu le gaspilles ou tu l'utilises.
Débuggez ou développez, that is the question.
La plupart des dev Ada utilisent leur debugger tous les trois mois. Ca parait incroyable, mais c'est la stricte vérité.
Et pour ta dernière phrase, je me félicite que les dev de LL ne fassent pas le même choix que les entreprises, car curieusement les entreprises ne sont que rarement rationnelles, et elles vivent dans la psychose de prendre du retard et ne pas être dans le "mainstream".-
[^]Re: Dommage ...
Posté par Guillaume Knispel () le 20/05/2005 à 07:00. (lien). Évalué à 3.La plupart des dev Ada utilisent leur debugger tous les trois mois. Ca parait incroyable, mais c'est la stricte vérité.
J'fais la meme chose en C, incroyable non ? :)
Globalement je pense qu'un langage permissif permet certe de faire n'importe quoi facilement, mais qu'un peu de rigueur suffit à creer des trucs fiable et bien écrit pas trop lentement. Mais je ne me fait pas d'illusion, le haut niveau permet de bonne économie de temps de devel, et force les gens à ne pas écrire n'importe comment. J'insiste sur le fait que cela a un cout à l'execution (quelqu'il soit : empreinte mémoire, charge CPU, pires cas, ...) ou un cout à l'acces au langage (changement de modèle de developpement, framework), et qu'il faut determiner son degré d'acceptabilité.-
[^]Re: Dommage ...
Posté par Lionel Draghi (page perso, ) le 20/05/2005 à 23:41. (lien). Évalué à 2.J'insiste sur le fait que cela a un cout à l'execution
Tout à fait, mais justement le bench montre que ce coût peut-être faible.
Par ailleurs, dans le cas de Ada, de nombreux checks sont fait à la compilation, car le source est sémantiquement riche. Ceci est sans conséquence au niveau du code généré.
Quand aux vérifications à l'exécution, tu as la possibilité de les enlever là ou tu le souhaite, soit par les options de compilation, soit directement par des pragmas dans le source. Ceci est utile par exemple lorsque qu'un outils externe te fournit une preuve formelle de ce que ces vérifiations sont inutiles.
Mais en fait, c'est rarement utile, car le compilateur fait un très bon boulôt d'optimisation.
Tu as donc le beurre et l'argent du beurre :
- vérif en abondance à la compil,
- vérif à l'execution pour le reste,
- performance quand il le faut.
Pour finir, il y a un compilateur Ada qui fait très fort car il ajoute de nombreux warnings et optimisations par dessus ce qui est imposé par le langage (et même des suggestions de corrections pour les erreurs bateau et les typos).
Et pour la chance du monde du libre, il se trouve que c'est justement GNAT, le compilo Ada de gcc.
-
-
-
-
[^]Re: Dommage ...
Posté par Lionel Draghi (page perso, ) le 19/05/2005 à 20:26. (lien). Évalué à 5.Salut Thomas,
Tu as raison, j'en ai trop fait sur le bench, et les précautions pour éviter les trolls sont parfaitement inutiles sur ce genre de sujets. J'ai en fait commencé une réponse dans la discussion Java et OOo, mais ca m'embettait de participer à ce troll.
Alors, j'ai fais un article.
Toutefois, ce que tu dis est exactement la première moitié de la news. Ta conclusion sur la l'inutilité de C dans la plupart des développement moderne est exactement l'essence de l'article.
L'autre message que je voulais faire passer, c'est que les solutions "mainstream" ne sont pas forcément les meilleures, mais, bon, c'est si rassurant d'être dans la masse. Utiliser une solution originale demande d'être cultivé déjà rien que pour en avoir eu connaissance, encore plus pour bâtir un argumentaire comparatif (alors que si tu fais du C personne ne te demande rien).
Faut être un peu couillus ou associable, je trouve :-).
Tiens, sans le faire exprès je t'ai donné une réponse à ta question sur pourquoi C domine toujours outrageusement :-)
-
[^]Re: Dommage ...
Posté par karteum59 () le 20/05/2005 à 11:17. (lien). Évalué à 4.Mets-toi à la place du programmeur débutant. Pour se mettre à programmer, quelles docs trouve-t-il en premier à Carrouf dans le rayon des bouquins Sybex/Microapp à 10 euros -> C++/Java ! Et même s'il a appris que OCaml est un super langage, et qu'il se décide à acheter un bouquin pour s'y mettre (50 euros mini quand même), quel genre de bouquin trouve-t-il ? Une grosse intro très rigoureuse à la programmation fonctionnelle (voire au lambda-calcul), de l'algorithmique avec des arbres/listes chaînées, etc. Des choses très bien pour comprendre, acquérir de la rigueur et devenir un bon programmeur mais qui vont décourager notre programmeur débutant qui voudrait savoir rapidement faire des applis qui cartonnent comme avec Python... A quand un "Ocaml pour les nuls" ? :o)
Et si le programmeur connaît le C/C++ (comme moi), il veut aussi pouvoir s'y mettre rapidement en se raccrochant autant que possible à ce qu'il connaît. Ce serait une bonne chose si les concepteurs de OCaml écrivaient un bouquin/tutoriel visant le programmeur moyen (pas forcément étudiant en informatique) avec un peu plus de concrêt, genre un "OCaml pour les programmeurs C/C++, avec des exemples utilisant QT, OpenGL, SDL...
Enfin, apparemment (je ne maîtrise pas le sujet) il semble y avoir une véritable barrière à l'entrée pour les débutants qui voudraient utiliser OCaml avec des libs en C (pour lesquelles aucun binding officiel n'aurait été écrit). Notamment je crois qu'il faut faire gaffe à des détails liés au gc...-
[^]Re: Dommage ...
Posté par V () le 20/05/2005 à 12:21. (lien). Évalué à 1.Je suis d'accord. Même si ce n'est sûrement pas aux programmeurs de caml d'écrire ce livre, ils ont probablement beaucoup mieux à faire.
Cela dit, le livre O'Reilly sur OCaml (dispo en ligne) est assez facile d'abord et ne part pas dans des considérations trop théoriques (même s'il manque une partie lablgtk2 pour faire de vraies interfaces graphiques).
-
[^]Re: Dommage ...
Posté par Thomas Petazzoni (page perso, ) le 20/05/2005 à 12:26. (lien). Évalué à 2.Je ne parlais pas forcément d'Ocaml. J'ai également beaucoup de mal à me faire à ce langage. Je parlais en général des langages de haut-niveau sans présumer d'un quelconque choix.
Des langages comme Ada ou C# sont par exemple des langages assez simples, mais proposant des abstractions et une bibliothèque moderne.
En fait, dans le C, ce qui m'embête, ce n'est pas seulement le langage en lui-même et la manipulation des pointeurs, mais c'est aussi la bibliothèque standard C, en particulier la manipulation de chaînes de caractères : fgetc, getc, gets, fgets, putc, puts, fputs, fputc, getchar, putchar, toutes les fonctions genre strncpy qui font pas bien le boulot, sans parler des sockets qui sont assez difficiles à utiliser correctement, etc... Il me semble qu'il y a des langages de plus haut niveau proposant des bibliothèques standard mieux conçues, permettant de développer plus vite, avec moins de bugs.
Le problème, c'est qu'aucun langage ou plateforme ne s'est réellement imposé à ce jour pour développer des applications "de bureau" avec un langage de haut-niveau. Je veux développer une appli simple avec une interface graphique. Je dois le faire en quel langage si je veux un langage de haut-niveau, avec de nombreuses bibliothèques et connu par de nombreux développeurs ? Ruby ? Python ? Java ? C# ? Ada ? Ocaml ?
Actuellement, je le fais en Python, mais l'absence de typage et de déclaration de variable me gêne vraiment.-
[^]Re: Dommage ...
Posté par Krunch (Jabber id, page perso, ) le 21/05/2005 à 00:36. (lien). Évalué à 1.Je proteste, tu n'as pas cité Perl :)
Surtout que dans ton cas, ça peut régler le problème des déclarations de variables (et éventuellement celui du typage avec "use types" et compagnie).--
Free Softwares Users Group Arlon (Sud Luxembourg, Belgique)
pertinent, e adj. Approprié ; qui se rapporte exactement à ce dont il est question.
-
-
bidon
Les tests sont assez marrants, je prends l'exemple d'un langage que
je connais bien, le Java. En rajoutant dans le test de ackermann une boucle,
on peut observer ceci
[rabbit speedball] time java -server ackermann 9 1
Ack(3,9): 4093
java -server ackermann 9 1 0.30s user 0.29s system 72% cpu 0.818 total
[rabbit speedball] time java -server ackermann 9 100
Ack(3,9): 4093... etc
java -server ackermann 9 100 5.39s user 0.33s system 61% cpu 9.267 total
[rabbit speedball] time ./ackermann.gcc_run 9
Ack(3,9): 4093
./ackermann.gcc_run 9 0.05s user 0.00s system 4% cpu 1.089 total
Qu'est ce que l'on voit ? que plus le code tourne et plus il est
efficacement éxécuté. Lancer le test 1 fois ne donne aucune
indication sur la rapidité de java ... ... tester une jvm "à froid"
donne toujours des résultats décevants
-
[^]Re: bidon
Posté par Lionel Draghi (page perso, ) le 19/05/2005 à 20:02. (lien). Évalué à 2.Tu as parfaitement raison, et c'est pourquoi le test est lancé trois fois de suite, et que seul le meilleur temps est retenu (tandis que pour la conso mémoire c'est la plus grande qui est conservé).
Ceci répond également partiellement a l'objection faite plus haut sur le désavantage des interpréteurs par rapport au test compilés : le désavantage est réel, mais pas si important que celà.-
[^]Re: bidon
Posté par Roger Rabbit () le 19/05/2005 à 20:08. (lien). Évalué à 0.justement non, que le programme soit lancé 1 fois ou 50 ni change rien ...
C'est pour 1 lancement du programme, qu'il faut tout d'abord laisser la jvm "chauffer" puis a ce moment la mesurer les performances.-
[^]Re: bidon
Posté par Lionel Draghi (page perso, ) le 19/05/2005 à 21:18. (lien). Évalué à 0.Le fait de lancer trois fois le test fait que la JVM est encore dans la mémoire (si la machine n'est pas intensivement utilisée en parallèle du bench). La première fois tu vas la chercher sur le disque.
Alors je serai surpris que ca ne fasse pas une belle différence, même si ce ne sont pas encore les conditions idéales.-
[^]Re: bidon
Posté par ndesmoul () le 20/05/2005 à 08:20. (lien). Évalué à 1.Ca ne suffit pas. Les JVM modernes sont dites Just In Time. En gros à la première execution d'une fonction le code n'est pas optimisé. Il le sera par la suite si la machine virtuelle détecte que la fonction est suffisamment utilisée pour que le coût d'une recompilation native à la volée se justifie. C'est pour cela qu'au début les performances de Java sont assez merdiques et qu'elles s'améliorent ensuite fortement. Je parle par expérience, c'est vraiment flagrant.
A chaque relancement du programme ce processus repart de zéro (c'est un peu con d'ailleurs). Le fait que la JVM soit déjà en mémoire n'y change rien.
Prendre en compte d'ailleurs le lancement de la JVM d'ailleurs devrait sérieusement plomber les perfs...
Sinon les perfs varient fortement selon les JVM et leur configuration. La JVM d'IBM me semblait plus performante que celle de SUN mais plus lente à "chauffer".
La JVM de SUN a 2 modes: mode client (par défaut) qui se lance plus vite mais optimise moins le code; et le mode server, plus lent au début mais qui optimise plus au final.-
[^]Re: bidon
Posté par Roger Rabbit () le 20/05/2005 à 16:59. (lien). Évalué à 2.Tout à fait d'accord sur la chauffe de la jvm.
Je rajouterais, qu'en fait le mode client ou serveur défnit (entre autre) le nombre de passes néccessaires dans une portion de code pour compiler nativement ce code. Il est aussi possible de modifier cette valeur en ligne de commande.
Au temps du 1.4.2 le mode serveur augmentait d'environ 10% le temps de démarrage ainsi que la consommation mémoire. ( la gestion de la mémoire ne se fait pas de la meme maniere )
Maintenant, avec le 1.5, java n'offre malheureusement toujours pas le partage des jvm, mais propose néanmoins une "sorte" de préloading/partage des classes, permettant un démarrage plus rapide des applications ainis qu'une réduction de l'empreinte mémoire.
-
-
-
-
-
[^]Re: bidon
Posté par chaperon () le 22/05/2005 à 14:41. (lien). Évalué à 2.J'ai fait aussi mes benchmarks à 0.02 EUR, je confirme que java se rapproche de C++ en vitesse d'exécution. Des benchmarks "prouvent" que java va plus vite, mais bon ...
Mais comme il s'agit d'une réflexion sur les langages, il serait intéressant de comparer les résultats d'un gcj réellement efficace à une jvm afin de comparer la perte (ou le gain ?) de performance induite par la jvm.
Car, après tout, il serait intéressant de connaitre la véritable efficacité des programmes java, et non l'efficacité de la jvm, du garbage collector, et du bytecode intermédiaire.
Je pense qu'encourager gcj est fondamental, car le langage java me plait, mais pas la jvm (ou plutot la réputation de la jvm). En plus, gcj est libre, ce qui est fondamental pour un compilo.
D'après les benchmarks favorisant java par rapport à C++, le garbage collector serait plutôt favorable à la localité des données. Idem pour la compilation dynamique lorsqu'elle est stabilisée (lorsque la jvm est "chaude").
<mode wish>A quand une possibilité de faire du java sérieusement en utilisant exclusivement du libre, avec toute l'API et les dernières fonctionnalités en date ?</mode>--
man man, man !


Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.