Kevin Kofler
:
Et celui de GCC est tout à fait comparable. (Sur x86. Sur Itanic, c'est autre chose, mais c'est une architecture qui n'arrivera nulle part de toute façon, l'AMD64 a gagné, même Intel s'y met.)
Bah, je ne nie pas que gcc est un des plus importants compilateurs. Simplement il n'est ni aussi parfait ni aussi irremplaçable qu'on voudrait le faire croire.
C'est toujours l'excuse de ceux qui n'arrivent pas à s'imposer: "On est trop en avance sur notre temps."
Il arrive parfois à s'imposer :
http://caml.inria.fr/contests-eng.html
Dans un langage impératif évolué, oui. Mais tu sembles avoir très peu d'expertise en programmation impérative...
s/Hippohmu/Kevin Kofler/
s/impérative/fonctionnelle/
Si j'ai le choix entre des trucs bizarres comme les fonctions en valeur de retour et un truc solide et pratique comme goto, mon choix est vite fait. (Indice: Ce n'est pas le même que le tien.)
Errare Humanum Est.
Perseverare Diabolicum.
Moi, dans vos snippets de code, je vois bien plus de symboles auxquels il faut s'habituer: ' -> | etc. Pour toi, ces symboles sont habituels parce que tu les utilises tout le temps.
Je crois assez naturel, même pour un débutant, qu'une fonction qui à 1 associe 15 s'écrive
1 -> 15.
C'est la même chose pour moi (et d'autres programmeurs C) avec << et >>.
C'est tout de même moins évident. Ca suppose par exemple de connaître un peu l'écriture binaire, la représentation interne des nombres.
Le Caml non plus.
La première fois où j'ai lu du caml, j'ai trouvé ça plus lisible que la première fois où j'ai lu du C.
Il n'y a pas que des mots, il y a aussi des symboles!
Certes, il y a let écrit en entier, mais pour le reste...
Le reste quoi?
Le C est
un vrai langage!
Il est "de moyen niveau", c'est-à-dire qu'il réunit les avantages d'un langage de haut niveau avec ceux de l'assembleur.
Non, il garde les désavantages de l'assembleur (presque pas de typage, pas de chaînes de caractères ou autres structures de données évoluées, des goto, peu d'outils de haut niveau) avec une syntaxe qui essaie de se détacher de la rudesse de l'assembleur, mais qui reste très rustique.
C'est ce que le lavage de cerveau de la secte anti-goto laisse croire. Mais c'est faux. Évidemment qu'on peut abuser de ces fonctionnalités de manière à donner des programmes illisibles, bogués etc. Mais si on sait bien programmer, on peut au contraire les utiliser pour donner des programmes plus courts, et donc plus simples, plus lisibles et moins bogués!
Si tu rêves de faire des programmes plus courts, plus simples, plus lisibles et moins bogués, tu devrais plutôt programmer en Caml
En outre tu pourrais ainsi te passer du goto : c'est vraiment le paradis!
Les programmeurs qui programment comme des porcs sont toujours un problème, même dans le langage le plus restrictif au monde. Si on programme comme un porc, le problème est là, pas dans le langage.
Le problème est dans le laxisme du langage, qui autorise tous les abus.
N'essaye pas de me raconter que tu as eu ces idées dogmatiques tout seul, sans que personne ne t'ait jamais rien dit à ce sujet! L'antigotoisme est une idée reçue...
C'est une idée vraie, donc que chaque émettre peut émettre tout seul.
Ben, ce sont des nombres (plus précisément des réels) des 2 côtés! Pourquoi ne devrait-on pas pouvoir les assigner?!
Je suis d'accord pour transtyper automatiquement des entiers entre eux, ou des réels entre eux (pas dans les langages très fortement typés comme caml, bien sûr!)
Mais entre réels et entiers, celà pose à mon avis des gros problèmes. Mathématiquement, bien sûr, l'ensemble des entiers est inclus dans celui des réels. Mais un entier informatique n'est PAS un entier mathématique, et un réel informatique n'est PAS non plus un réel mathématique.
Informatiquement, l'ensemble des entiers est le plus souvent un anneau Z/nZ, avec n=2^8, 2^16, 2^32.... Alors que l'ensemble des réels informatiques a une structure totalement différente, ce n'est même pas un anneau, et il n'y a aucune espèce de morphisme entre les deux ensembles.
Qui plus est, du point de vue de l'implémentation, les deux types sont codés en mémoire de façon complètement différente, et les instructions assembleur pour les manipuler sont elles aussi complètement différentes. Les vitesses de calcul sont aussi totalement différentes.
Bref, je considère plus sain de différentier correctement ces deux types de données, qui n'ont rien à voir en interne.