|
Publicité ' | ||||||||||||||||||||||||
|
|
#21 |
|
Invité de passage
![]() Inscription : mars 2005 Messages : 2 ![]() |
Il me semble que GIMP, EMACS et AUTOCAD sont développés en Lisp/Scheme
![]() Je pense également, que les programmeurs affectionnent les langages qu'ils pratiquent. Bien souvent, le choix d'un nouveau langage se fait soit par obligation (pendant ses études ou au boulot), soit parceque le langage qu'on pratique présente des faiblesse par rapport à ce qu'on développe ... |
|
|
00
|
|
|
#22 |
|
Membre Expert
![]() ![]() Inscription : septembre 2006 Messages : 1 036 ![]() |
Ouh-la, attention : j'ai pas dit que Lisp et Scheme c'était de la merde !
C'est simplement la sensation que seuls Objective Caml et Haskell sont aujourd'hui à même de se positionner comme de vrais langages généralistes, prêts à tout faire avec de très bonnes performances en général, et d'offrir des outils avancés pour les programmeurs (bref, des outsider sérieux). C'est tout. Lisp et Scheme, c'est très bien, mais même si on peut tout faire avec, il y a des choses qui ne sont pas très bien adaptées à ces langages-là. On a le même phénomène, bien entendu avec Objective Caml et Haskell (et tous les langages, C compris), mais la différence est beaucoup moins prononcée, ne serait-ce que par la richesse des systèmes de types de ces deux langages (bien que très différents et radicalement opposés). |
|
|
00
|
|
|
#23 | |
|
Invité de passage
![]() Inscription : mars 2007 Messages : 1 ![]() |
Et pourquoi pas un mix?
J'aime Ocaml, mais pas trop sa syntaxe. Grâce à Camlp4, on peut la changer et ajouter des constructions Ad Hoc, mais ça reste assez lourd. Je verrais bien Ocaml avec une syntaxe Lisp. Avec Camlp4 on a une chance d'y parvenir. On garde alors le typage statique, (avec ses avantages et inconvéniants),et on gagnerais les macros, source majeure de la puissance de Lisp. Ensuite, je trouve la syntaxe Lisp plus lisible que celle d'Ocaml (révisée ou pas). Elle est en effet plus systématique (elle s'explique grossièrement en une ligne de BNF). Pour ceux qui se sentent noyés sous les parenthèses, n'oubliez pas que c'est surtout l'indentation qui nous aide à lire le code. Citation:
|
|
|
|
00
|
|
|
#24 | ||
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Citation:
Je code de temps en temps en Lisp, c'est un langage très puissant, mais j'ai toujours du mal à m'habituer à cette syntaxe. Citation:
Ca fait plusieurs mois que je n'utilise plus que ce langage et il me plaît beaucoup. Il manque encore de maturité, il n'est pas encore parfait, mais il me semble très prometteur. En vrac, quelques fonctionnalités nouvelles, que j'apprécie beaucoup : - syntaxe allégée, basée sur l'indentation (c'est en option) - listes en compréhension (comme dans Haskell) - augmentations de types (pour définir par exemple une fonction membre aux types sommes, ou autres types) - surcharge d'opérateur, et ça, ça embellit la vie - introspection, grâce à .Net - affichage générique (print_any peut afficher n'importe quel type de variable) - la bibliothèque StructuredFormat, pour redéfinir l'affichage du print_any (avec tout plein de fonctions, pour l'indentation, etc.) - le type Seq (comme une liste, mais paresseuse, donc potentiellement infinie) - et bien sûr, toute la bibliothèque .Net. |
||
|
|
00
|
|
|
#25 |
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 963 ![]() |
au passage, vous oubliez Scala...
http://www.scala-lang.org/index.html mais perso, je dirais que comme mon ami InOCamlWeTrust : Ocaml ou Haskell si tu veux te mordre les doigts avec les callcc, éventuellement tu peux essayer SML |
|
|
00
|
|
|
#26 | |||||
|
Membre Expert
![]() ![]() Inscription : septembre 2006 Messages : 1 036 ![]() |
F# en est encore au stade de jouet, ou de projet titubant entre la curiosité de laboratoire et l'outil industriel.
Les mecs qui le développent, je pense, buteront encore longtemps sur ce qui fait la force d'Objective Caml : le pré-processeur, les foncteurs et surtout, surtout... la merveilleuse extension objet du langage, que l'on semble utiliser trop peu souvent. Cependant, F# représente un très bon vecteur de divulgation du langage Objective Caml. Pour ce qui est des "plus", désolé, mais ils n'en sont pas : Citation:
Citation:
Citation:
Citation:
Citation:
|
|||||
|
|
00
|
|
|
#27 | ||||||||||||
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Citation:
Citation:
Je suis désolé, mais faire des macros Camlp4 est quand même très contraignant. En pratique, on ne le fait que pour des bibliothèques, quand il y a vraiment le besoin. Les listes en compréhension, ça allège énormément la syntaxe et augmente la lisibilité. En Caml, on se débrouille avec ce que l'on a, et on le remplace par des List.map, List.filter, etc. Mais, c'est plus lourd. Citation:
Code :
En F#, il y a juste un N à ajouter derrière les constantes. Tout le reste est inféré. Pareil pour les flottants. C'est extrèmement désagréable de devoir ajouté un point partout. Quand j'écris du code avec des flottants, je me plante une fois sur deux. Les opérateurs "+.", "*.", etc. sont moches et non-intuitifs. C'est aussi une perte de temps. La possibilité de pouvoir étendre l'opérateur + sur ses propres types est super intéressant. La surcharge d'opérateurs est quand même l'un des principaux apports du C++ par rapport au C (avec l'objet et les templates) : et regarde la différence entre ces deux langages ! C'est vraiment fatigant d'imaginer de nouveaux opérateurs, plus longs et moins intuitifs que les autres, à chaque fois que l'on définit un nouveau type numérique. Ca ne te semble pas indispensable d'avoir les opérateurs "+", "-"... quand tu manipules des matrices ? Mais si jamais tu n'es pas convaincu, sache que tu peux ne pas utiliser la surcharge. F# est en grande partie compatible avec OCaml. Les opérateurs "+.", "+/", etc. existent. Mais à part enlaidir le code, je ne vois pas trop l'intérêt. Citation:
Je ne connais pas tout les détails de l'introspection, mais je sais que l'on peut : récupérer l'ensemble des fonctions d'un objet (avec leurs types), faire du pattern matching sur des types... La seule fois que je suis servi de l'introspection, c'était pour avoir des infos sur les méthodes .Net, générer du code assembleur CIL à la volée et l'exécuter dynamiquement. Dans tous les cas, ce ne peut pas être une régression : tu ne t'en sers que si tu en as besoin. Citation:
Code :
Citation:
Code :
|
||||||||||||
|
|
00
|
|
|
#28 | ||||||||
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 963 ![]() |
Citation:
Citation:
si l'on modélise correctement son problème, ce n'est pas plus lourd d'utiliser le système Caml Citation:
Citation:
Citation:
Citation:
Citation:
Citation:
)perso, quand on a recours à ce genre "d'outils", c'est que : 1) on est un dieu du langage qui veut implémenter rapidement un truc vachement bizarre... et on sait ce qu'on fait 2) on est un clown qui ferait mieux de revoir la modélisation de son problème... |
||||||||
|
|
00
|
|
|
#29 | |||
|
Membre Expert
![]() ![]() Inscription : septembre 2006 Messages : 1 036 ![]() |
Citation:
Concernant la surcharge, moi aussi je trouve ça très chiant de devoir écrire les opérateurs différemment selon qu'il s'agisse d'un type ou d'un autre, mais lorsque je code en C ou en FORTRAN, par exemple, j'ai toujours la frousse : "Est-ce que le compilateur comprendra ceci : Code :
Lorsque l'on traite des E.D.P. ou autres, on a souvent ce genre de chose à faire... malheureusement, si on ne fait pas attention, on aura trop souvent un pas H nul avec ce code. Cependant, si ce que l'on veut c'est : - de la surcharge - des listes en compréhension (donc éventuellement très longues et dont on ne peut pas réellement en contrôler finement la construction) - faire de jolies impressions - utiliser abusivement l'introspection et les interfaçages avec d'autres langages il existe une seule réponse : Haskell... et là, on n'est plus du tout dans le même cadre. |
|||
|
|
00
|
|
|
#30 | ||||||||||||
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Citation:
Très souvent, ça rend service. Et si jamais à un moment donné ça nous gène, on peut utiliser la syntaxe Caml. Au risque de me répéter, F# est en très grande partie compatible avec Caml. Le compilateur F# est écrit en Caml, mais il compile aussi sous F#. Donc, si jamais les fonctionnalités que j'ai citées ne vous plaisent pas, vous pouvez ne pas les utiliser. Personnellement, elles me plaisent beaucoup. Citation:
Ce n'est pas parce qu'une fonctionnalité est disponible qu'on doit forcément l'utiliser. En F#, la surcharge reste très discrète et elle n'existe que lorsqu'elle est vraiment utile (par exemple, les opérateurs mathématiques). Citation:
J'ai du mal à saisir ton argument. Tu veux dire que "parce que des développeurs peuvent mal utiliser cette fonctionnalité, il faut la supprimer" ? Et quid de la possibilité de redéfinir l'opérateur (+), (!), (mod) ou (=) en Caml (et F# aussi) ? Citation:
Mais mettre des valeurs de types différents dans une même liste peut avoir son intérêt. Derrière, il y a toujours un vrai typage (contrairement à Obj.magic) qui empêche de faire des bêtises. Mais par exemple, si cette liste sert surtout à être affichée (print_any), ce n'est pas choquant d'utiliser la fonction box. Parfois (assez rarement, je suis d'accord), ça peut être utile. Mais le jour où ça arrive, on est bien content de l'avoir. Code :
Pour l'opérateur '/', les surcharges dans F# sont (c'est pas exhautif, mais tu vois l'idée) : Code :
Citation:
Citation:
On contrôle le résultat tout aussi finement qu'avec les appels classiques à List.map et autres. Et l'ajout de cette fonctionnalité ne fait pas disparaître ce qui existait déjà. Code :
Pour le deuxième exemple, c'est encore une fois bien plus joli qu'en Caml. Et ça reste clair et lisible. |
||||||||||||
|
|
00
|
|
|
#31 | |||
|
Membre Expert
![]() ![]() Inscription : septembre 2006 Messages : 1 036 ![]() |
Citation:
|
|||
|
|
00
|
|
|
#32 |
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Oui mais ici, dans ce forum, on parle de langages bien.
La surcharge dans F# ne génère pas ce problème (c'est un typage fort quand même !). |
|
|
00
|
|
|
#33 | |
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 963 ![]() |
Citation:
mais si on se met à utiliser des fonctionnalités que personne ne souhaitent voir dans la communauté (et elle est assez restreinte avec ce type de langage), on risque fort de faire quelque chose que personne ne voudra commenter (utile parfois d'avoir un avis extérieur), ou compléter (en cas de difficulté insurmontable) Je peux donner l'exemple d'un contributeur OCaml qui utilise systématiquement les objets... pas très courant dans les codes sources de ce langage Et la plupart du temps, d'autres redéveloppent les memes fonctionnalités de manière traditionnelle, au lieu d'utiliser ses ressources... qui sont souvent de qualité |
|
|
|
00
|
|
|
#34 |
|
Membre Expert
![]() ![]() Inscription : septembre 2006 Messages : 1 036 ![]() |
Il faut adapter sa façon de programmer à la mentalité du langage.
Le TOUT objet, ce n'est pas dans la mentalité Objective Caml, étant donné que celà se révèle lourd dès que lon veut parcourir les structures... tout comme la surcharge. Pareil pour Haskell : la programmation à la ML ne lui sied pas très bien, même si on peut parfaitement le faire. Concernant F#, je me demande si ces petits "plus" ne sont pas là pour tenter de compenser un manque énorme au niveau de l'extension objet et du langage de modules, ce qui fait toute la richesse d'Objective Caml. Je suis assez perplexe sur l'avenir de ce langage. |
|
|
00
|
|
|
#35 | |
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Citation:
Le langage me semble suffisamment abouti pour que l'on puisse l'envisager sérieusement pour un vrai projet. Il a quand même deux très gros avantages sur OCaml : - il bénéficie d'un véritable IDE : le support F# de Visual Studio est très bon : tout le code, le typage et l'indentation sont vérifiés au fur et à mesure que je tape le code. Il y a aussi la complétion, l'affichage du type des valeurs au survol de la souris - il possède une véritable bibliothèque (celle de .Net). Il n'y a pas à attendre des mois que quelqu'un fasse un binding Caml pour profiter d'une bibliothèque. Donc, même si on peut trouver que le langage est "moins bien" qu'OCaml (ce dont je ne suis pas tout à fait d'accord), il reste quand même ces deux avantages. Et ça me semble être suffisant pour préférer F# à Caml, du moins quand on est sous Windows. |
|
|
|
00
|
|
|
#36 | |
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 963 ![]() |
Citation:
ce qui supprime le cas de 80% des universitaires... |
|
|
|
00
|
|
|
#37 |
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Oui, c'est sûr. OCaml est bien plus adapté pour l'enseignement, mais F# représente une alternative sérieuse pour le monde du travail (et personnellement, ça m'intéresse beaucoup vu que les autres langages fonctionnels ont du mal à se faire une place en entreprise).
|
|
|
00
|
|
|
#38 |
|
Membre Expert
![]() ![]() Inscription : septembre 2006 Messages : 1 036 ![]() |
Le manque de couche objet et l'absence de foncteurs ampute sérieusement F# pour le monde de l'entreprise, car la programmation objet n'est pas aussi répandue dans le milieu universitaire.
Il y a aussi le fait que Objective Caml est bien plus riche et bien plus raffiné dans son système de typage. J'étais justement avant-hier soir en train de me documenter sur les dernières évolutions du typage du langage... et bien il n'y a rien à faire, Objective Caml possède bel et bien le meilleur système de types au monde. Ce qui fait la richesse de Objective Caml, c'est l'intégration de son sytème de types à la ML dans un langage objet et impératif, et le fait que tout celà puisse exister en harmonie. D'ailleurs lorsque l'on regarde les sources des compilateurs, on s'aperçoit de suite qu'un soin tout particulier a été apporté au système de typage. Pour moi, ce qui constitue une vraie avancée dans Objective Caml, c'est le type polymorphe, l'analyse statique au niveau objet et le fait de pouvoir utiliser des objets fonctionnels de A à Z, chose que l'on ne retrouve nulle part ailleurs. Ensuite, chacun à ses préférences... mais certaines sont meilleures que d'autres
|
|
|
00
|
|
|
#39 | ||
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 963 ![]() |
Citation:
Citation:
cette analyse statique pose aussi de sérieuses limitations au modèle objet de Caml... normalement, l'héritage assure d'une certaine "force" du type, alors qu'en OCaml une classe n'est définie "que par ses méthodes" par ailleurs, cela interdit l'introspection et le lancement dynamique de méthode |
||
|
|
00
|
|
|
#40 | ||||||||
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Citation:
Si j'ai à faire un projet sous Windows, par exemple un jeu, j'utiliserais F# sans hésiter. J'aurais bien trop peur de ne pas trouver de bibliothèque adéquate en utilisant OCaml. Ou de manquer de support lors de l'utilisation de la bibliothèque. Citation:
Le fait que l'on ne puisse pas écrire par exemple une fonction qui prenne un nombre en argument (soit entier, soit flottant...) me semble être une limitation du système de typage. Le fait que chaque structure doive avoir des noms de champs différents (et quand on en a beaucoup, c'est pénible), me semble en être une autre. Il y a aussi le fait que l'on ne puisse pas écrire une liste de fonctions. Par exemple, ce code devrait pouvoir être exécuté : Code :
Comment écrire aussi une fonction qui renvoie le complément d'une autre fonction ? Exemple en Ruby : Code :
Autre exemple : Code :
Comment écrire une fonction prenant un tuple en argument et renvoyant son premier élément ? Comment écrire une fonction prenant en argument un entier positif ? Ou un entier compris entre 10 et 20 ? Même Pascal permet de faire ça ! Le fait que le système de typage interdise la surcharge est aussi une limitation : OCaml doit être l'un des rares langages qui "oblige" à mettre l'information de type dans le nom même de la fonction : print_int, print_float, print_string... abs, abs_float... |
||||||||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com