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. Je ne rentre pas dans les détails de la participation française à la définition de ces langages, ou/et à la réalisation de ces compilateurs libres.
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.
Aller plus loin
- Shootout (18 clics)
- OCaml (14 clics)
- SmartEiffel (6 clics)
- GNAT (Ada) (6 clics)
# Remarque...
Posté par Nico (site web personnel) . Évalué à 10.
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
Posté par iug . Évalué à 5.
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 . Évalué à 10.
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 (site web personnel) . Évalué à 3.
[^] # Re: Un petit test custom
Posté par arnaudus . Évalué à 9.
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 . Évalué à 2.
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 . Évalué à 7.
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 . Évalué à 3.
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.
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.
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 (site web personnel) . Évalué à 7.
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
Posté par Cédric Dalmasso . Évalué à 2.
Pour parler d'un autre langage fonctionnelle, Scheme, on peut ecrire en tres peu de ligne quelque qui necessiterait des dizaines de ligne en C mais a part celui qui ecrit personne va comprendre ca facilement.
[^] # Re: Un petit test custom
Posté par gph . Évalué à -2.
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 . Évalué à 2.
C'est très puissant mais prévoir des aspirines pour comprendre ces quelques lignes.
[^] # Re: Un petit test custom
Posté par TeXitoi (site web personnel) . Évalué à 3.
[^] # Re: Un petit test custom
Posté par Thomas Douillard . Évalué à 1.
[^] # Re: Un petit test custom
Posté par mirak mirak . Évalué à -1.
[^] # Re: Un petit test custom
Posté par Camille Vacher . Évalué à 2.
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 (site web personnel) . Évalué à 1.
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
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
[^] # Re: Un petit test custom
Posté par Alexandre Beraud . Évalué à 1.
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 . Évalué à 5.
Et là, Ruby enfonce totalement Ocaml auquel je trouve une syntaxe pas terrible..
[^] # Re: Un petit test custom
Posté par V . Évalué à 4.
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 . Évalué à 1.
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 (site web personnel) . Évalué à 2.
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.
Oui, ca c'est sur... ;-)
[^] # Re: Un petit test custom
Posté par Patrix (site web personnel) . Évalué à 3.
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 . Évalué à 3.
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 (site web personnel) . Évalué à 6.
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 . Évalué à 1.
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 (site web personnel) . Évalué à 2.
Quand on code, il faut aussi absolument faire rentrer en jeu un brin de bon sens...
[^] # Re: Un petit test custom
Posté par wahnby . Évalué à 2.
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 . Évalué à 1.
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 . Évalué à 2.
[^] # Re: Un petit test custom
Posté par Philip Marlowe . Évalué à 1.
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 (Mastodon) . Évalué à 2.
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 . Évalué à 2.
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
Posté par ufoot (site web personnel) . Évalué à 7.
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 (site web personnel) . Évalué à 3.
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.
"La première sécurité est la liberté"
[^] # Re: interesting alternative programs
Posté par Pipo2 . Évalué à 3.
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 . Évalué à 5.
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 . Évalué à 4.
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 . Évalué à 4.
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 . Évalué à 3.
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 . Évalué à 0.
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 . Évalué à 2.
[^] # Re: interesting alternative programs
Posté par imalip . Évalué à 4.
[^] # Re: interesting alternative programs
Posté par mdlh . Évalué à 1.
# Un peu fumeux...
Posté par Antoine . Évalué à 3.
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 . Évalué à 1.
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 (site web personnel) . Évalué à 2.
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.
"La première sécurité est la liberté"
[^] # Re: Un peu fumeux...
Posté par Cook Captain . Évalué à 5.
[^] # Re: Un peu fumeux...
Posté par Krunch (site web personnel) . Évalué à 3.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: Un peu fumeux...
Posté par Alexandre Beraud . Évalué à 1.
# C comme les sondages ce truc :)
Posté par Bapt (site web personnel) . Évalué à 2.
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 (site web personnel) . Évalué à 2.
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 . Évalué à 2.
[^] # Re: C comme les sondages ce truc :)
Posté par Pierre Jarillon (site web personnel) . Évalué à 5.
[^] # Re: C comme les sondages ce truc :)
Posté par farib . Évalué à 3.
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 . Évalué à 5.
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 :)
Posté par Pipo2 . Évalué à 2.
[^] # Re: C comme les sondages ce truc :)
Posté par arnaudus . Évalué à 4.
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 (site web personnel) . Évalué à 5.
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 . Évalué à 4.
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 :)
Posté par mdlh . Évalué à 3.
# benchmarks bidons
Posté par TazForEver . Évalué à 8.
[^] # Re: benchmarks bidons
Posté par Beretta_Vexee . Évalué à 1.
[^] # Re: benchmarks bidons
Posté par TImaniac (site web personnel) . Évalué à 2.
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++?
Posté par salvaire . Évalué à 4.
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 M . Évalué à 1.
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 . Évalué à 3.
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 . Évalué à 2.
[^] # Re: Ocaml va t'il remplacer C++?
Posté par Troy McClure (site web personnel) . Évalué à 3.
http://www.fortranstatement.com/(...)
[^] # Re: Ocaml va t'il remplacer C++?
Posté par Pipo2 . Évalué à 2.
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 . Évalué à 2.
[^] # Re: Ocaml va t'il remplacer C++?
Posté par Tobu . Évalué à 2.
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 M . Évalué à 6.
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 ...
Posté par Thomas Petazzoni (site web personnel) . Évalué à 10.
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 (site web personnel) . Évalué à 2.
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.solutions-norenda.com
[^] # Re: Dommage ...
Posté par Tobu . Évalué à 3.
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 . Évalué à 6.
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 (site web personnel) . Évalué à 7.
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 . Évalué à 1.
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 . Évalué à 5.
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 (site web personnel) . Évalué à 3.
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 . Évalué à 3.
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 (site web personnel) . Évalué à 2.
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 (site web personnel) . Évalué à 5.
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 . Évalué à 4.
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 . Évalué à 1.
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 (site web personnel) . Évalué à 2.
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 (site web personnel) . Évalué à 1.
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).
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
# bidon
Posté par Roger Rabbit . Évalué à 1.
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 (site web personnel) . Évalué à 2.
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 . Évalué à 0.
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 (site web personnel) . Évalué à 0.
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 . Évalué à 1.
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 . Évalué à 2.
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 . Évalué à 2.
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>
# OCaml, oui mais...
Posté par MiniMoi . Évalué à 2.
Le problème d'OCaml c'est qu'il est un peu "rude" à apprendre, car trop différent des langages "impératifs", et oblige à pas mal de réapprentissage pour comprendre l'utilité de la récursivité, des variables non modifiables, et des filtrages. Passé cette étape, c'est en effet surement un des langages les plus agréable à utiliser, quoi que pour ce qui est de la POO je n'en ai pas l'expérience (en plus il peut être compilé ou compilé vers du bytecode, un peu comme Java). C'est pour ça que je pense qu'il ne s'imposera malheureusement pas.
De plus, il reste encore quelques problèmes, en ce qui concerne les manipulations "bas niveau", ce n'est pas très aisé. Sans oublié le "problème" des entiers codés sur 31 bits au lieu de 32, ce qui est génant pour les opérations bas niveau.
En somme, un bon langage, mais qui peut devenir génants dans certains cas (en plus du manque de bindings).
[^] # Re: OCaml, oui mais...
Posté par Guillaume Vauvert (site web personnel) . Évalué à 2.
Quelqu'un a-t-il commencé à apprendre la programmation par autre chose que du procédural impératif ?
Guillaume
[^] # Re: OCaml, oui mais...
Posté par free2.org . Évalué à 2.
Quel langage utilise-t-il ?
Une classe contenant uniquement une méthode est parfaitement équivalente à une fonction/procédure.
[^] # Re: OCaml, oui mais...
Posté par norbs . Évalué à 2.
> chose que du procédural impératif ?
Fac de sciences Bordeaux il y a quelques années : pendant le DEUG le seul langage utilisé était SCHEME (langage fonctionnel). C'est peut-être toujours vrai...
[^] # Re: OCaml, oui mais...
Posté par reno . Évalué à 1.
En prépas, on utilisait le Pascal et j'ai commencé par le BASIC.
Maintenant ce serait plutôt le C, C++, Java, Shell ou Perl voire Ruby ou Python pour débuter.. tous des languages impératifs.
[^] # Re: OCaml, oui mais...
Posté par kra . Évalué à 1.
La premiere session caml a ete tres douloureuse, en plus, on nous faisait coder avec notepad... :( Le pascal est bien mieux passe, j'ai meme plutot bien trippe, et la seconde session caml, que du bonheur :)
[^] # Re: OCaml, oui mais...
Posté par TImaniac (site web personnel) . Évalué à 4.
Quelqu'un a-t-il commencé à apprendre la programmation par autre chose que du procédural impératif ?
Ben dans ma FAC ils ont (pas moi j'étais pas là au début) commencé par Scheme, pourtant on dit que l'on reste à nos premiers amours en matière de programmation, ben ils sont tous beaucoup plus productifs et heureux en codant en Java :)
La notion d'objet est facile à appréhender par le programmeur qui peut "mapper" sa vision sur le monde réel. Bref c'est relativement intuitif (même si cela ne conduit pas toujours au meilleur design). Pour l'impératif, celui-ci a l'avantage de donner un seul ordre à la fois, dans un ordre précis qui est celui dans lequel le programmeur écrit : c'est donc très simple à appréhender (même si ce n'est pas forcement intuitif) et à utiliser.
Par contre d'autres langages comme OCaml ou pire Prolog sont beaucoup plus difficile à appréhender car il demande une réflexion importante de la part du programmeur pour qu'il "ponde" le bon algo de manière conscise, sans parfois avoir la possibilité de décomposer le problème. C'est aussi ce qui fait la puissance de ces langages : il force le développeur à indiquer l'algorithme au compilateur/interprêteur qui peut alors en déduire plus d'information, conduisant parfois (souvent pour OCaml) à des optimisations qu'un compilateur plus traditionnel ne pourrait se permettre.
[^] # Re: OCaml, oui mais...
Posté par remyremy . Évalué à 3.
C'est une idée fausse hélas très répandue sur OCaml. OCaml est un langage multiparadigme, qui permet de travailler aussi facilement de manière fonctionnelle, impérative ou objets. Une des ses principales qualités est en effet justement de permettre au programmeur d'alterner et mélanger facilement ces trois styles de programmation en fonction des caractéristiques du problème qu'il traite.
Mais dans l'enseignement, les différents dialectes de ML sont utilisés essentiellement (voire exclusivement, comme dans mon ancienne fac) pour familiariser l'étudiant avec le style de programmation fonctionnelle, d'où cette fausse image du langage.
[^] # Re: OCaml, oui mais...
Posté par TImaniac (site web personnel) . Évalué à 2.
Non ce n'est pas une idée fausse, c'est mon idée tirée de mon expérience.
Même si OCaml permet de programmer de plusieurs manière, je ne lui vois pas beaucoup d'intérêt si c'est pour l'utiliser de manière impérative. Je me trompes peut être mais à mon sens toute la puissance de OCaml réside dans le mixage objet/fonctionnel qui permet d'exprimer avec force ce qu'on veut faire, ce qui permet au compilo de faire tout pleins de déductions et d'optimisation. Cela dis je suis peut être complètement à côté de la plaque :)
[^] # Re: OCaml, oui mais...
Posté par remyremy . Évalué à 6.
En ce qui me concerne, ce sont d'ailleurs généralement certaines d'entre elles qui me font opter pour OCaml. Et l'aspect multi-paradigme d'Ocaml me permet de tirer avantage de toutes ces caractéristiques sans être contraint à un style de programmation particulier.
Pour préciser ce que je voulais dire sur le mélange des styles:
la dernière fois que j'ai utilisé ce langage, c'était pour un problème pour lequel un algo impérativo-fonctionnel (ie un algo récursif avec des applications partielles, ainsi qu'un environnement qui varie au cours de l'algo) était beaucoup plus simple et rapide qu'une solution purement impérative (qui simule la récursivité avec une pile) ou purement fonctionnelle (où la gestion d'un environnement non modifiable compliquait l'algorithme). OCaml m'a permis d'exprimer cette fonction à style mélangé de manière très naturelle et efficace à l'exécution.
[^] # Re: OCaml, oui mais...
Posté par reno . Évalué à 1.
[^] # Re: OCaml, oui mais...
Posté par RedIsDead . Évalué à 1.
En Sup, 6 mois de Caml en fonctionnel suivis de 6 mois de Pascal.
En Spé, 6 mois de C et pour conclure 6 mois de Caml avec mélange de fonctionnel et d'impératif.
Je pense que c'est une bonne approche de commencer par le fonctionnel, car bien que j'en ai deja fait au tout début, c'etait assez dur de s'y remettre en spé. Mais au bout de quelques temps ca devient un vrai bonheur (surtout comparé au C ). Et pour l'instant caml est mon langage préferé, le code que je ponds est jamais "gruik".
Un amis a moi a fait une autre école d'informatique et ils ont commencé par du Visual Basic! je trouve cette orientation pedagogique assez moyenne, mais ici je n'ai pas besoin d'expliquer pourquoi je pense ;)
[^] # Re: OCaml, oui mais...
Posté par Anonyme . Évalué à 1.
[^] # Re: OCaml, oui mais...
Posté par djano . Évalué à 1.
Caml Light
2eme annee DEUG GMI a Avignon :
C++
Scheme
Assembleur x86
[^] # Re: OCaml, oui mais...
Posté par Olivier Serve (site web personnel) . Évalué à 0.
Son typage fort qui fait chier à pas vouloir additionner un réel avec '2'... GRmblblbll
[^] # Re: OCaml, oui mais...
Posté par salvaire . Évalué à 1.
Moi c'est ce point qui me gêne avec Ocaml. En calcule numérique intensif, je veux avoir les types du cpu (entier 32bits, entier signé 32bits, float, double). Toutefois, avec l'arrivée des processeurs 64bits, le type entier signé a 63bits. Mais, je crois qu'ils ont oublié cette aspect dans le design. Calculé en double a un coût non négligeable.
[^] # Re: OCaml, oui mais...
Posté par MiniMoi . Évalué à 1.
Je crois que ce défaut est du au garbage collector que se sert du premier bit pour distinguer une valeur d'un pointeur, donc les performances de Caml semblent être liées à ceci (je me trompe peut-être, mais je crois me souvenir que c'est ça).
[^] # Re: OCaml, oui mais...
Posté par salvaire . Évalué à 1.
Je parlais de calcule intensif. GMP c'est pas sérieux. Faut réfléchir un peu!
[^] # Re: OCaml, oui mais...
Posté par MiniMoi . Évalué à 1.
J'ai déjà vu un exemple ou le simple fait de changer les parenthèses (en gros l'ordre des calculs) modifiait de façon considérable le résultat, c'était n cas du problème des N corps).
[^] # Re: OCaml, oui mais...
Posté par alnicodon . Évalué à 4.
Et il est aussi vain de s'appuyer sur de la précision infinie car tout dépendra tellement des conditions initiales (because système chaotique) qu'on ne connait qu'à peu près de toute façon... et les nombres en précisions infinis devenant vraiment très précis (ie: très long et gros en mémoire et consommateurs de CPU) avec les pas de temps simulés, les pas de temps se simulent... de plus en plus lentement.
Et utiliser des long_double_160, ne fera que repousser le problème qq pas de temps plus loin...
Avant de faire du calcul numérique, on s'assure bien au moins que le schéma numérique est stable ? Que le modèle numérique respecte certaines propriétés physique ? Ou je suis à la masse ?
Tout ça pour dire qu'il me semble que simulation numérique et systèmes chaotiques font assez mauvais ménage.
[^] # Re: OCaml, oui mais...
Posté par Ontologia (site web personnel) . Évalué à 3.
Caml, langage que je vénère, est à des années lumière du monde de ces gens là qui est fait de VB, Vb.net, et autre Windev.
Je ne suis même pas sûr qu'ils soient tous capables de développer en C#
Vous faites tous partis d'une élite, vous êtes curieux, mais des développeurs comme vous, il y en a peu.
Les gens auxquels je pense, ne comprendront jamais rien aux concepts qu'il y a derrière Caml, c''est beaucoup trop théorique pour eux.
Caml est génial mais restera cantonné dans le milieu de ceux qui peuvent comprendre.
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
[^] # Re: OCaml, oui mais...
Posté par salvaire . Évalué à 2.
[^] # Re: OCaml, oui mais...
Posté par Ontologia (site web personnel) . Évalué à 0.
... Mais on peut difficilement remplacer un développeur chef de projet qui, au contact de l'entreprise cliente, peut analyser complètement et avec compétence les besoins, l'organisation, le métier de l'entreprise.
Pour moi un Indien fera surtout de l'écriture de composants.
Qui serviront aux troufions pour écrire leur logiciels.
Ou alors ils nous feront le codage de la fonction toto...
Ya donc des chance que ça se complémente à peu près
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
# Et vb.net ?
Posté par Matthieu . Évalué à 1.
m'embeterais-je donc avec ce language <put your adjective here> ?
[^] # Re: Et vb.net ?
Posté par Lionel Draghi (site web personnel) . Évalué à 1.
Regarde http://shootout.alioth.debian.org/faq.php?sort=fullcpu#acceptable(...)
Tu vas comprendre pourquoi :-)
[^] # Re: Et vb.net ?
Posté par TImaniac (site web personnel) . Évalué à 1.
[^] # Re: Et vb.net ?
Posté par Gniarf . Évalué à 0.
Must have (...) A Debian package (either from Debian itself, or the primary authors of the language.) Or build and install with ./configure && make && make install and a default target of /usr/local."
(...)
"Why don't you include language X?
Is the language … Free? (...) Open source? (...) Used? (...) Interesting? (...)
We will accept and reject languages in a capricious, unfair, biased fashion.(...)"
je ne veux pas être méchant, mais j'ai connu plus ouvert et plus exhaustif.
[^] # Re: Et vb.net ?
Posté par ... a little wood elfe . Évalué à 3.
Remarque sur du calcul pur l'Objective-C c'est du C donc...
[^] # Re: Et vb.net ?
Posté par Colin Pitrat (site web personnel) . Évalué à 2.
# constance des résultats, qualité du benchmark
Posté par herodiade . Évalué à 5.
On obtient la plupart du temps un classement à peut près identique. Donc dans l'ensemble, il y a bien quelque chose de relativement constant qui s'en dégage ...
Par exemple on aura beau dire que l'implem d'un algorithme pur ne ressemble jamais à un programme réel, où les résultats seraient très différents, le fait qu'Ocaml performe très bien sur tout les algos (qui sont très différents les uns des autres) permet quand même de penser qu'Ocaml est un langage très rapide (et l'inverse pour PHP).
[^] # Re: constance des résultats, qualité du benchmark
Posté par Cook Captain . Évalué à 1.
1+1=3, 1+2=4, 1+3=5. Conclusion: comme à chaque fois que je rajoute 1, je trouve 1 de plus, c'est que l'addition doit être bonne.
En physique, c'est le genre d'erreurs qui peuvent être trés difficiles à déceler.
# Ada answers
Posté par psycose . Évalué à 2.
> J'espère que leur présence en tête de classement incitera plus de développeurs à la curiosité.
...
> Je n'en suggère qu'une seule : méfions nous des préjugés !
La communauté du Logiciel Libre possède depuis l'arrivé du compilateur Ada libre GNAT une merveilleuse corde _de plus_ à son arc.
let's go for Ada :
http://www.gnat.com/aa_videos.php(...)
--
korek ça !
[^] # Re: Ada answers
Posté par Anonyme . Évalué à 2.
[^] # Re: Ada answers
Posté par icyfemur . Évalué à 3.
La compilation est tres facile, et il est tres strict quand a la déclarations des variables et la vérification de leur type. Par contre, ce qui est plus gênant, c'est le manque de bindings (par exemple pour XSLT), et le manque de ressources d'aide sur le web...
[^] # Re: Ada answers
Posté par Lionel Draghi (site web personnel) . Évalué à 2.
Tout à fait d'accord, c'est le point le plus inhabituel du langage.
Mais d'un autre coté, il offre tellement de caractéristiques uniques.
Au hasard, quel plaisir d'avoir un tasking complètement intégré dans le langage : pouvoir définir des types taches pas plus dificilement qu'une classe, déclarer un tableaux de 500 taches, etc.
Tout ça de façon portable, sans faire appel à la moindre API externe.
[^] # Re: Ada answers
Posté par Lionel Draghi (site web personnel) . Évalué à 3.
Pour les bindings, c'est vrai.
Pour atténuer celà, on peut rappeler que l'interfaçage en général et l'interfaçage avec C en particulier est facile.
J'avais un collègue qui n'a pas hésité à faire vite fait un binding à xerces, pour gagner 20 secondes au chargement d'un gros fichier xml par rapport à xmlada, sur un outils sans importance.
Pour les ressources web, il y a http://www.adapower.com/(...) et http://www.adaworld.com.(...)
Tu y trouves pas mal de chose comme des exemples de code, ou plusieurs livres sur Ada sous license libre.
(J'ai un bon souvenir de Ada Distilled)
Sur http://libre.act-europe.fr/,(...) en dehors des composants, il y a des cours très interessants en français.
Sinon, pour avoir de l'aide : http://www.ada-france.org/article13.html(...)
[^] # Re: Ada answers
Posté par Aquarius . Évalué à 3.
Pas besoin d'un cours de théorie des types, de théorie des languages ou de la compil' bien sûr, mais juste pour dire que ADA est un très bon language (pour plein de raisons pratiques) mais qu'il est un peu bâti sur du sable au niveau théorique.
A l'inverse, OCaml a été conçu A PARTIR des résultats de recherche théorique. Par exemple, la structure de typage de Caml a été prouvée (en gros une démonstration logique et mathématique avec beta-réductions à la pelle de 300 pages) et ça a de grosses conséquances sur la génération de code sûr (au sens de la sûreté de fonctionnement) pour des missions critiques comme les codes embarquées par exemple. Les autres méthodes de code sûr pour ce genre de tâches (Lustre et Esterel pour ne pas les citer) ont d'autres avantages mais ne servent jamais qu'à générer du code C à recompiler derrière.
... et puis l'inférence de types, le garbage collector TRES bien fait (oui, c'est toujours possible de faire mieux à la main, mais c'est pas facile)... tout un tas de trucs qui font de OCaml un outil très bien fait.
[^] # Re: Ada answers
Posté par Lionel Draghi (site web personnel) . Évalué à 2.
Oui, Ada n'a pas de définition formelle, mais c'est quand même un des rares langages dont la définition soit à la fois suffisement complète et non ambigu pour que l'on puisse en extraire des sous-ensemble prouvable formellement, sans dépendance au compilateur.
Pour les autres langage de ce type, les outils doivent compenser les trous de sémantiques de la définition du langage par la connaissance du comportement constaté du compilateur. C'est vrai par exemple, même pour un sous-ensemble de C comme MISRA-C, pourtant spécifiquement dédié à ces applications critiques.
Si celà t'intéresse, actuellement un produit original nomé SPARK fait une percée remarquée dans le monde de la preuve formelle Ada : http://www.praxis-his.com/sparkada/intro.asp(...)
Quoi qu'il en soit, le marché des applis embarqués critiques est justement LE marché dominé par Ada.
[^] # Re: Ada answers
Posté par kstalker . Évalué à 2.
[^] # Re: Ada answers
Posté par MiniMoi . Évalué à 0.
Au contraire OCaml est un travail d'universitaire, qui a commencé bien plus tard, et qui n'était au début qu'un langage de recherche, avec de faibles performances.
Le côté orienté objet est relativement récent, et donc ceci explique sa faible pénétration (le poids des années, par exemple le code d'ariane 5 écrit en Ada vient en grande partie de celui d'ariane 4, donc des annés 80).
Et puis, c'est franco-français!
[^] # Re: Ada answers
Posté par kstalker . Évalué à 1.
Par contre comme ton post l'indique c'est en effet une équipe américaine sous la direction de John Barnes il me semble, qui a entrepris, sur les bases du pascal, l'écriture de Ada.Il se devait de remplacer des langages comme le Corla 66 ou RTL/2 ( non pas la radio :p ) pour la programmation de missiles et autres produits industriels.Mais je vais de ce pas voir ce que ça donne le Ocaml, car pour parler franchement,j 'en ai vaguement entendu parler mais je trouve sa conception intriguante pour le moins :))...Mais comme je dis toujours la curiosité est l'antre de la sagesse, n'est ce pas??
[^] # Re: Ada answers
Posté par Lionel Draghi (site web personnel) . Évalué à 4.
Non, Ada n'a pas été conçu par l'armée américaine. L'armée américaine a juste fait le constat de ce qu'elle utilisait (au début des anées 70) 450 langages différents, et que c'était un gouffre financier. Certains corps d'armées c'atait fait vendre un langage temps réel propriétaire, avec un seul compilateur, tournant sur un hardware spécifique. Le rêve de tout fournisseur, un client vérouillé!
Le DOD américain a donc réunit un collège d'expert, ouvert sur le civil et l'étranger (une grande première alors), pour faire non pas un langage mais un cahier des charges d'un langage.
Le cahier des charges mettait l'accent sur quelques points, comme une certaine universalité et la prise en compte des problème de génie logiciel apparaissant alors sur l'écriture des premier gros logiciel.
Ensuite, 5 équipe ont présenté leur travail, et c'est l'équipe verte, dirigé par Jean Ichbiah qui a gagné.
Ada est né ainsi, de parents civils, en gagnant un concours militaire.
[^] # Re: Ada answers
Posté par kstalker . Évalué à 1.
[^] # Re: Ada answers
Posté par Christophe BAEGERT . Évalué à 0.
On s'en rendra vite compte quand le non aura gagné...
[^] # Re: Ada answers
Posté par Aquarius . Évalué à 1.
- La première est historique et est détaillée dans le postes autour de celui-ci : conçu pour l'armée dans ses tâches critiques (missiles...)
- L'autre est plus floue : à partir d'une conception / spécification bien faite (hyper exhaustive surtout) on peut écrire facilement tout un tas de contraintes (notament sur les types) et faire une bonne génération de code. Ca rends effectivement le code plus sûr à nos yeux, surtout parce qu'on "voit" une structure solide.
...enfine c'est mon avis. j'ai fait que qques mois d'ada, c'est pas vraiement assez (et de loin !) non plus pour se prétendre expert.
# Bench complètement pourri. Y a pas Ook!
Posté par dcp . Évalué à 3.
http://www.dangermouse.net/esoteric/ook.html(...)
Qu'on ne vienne pas me dire que ce langage manque de bibliothèques ...
# SmartEiffel
Posté par Ontologia (site web personnel) . Évalué à 7.
Dans tous les langages objets, l'accès à une méthode spécialisé sur plusieurs classes dans l'arbre d'héritage se fait par une liaison dynamique, plus exactement une VFT (Virtual Function Table).
En gros, on a une structure avec un pointeur sur fonction que l'on peut parfois mettre dans un tableau.
En assembleur ça donne des trucs du genre "call dword ptr [_adresse_de_la_fonction]", ce qui implique :
- Que l'inlining est très limité
- Que le processeur est obligé de vider son cache mais aussi de laisser tomber toutes ses prédictions de branchements.
Donc une chute des performances.
A ma connaissance, tous les langages objets sauf (Smart) Eiffel et Lisaac fonctionnent comme ça.
Avec l'algorithme du produit cartésien de Ole Agesen et Craig Chambers (à peu près innaplicable), l'algorithme de Dominique Colnet est le premier à réussir à supprimer la liaison dynamique.
Un algorithme de prédiction de type détermine les types possibles pour le receveur et les paramètres, ce qui donne lieu à un switch afin de traiter chaque cas.
En plus, on peut enfin faire de l'inlining et de la spécialisation de code.
Le problème de Smart Eiffel, c'est qu'il traite tous les cas de résolution de type, même ceux, qui, dans le code tel qu'on le possède ne pourront jamais survenir.
Lisaac est le premier compilateur à analyser tout son code et de déterminer les types possibles et de ne traiter qu'eux seuls.
Ca permet d'éviter plus de 84 % de switch.
L'inlining est encore facilité, ainsi que la spécialisation de code.
Résultat, un décodeur Mpeg1/2 algorithmiquement identique à un décodeur C, est plus lent de 1,9 % (pour 30 % de code en moins, langage objet de haut niveau oblige).
L'avenir est à mon avis aux langages objets dont le compilateur est doté d'un algorithme de suppression de la liaison dynamique.
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
[^] # Re: SmartEiffel
Posté par Sebastien . Évalué à 2.
Ça m'a l'air tout bonnement très intéressant cette petite gâterie compilatoiresque.
Doc ?
Parce que [1] date quand même un petit peu, non ?
[1] : http://smarteiffel.loria.fr/papers/oopsla97.pdf(...)
[^] # Re: SmartEiffel
Posté par Ontologia (site web personnel) . Évalué à 2.
Mais la publi qui répond à oopsla97 est en préparation.
Oui ça date, et personne dans l'industrie, ne semble l'utiliser
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
[^] # Re: SmartEiffel
Posté par Antoine . Évalué à 4.
L'avenir est aux langages permettant un développement rapide, facile et fiable, pas le gain de quelques % sur la rapidité d'exécution d'un décodeur MPEG...
[^] # Re: SmartEiffel
Posté par Ontologia (site web personnel) . Évalué à 1.
Eiffel et Lisaac donc
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
[^] # Re: SmartEiffel
Posté par Vivi (site web personnel) . Évalué à 0.
[^] # Re: SmartEiffel
Posté par Ontologia (site web personnel) . Évalué à 1.
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
[^] # Re: SmartEiffel
Posté par kstalker . Évalué à 0.
[^] # OCaml (difficulté d'apprentissage)
Posté par V . Évalué à 3.
- la plupart du temps il ne ressemble pas aux langages que les programmeurs connaissent. Ils sont habitués à passer d'un langage impératif à l'autre sans trop de difficulté, et là forcément c'est plus éloigné,
- les élèves apprennent souvent Caml dans un cours de programmation fonctionnelle où le prof leur parle de lambda-calcul. L'accent est mis sur l'aspect fonctionnel, et tout ce que l'on peut faire de tordu (et de génial) avec. Mais Caml est aussi un langage impératif que l'on peut utiliser sans aucun problème comme tel, et c'est aussi un langage objet sans imposer les objets.
- OCaml est un langage multiparadigme. En java il suffit de maîtriser les objets et on ne se pose pas la question de les utiliser ou pas. Si l'on veut maîtriser "tout" OCaml, il faut connaître la programmation objets, mais aussi fonctionnelle, et il y a aussi des tas de notions auxquelles on n'est pas habituées (inférence de types, préprocesseur, etc)
Et il ne faut pas oublier que tout ce qu'apporte Caml permet de programmer beaucoup plus sûrement que la plupart des autres langages, ce qui signifie que le travail de débogage sera énormément réduit. Quand on a l'habitude de programmer en Caml, on a du mal à revenir vers le C ou tout autre langage moins évolué...
[^] # Re: OCaml (difficulté d'apprentissage)
Posté par Ontologia (site web personnel) . Évalué à 2.
Je suis en train de terminer un BTS (honte à moi, oui), et j'ai eu autour de moi des élèves de niveau BTS pendant deux ans. Je peux te dire qu'ils ne seront jamais capable, à moins d'un miracle, de comprendre Ocaml. Enfin si, ils seraient "cérébralement "capables, mais ils sont incapable de faire l'effort, ça les interessera jamais.
Ce sont des gens qui ont du mal à maîtriser le concept de fonction, au niveau théorique. Ils ont beaucoup de mal à appréhender la programmation objet.
Ils ont déjà beaucoup de mal en algorithmique. C'est le seul point que leur expérience professionnelle améliorera.
La récursivité, c'est beaucoup trop difficile pour eux, ça les décourage.
Je n'ai pas cotoyé des gens stupide, loin de là, mais ils ne sont absolument pas curieux du tout.
Donc il feront du VB.net et des trucs de ce genre, ils vont mettre des années à comprendre l'objet.
Un bon langage pour eux, c'est VB6 et windev, voire Delphi pour l'élite (ya des pointeurs en delphi attention, et puis c'est objet Delphi !!)
Evidemment, Linux ils ne veulent pas en entendre parler. La ligne de commande leur fait peur et ça les obligerai à comprendre le système.
Mais déjà leur faire un avaler un truc du genre
désolé, mais j'y crois pas.
Pour te donner une idée du niveau, ils ont mis deux jours à comprendre comment programmer une pile avec des pointeurs, dans un langage algorithmique style Pascal en français.
Deux jours plein, deux jours à 7 heures de cours par jour (!!!).
En deuxième année qui plus est, donc avec 1 ans de programmation derrière eux...
Des gens comme ça, il y en a plein, je ne suis pas certain que le développement soit leur point fort, ils sont surement plus compétent dans d'autres domaines.
Mais je répète ma conviction : Ocaml est réservé à un élite.
Pour le reste, je suis totalement d'accord avec toi : Des gens ouvert et capable d'appréhender l'embryon de théorie absolument nécessaire et motivé pour s'y mettre peuvent très bien le faire.
Mais quand tu sais qu'il y a plein d'entreprises qui choississent de ne pas utiliser J2EE parce que leur dev ne maîtrisent pas l'objet, tu te demande qui il reste poua apprendre un tel langage.
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
[^] # Re: OCaml (difficulté d'apprentissage)
Posté par V . Évalué à 1.
Ah oui alors là c'est grave. Mais tu as sûrement raison je suis un peu décalé d'une certaine réalité.
Cependant, je doute qu'il soit vraiment plus facile d'apprendre les pointeurs en C. Et quitte à faire des trucs genre visual basic, alors autant les faire sur de bonnes bases. Un «Visual Caml» tu achèterais ?
[^] # Re: OCaml (difficulté d'apprentissage)
Posté par blackshack . Évalué à 1.
[^] # Re: OCaml (difficulté d'apprentissage)
Posté par V . Évalué à 1.
OCaml intègre beaucoup de choses très modernes qui sortent de la recherche sur les langages de programmation...Le basic ou le C datent d'une époque où l'on ne comprenait pas encore bien ce que l'on faisait. Caml ou Java font les choses beaucoup plus proprement. Ce qui réduit considérablement le nombre de bugs possibles dans les programmes ! (et même si c'est caché par une interface graphique, l'ensemble sera plus stable).
Et je ne connais pas d'autre langage que OCaml qui concentre dans un seul langage un si grand nombre de caractéristiques très avancées. (Java est tout objet, Python a de très gros défauts, Haskell n'est pas utilisable à taille réelle, etc.)
Et OCaml est libre aussi...
[^] # Re: OCaml (difficulté d'apprentissage)
Posté par herodiade . Évalué à 4.
Arf, faut que j'en parle à Denis Ritchie ... ;)
[^] # Re: OCaml (difficulté d'apprentissage)
Posté par V . Évalué à 0.
[^] # Re: OCaml (difficulté d'apprentissage)
Posté par Samson Thoias . Évalué à 1.
Quels sont les 'très gros défauts' de python? Compare a OCaml, il est moins type, mais est-ce un gros defaut? Je considere juste cela comme une difference.
Et, juste pour m'informer, qu'est-ce qui rends Haskell inutilisable ?
[^] # Re: OCaml (difficulté d'apprentissage)
Posté par Ontologia (site web personnel) . Évalué à 2.
C'est marrant tu met exactement le doigt sur un autre problème ;-)
Nous avons eu un projet C à rendre, le prof nous a demandé, en 3 semaines, d'écrire un mini interpréteur basic.
Sur 15 élèves de la promo (bts en alternance), seul 4 l'ont rendus. Les autres ont protestés, arguant que c'était "trop difficile, on ne comprend rien".
Je pense qu'un Caml habillé d'un bon environnement de développement avec la possibilité de le coupler avec pas mal de technos existante serait interessant. Il serait interessant que cet environnement de dev soit multi-langage de sorte à utilser caml sur des choses vraiment interessantes (traitement de données) et de laisser la tuyauterie technique (iUH) pour des langages plus conventionnels.
Après c'est une question de goût.
Un visual caml, j'acheterais.
Mais j'utilise caml quand je peux. En fait j'attend de récupérer le bouquin de Weiss et Leroy dont une nouvelle édition va peut être sortir afin de m'y mettre une seconde et dernière fois pour toute :)
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
[^] # Re: OCaml (difficulté d'apprentissage)
Posté par V . Évalué à 1.
(Perso je préfère le bouquin de Chailloux Manoury Pagano chez O'Reilly que je trouve plus grand public mais bon.)
[^] # Re: OCaml (difficulté d'apprentissage)
Posté par Ontologia (site web personnel) . Évalué à 2.
Tout ce qu'il veulent savoir, c'est sur quel bouton cliquer....
Je pense que 50 % des devs sont à ce niveau, et sachant que les jeunes de 20 ans qu'on forme maintenant sont des "enfants de win95" ils n'ont jamais été confronté à un pc bien frustre, où il fallait tapper en basic, ou en ligne de commande.
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
[^] # Re: OCaml (difficulté d'apprentissage)
Posté par reno . Évalué à 3.
Et là, l'intéret des language fonctionnels..
[ oui, je sais, Ocaml est soi-disant un language multi-paradigme, et la marmote.. ]
Et il faut que ce soit dans un language répandus pour être maintenable en équipe..
Faut arréter de croire que ce qui est valable à l'école est valable dans la "vraie vie"..
Bonne chance pour convaincre ton patron d'utiliser OCaml plutôt que C, C++, Java quand tu es le seul de l'équipe à connaitre!
Si tu code un compilo, tu as probablement un bon argument (et encore!), mais à part ça..
Je viens de lire la spec de Lissac (évoqué plus haut), et j'étais mort de rire:une syntaxe, euh comment dire, pas terrible..
Par exemple un retour au déclaration de variables uniquement au début d'une fonction, pas au milieu; etc..
J'imagine un gars programmant en Python ou Ruby auquel on dit de programmer en Lissac, il doit avoir envie de se cogner la tête contre les murs assez rapidement..
[^] # Re: OCaml (difficulté d'apprentissage)
Posté par fmaz fmaz . Évalué à 2.
À la limite « devoir déclarer des variables... ». Oui, déclarer des variables,
c'est chiant et un langage typé permet d'inférer les type.
Mais déclarer une variable au milieu du code, c'est le comble de
l'illisibilité.
[^] # Re: OCaml (difficulté d'apprentissage)
Posté par reno . Évalué à 3.
Imagines que tu ai une fonction ou tu n'utilises une variable que dans une partie de la fonction, si c'est à la fin, il va falloir faire des aller-retour dans ta fonction pour voir comment elle est initialisée pour être sûr que cette partie de la fonction est correcte: super pour la lisibilité les aller-retour.
Certes les fonctions sont censée être courte, mais bon celui qui n'a jamais codé une fonction qui prend deux écrans de haut me jette la première pierre ;-)
[^] # Re: OCaml (difficulté d'apprentissage)
Posté par djano . Évalué à 0.
C'est surtout que ca fait bizarre quand tu as pris l'habitude de l'inverse. Quand je suis passe du C++ au C, je me suis dit que le compilateur etait debile (au debut seulement). Ne pas oublier: le compilateur est ton ami! :) S'il dit que tu as faux, il y a 99.99% de chances que ce soit le cas (si c'est pas plus).
[^] # Re: OCaml (difficulté d'apprentissage)
Posté par reno . Évalué à 3.
Bien sur, mais la variable elle a quelle valeur entre le moment ou tu l'as déclaré et au moment ou tu l'initialise?
Si par erreur tu lis cette variable avant de la definir reellement, le resultat est un bug aléatoire: suivant les exécutions ta variable non-initialisée peut avoir des valeurs différentes..
Les bugs aléatoire, non reproductible sont particulièrement "interressant" quand on cherche a debugger..
C'est plus propre de déclarer et d'initialiser la variable à l'endroit ou tu l'utilise..
Ce qui est possible aussi en C99.
Certes la liste des variables locales dans une fonction devient plus difficile a obtenir, mais ce n'est pas une grosse perte.
[^] # Re: OCaml (difficulté d'apprentissage)
Posté par imalip . Évalué à 2.
Si par erreur tu lis cette variable avant de la definir reellement, le resultat est un bug aléatoire: suivant les exécutions ta variable non-initialisée peut avoir des valeurs différentes..
C'est marrant j'ai jamais eu le probleme. Peut-etre parce que je lis les warning du compilo et que quand il me dit qu'il y a ce probleme je le corrige.
[^] # Re: OCaml (difficulté d'apprentissage)
Posté par kra . Évalué à 2.
l'illisibilité.
oula!!
on va pas etre d'accord.
quand je declare une variable intermediaire dans une boucle, je ne veux pas qu'elle soit visible en dehors de ladite boucle.
genre un
for (Iterator it = list.iterator; it.hasNext();){
Integer next = (Integer) it.next();
}
ou un :
Iterator it;
Integer next;
for(it=blabla){
next=(Integer) blabla;
}
lequel comporte le plus de bruit?
la meme chose pour un bloc try/catch.
pis ca me parait plus comprehensible de declarer les variables au fur et a mesure de leur apparition que de me farcir un bloc de 15 lignes de variables en debut de fonction dont je n'ai aucune idee quand a leur utilite..
on va dire que ca depend de ce qui est code et du besoin d'optimisation
[^] # Re: OCaml (difficulté d'apprentissage)
Posté par fmaz fmaz . Évalué à 2.
tu donnes que le compilo ne puisse pas se rendre compte tout
seul que dans
for(it=blabla){
next=(Integer) blabla;
}
next DOIT être un Integer?
D'où ma remarque sur l'inférence de type.
Et si tu me réponds que des fois, c'est ambigüe
genre tu prends
fonction toto(x,y)=x+y;
Or, dans ton langage, + est surchargé et peut-être le plus
sur des entiers, le plus sur des flotant, la concaténation sur
des listes...
Ben je te réponds que ta fonction doit pouvoir fonctionner avec
des entier, des flotants et des listes.
[^] # Re: OCaml (difficulté d'apprentissage)
Posté par kra . Évalué à 2.
mais cette fois on va etre d'accord :)
c'est pas a moi qu'il faut demontrer l'interet de l'inference de types, tu preches un convertit, surtout qu'en tant que developpeur java pas encore passe au 1.5, je suis le premier emmerde par ce genre de joyeusetes (et biiim!! un ClassCastException en pleine face, ca m'apprendra a preciser exactement ce que je met dans mes listes dans les tags javadoc, tiens).
je rebondissais sur la remarque comme quoi la declaration de variables au milieu d'une fonction etait illisible.
J'aime beaucoup caml, et ya pas mal de ses features que j'aimerais pouvoir utiliser au quotidien : inferences de type, fonctions de fonctions, pattern matching (raaaaah chaque fois que j'ecris un switch case, ca me fait mal au coeur rien que d'y penser) et autres trucs qui ont du se ranger au fond de memoire (de poisson rouge), mais voila quand je parle de caml au taff, une etincelle au fond des yeux et des tremolos plein la voix, on me regarde avec un air genre "l'est mignon l'ingenieur fraichement diplome avec ses belles idees sur la technologie".
[^] # Re: OCaml (difficulté d'apprentissage)
Posté par reno . Évalué à -1.
Imagines que tu ai une fonction ou tu n'utilises une variable que dans une partie de la fonction, si c'est à la fin, il va falloir faire des aller-retour dans ta fonction pour voir comment elle est initialisée pour être sûr que cette partie de la fonction est correcte: super pour la lisibilité les aller-retour.
Certes les fonctions sont censée être courte, mais bon celui qui n'a jamais codé une fonction qui prend deux écrans de haut me jette la première pierre ;-)
[^] # Re: OCaml (difficulté d'apprentissage)
Posté par Philip Marlowe . Évalué à 3.
Par exemple un retour au déclaration de variables uniquement au début d'une fonction, pas au milieu;
C'est vrai ça. On ne peut pas foutre le bordel comme on veut ! C'est même carrément castrateur comme procédé !
[^] # Re: OCaml (difficulté d'apprentissage)
Posté par CrEv (site web personnel) . Évalué à 3.
for(int i = 0; i < maval ; i++)
Bon, à part ça, je vois pas grand chose (en fait pour les variables n'ayant qu'une utilitée ponctuelle)
Mais bon, peut-être que si toutes les vars sont groupées, ça donnera peut-être plus de cohérence et plus de variables commentées, car ça manque dans pas mal de prog...
Mais je préfère pour ma part largement un langage qui oblige à déclarer les variables qu'un programme ne comportant pas de déclaration du tout.
Car beaucoup de langages non ou faiblement typés permettent quand même la déclaration des variables (perl, php, asp, ...) et lire un prog de ce genre sans aucune déclaration c'est très énervant (et malheureusement j'en ai tous les jours :'( )
[^] # Re: OCaml (difficulté d'apprentissage)
Posté par V . Évalué à 3.
(Ah euh on m'indique dans l'oreillette que les gens utilisent toujours windows et C...)
[^] # Re: OCaml (difficulté d'apprentissage)
Posté par reno . Évalué à 2.
Par exemple, utiliser CHARACTER comme nom de type à la place de char, je ne suis pas sûr que ce soit une bonne idée..
Quand il y a ammélioration, c'est sûr qu'il ne faut pas hésiter, mais la ou cela apporte peu d'intéret autant garder l'existant.
Ce sont des petits détails, mais ça compte pour "attenuer" la transition..
[^] # Re: OCaml (difficulté d'apprentissage)
Posté par Anonyme . Évalué à 1.
en meme temps si ils avaient taffer au lieu de protester c'est sur ca aurait pas été plus dur.
[^] # Re: OCaml (difficulté d'apprentissage)
Posté par Ontologia (site web personnel) . Évalué à 1.
Mais que veux-tu, à 20 ans maintenant certains ont un age mentale de 15...
Tu as beaucoup de développeurs comme ça. Ils font leur 35 h, ils se satisfassent de VB ou Windev, et ils ne veulent pas aller plus loin.
Le pire c'est que par leur nombre, ils sont une force économique de poids, on doit s'adapter à eux. Bien que je pense que fasse à la concurrence cette espèce devra disparaître..
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
[^] # Re: SmartEiffel
Posté par Guillaume Knispel . Évalué à 4.
C'est sur qu'un compilo qui fait ca tout seul, c'est pratique, mais c'est plus compliqué... (le compilo)
# le meilleur c le superpascal
Posté par youpitralala . Évalué à -2.
# Microsoft fortement intéressé par Caml !!!
Posté par ddevito (site web personnel) . Évalué à 5.
Par étonnant, car C-oméga http://research.microsoft.com/Comega/(...) permet de définir des N-tuples, des streams comme... OCaml http://download.microsoft.com/download/a/9/c/a9c05370-42bb-4356-b95(...)
F# http://research.microsoft.com/projects/ilx/fsharp.aspx(...) s'inspire de OCaml, comme publiquement annoncé, mais la comparaison était aux dernières nouvelles en faveur de OCaml http://research.microsoft.com/projects/ilx/fsharp-manual/ml-compat.(...)
Les slides des journées académiques 2005 de Microsoft http://galilee.microsoft.fr/(jq35ri555b1sv12m5cdrjn45)/a17fdcfb90f1(...) mettent l'accent sur le pi-calculus et le join-calculus pour définir conjointement un nouvel OS et un nouveau langage (facon développement conjoint UNIX+C) pour l'exploitation des CPU multi-core. Et on a aussi ca chez Caml avec JoCaml http://pauillac.inria.fr/jocaml/(...) et Acute http://www.cl.cam.ac.uk/users/pes20/acute/.(...)
Microsoft pousse vachement dans la direction Caml. Ils s'inspirent des qualités de Caml pour nourrir leurs prochains langages de programmation !
Du coté Java, on n'a pas (encore ?) grand chose... Heureusement que Groovy http://groovy.codehaus.org/(...) fait bouger le monde Java !
Dominique
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.