|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() Inscription : mai 2007 Messages : 105 ![]() |
Bonjour,
Quelqu'un aurait-il une opinion sur le langage fonctionel Qi : http://www.lambdassociates.org/ créé par Mark Tarver de l'Université d'État de New York. Comment se positionne-t-il par rapport à des langages tels que Haskell ou OCaml ? (Est-ce que cette question a un sens ?). Merci. ---- Canvas |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
On en a parlé un petit peu ici : http://www.developpez.net/forums/sho...d.php?t=475194
La différence avec Caml/Haskell, c'est que c'est avant tout un Lisp (s-expressions, macros...). Le langage me semble très intéressant et j'attends Qi II pour le tester vraiment. J'imagine que Qi offre beaucoup moins de garanties que Caml/Haskell et qu'il tend à être moins sûr (mais plus flexible, puisque le typage statique est optionnel). |
|
|
00
|
|
|
#3 | |
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 963 ![]() |
Citation:
|
|
|
|
00
|
|
|
#4 | ||||||||
|
Invité(e)
![]() Messages : n/a ![]() |
Ca y est, j ai un peu regarde Qi. Pour la faire courte, je ne suis pas franchement fan !
Pour commencer, je n'aime vraiment pas la syntaxe, mais bon, on va dire que ce sont les gouts et les couleurs hein Par contre, je pense que c'est une tres mauvaise idee d'avoir une environnement globale d'association symbole<-> valeur et qu'il ne soit pas concerve dans les fermeture (chose heritee de Lisp, si je ne m'abuse) Je m'explique : Code :
Ensuite le systeme de type : D'abord la partie "classique" du systeme de type : Je n'aime pas leur facon de definir des structures. En effet, on ne nomme pas les champs a la construction de la structure. Donc si on redefini un jour la structure (parcequ'on n'avait pas pense a tout des le debut, ce qui peut arriver A premiere vue, on se dit que c'est vachement puissant de pouvoir jouer avec le calcul des sequents dans un systeme de type. Ca donne effectivement beaucoup de liberte. Mais en fait tellement de liberte qu'il n'y a plus aucune surete de typage. Il est vraiment facile de s'emmeler les pinceau. Premiere erreur, utiliser une fonction qui ne termine pas dans la definition d'un type Code :
Par contre ce qui est beaucoup plus problematique est que la theorie des types de Qi n'apporte aucune securite. En effet, puisqu'on peut y ajouter n'importe quel axiome ou n'importe quelle regle, et que la coherence est evidement indecidable, on peut facilement se retrouver avec une theorie totalement incoherente. Avec une simple mauvaise regle, on retourne aux erreur de typage dynamique : Code :
On pourrait se dire a la rigueur que ce n'est pas bien grave, qu'il suffit de ne pas utiliser les sequents si on n'est vraiment pas sur de soi, mais malheureusement, un simple type union a besoin du calcul des sequents pour etre defini. Pour resumer, je ne vois pas dutout l'interet d'avoir un systeme de type s'il n'apporte au final aucune securite. Si tout repose sur le programmeur, autant ne pas s'embeter et simplement faire du typage dynamique. Je pense que s'il on veut un systeme de type tellement puissant, il faut carrement un prouveur de theoreme. Parceque c'est bien beau de pouvoir definir le type "entier positif", mais il y peu de chance qu'on puisse faire autre chose que definir l'addition dessus, sauf a rajouter a chaque fois de nouveaux axiomes au type pour typer chaque fonction, ce qui finalement n'apporte plus rien. Sinon, est ce que quelqu'un a trouve comment faire un set quand on est en mode type, ou comment definir des variables locales ? Pour mes tests de "desucre" la definition de variable par application de fonction, mais c'est inbouffable ! Ah ouais, j'aime pas non plus le fait que l'on puisse definire des tableaux sans rien mettre dedans : Code :
Dernière modification par gorgonite ; 30/07/2008 à 10h46. |
||||||||
00
|
|
|
#5 |
|
Membre Expert
![]() ![]() Inscription : septembre 2006 Messages : 1 036 ![]() |
Si le mec qui a fait le langage est américain ou possède une culture américaine de la programmation, c'est vrai qu'il y aura des choses qui peuvent, à nous petits français, nous choquer. C'est une différence, voire une divergence, culturelle. Pourquoi les américains préfèrent-ils Scheme/Lisp à ML ? C'est purement culturel, je pense.
Ensuite, une personne fait un langage nouveau, avec des concepts novateurs, et bien moi, à défaut de l'applaudire, je le félicite, essentiellement pour l'initiative, l'informatique étant entrée, d'après moi, dans une longue léthargie depuis Java. Enfin, il est sûr que la liberté se gagne en faisant des concessions sur la sûreté du typage, mais ça, tout le monde en est conscient. Mais, franchement, beaucoup de fois je me demande si le gros rouleau compresseur de l'inférence de types à la OCaml (n'oublions pas la couche objet !) est bien justifié dans la pratique. En effet, c'est très joli de prouver que ta fonction retournera une valeure du type x non du type y ou tout autre type incompatible, mais ça ne fait faire, dans 99.99% des cas, aucun progrès quant à la preuve de l'algorithme !
__________________
When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal. |
|
|
00
|
|
|
#6 |
|
Invité(e)
![]() Messages : n/a ![]() |
Globalement, tout ce que je dis c'est que s'il n'y a pas de surete apporte par le typage, pourquoi s'emmerder a en avoir un ? Il faut le dire, un systeme de type, it's a pain in the ass, donc si tu n'as pas une bonne compensation, de la surete principalement, autant ne pas en avoir. Pour avoir tente d'ecrire un certain nombre de chose en Qi, je le trouve pas mal prise de tete (en mode type), alors qu'en python par exemple, tout coule de source. Et s'etre debarasse de l'affectation de variable des qu'on passe en mode type, ca fait un peu mal. Et des nouveaux langages, il y en a toutes les semaines.
Apres, pour la partie non type, c'est sans doute un gros progres pour Lisp, je ne dis pas le contraire. PS : desole pour les accents, je n'en n'ai pas sur mon clavier... |
00
|
|
|
#7 | ||||
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 963 ![]() |
Citation:
des langages réellement utilisables, qui ne soient pas uniquement le fruit d'un délire de chercheur au fond de son labo qui a oublié qu'en l'informatique il faut parfois aussi penser à essayer de pouvoir faire quelque chose d'utile avec son "nouveau" langage, et non une simple variation à epsilon près d'un truc sorti 2 mois plus tôt dans le seul but de publier son 6ème papier de l'année... j'ai comme un doute sur la fréquence de sortie de "vrais" nouveaux langages ![]() enfin de là à dire que depuis Java (qui n'est pas réellement une nouveauté au passage), il n'y a pas eu de vrais nouveaux langages... faut pas pousser je dirais au moins C# (qui est une belle évolution de Java, même si je ne suis pas fan et n'oubliez pas Anubis de notre cher DrTopos (même si ce n'est pas forcemment une grande réussite en pratique, soyons réalistes, il a le mérite de fonctionner, et d'être nouveau)Citation:
Citation:
perso, j'aurais deux "reproches" à faire :
Citation:
|
||||
|
|
00
|
|
|
#8 | |||
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Citation:
Citation:
Citation:
|
|||
|
|
00
|
|
|
#9 | ||||||
|
Invité(e)
![]() Messages : n/a ![]() |
Citation:
Tu peux donner n'importe quel type à n'importe quelle expression : Code :
Citation:
C'est un peu le principe de la programmation fonctionnelle de définir des types correspondant à chaque problème non ? Citation:
Citation:
C'est un peu verbeux, mais pas "difficile", et si on s'y tiens bien, probablement peut sujet à erreur. |
||||||
00
|
|
|
#10 |
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
La philosophie de Lisp est de mettre le moins de contraintes possible. C'est à l'utilisateur de se limiter et de ne pas faire n'importe quoi, et non au langage d'imposer des limitations plus ou moins arbitraires. Je trouve que Qi respecte bien cette vision des choses.
Si on garde le système de types par défaut, c'est assez sûr. Si on n'est pas sûr de soi, on peut le garder tel quel. Tu as dit qu'ajouter un type somme n'est pas difficile. Au pire, je suppose qu'on pourrait même ajouter une macro defunion pour rendre ça plus facile, moins verbeux et moins sujet à erreur. Juste avec ça, je suis heureux. De même, C++ est assez sûr comme langage, si on oublie un certain nombre d'héritages du C. Caml est très sûr, si on ne cherche pas à tout casser avec de la magie. Qi semble assez sûr, si on ne casse pas soi-même le système de typage. L'approche de Qi me semble donc très intelligente. |
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() ![]() Inscription : septembre 2006 Messages : 1 036 ![]() |
Pour moi, un langage sûr, c'est un langage qui ne segfault'e pas... Du moment que l'on a ça, je suis content !
Le gros problème du C et du Fortran vient du fait que l'on peut assez facilement segfault'er ; cependant, en programmant avec hygiène (comme les petits enfants, on se lave les mains avant de passer à table !), on ne segfault'e jamais. Pour ma part, mon dernier segfault en C remonte à il y a pas mal de temps ! En Fortran, c'est une autre paire de manches, surtout à cause du système de types qui est ultra-pourri-de-chez-pourri. Le gros avantage de ces langages-là, c'est que bien maîtrisés, ils apportent une sûreté incomparable aux programmes. Le gros avantage des langages un peu plus doux comme OCaml, Haskell et tout le tralala (mettre aussi Java Là encore, le produit miracle vu à la TV n'existe pas : tout est question de juste mesure.
__________________
When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal. |
|
|
00
|
|
|
#12 | |
|
Membre émérite
![]() Inscription : mai 2004 Messages : 738 ![]() |
Citation:
|
|
|
|
00
|
|
|
#13 |
|
Invité(e)
![]() Messages : n/a ![]() |
|
00
|
|
|
#14 |
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 963 ![]() |
ben le dogme disant que seul OCaml peut apporter de la sureté en programmation, est tout aussi difficile à croire
|
|
|
00
|
|
|
#15 |
|
Invité(e)
![]() Messages : n/a ![]() |
OCaml fait partit *des* langages qui apporte *de la* sureté en programmation. A la rigueur, on peut dire que le C apporte de la sureté de programmation par rapport à l'assembleur, ou bien on peut dire qu'un bon programmeur peut écrire en C des langage qui s'avèrent sûrs, mais le C en lui même n'y est pour rien :-\
|
00
|
|
|
#16 | |
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 963 ![]() |
Citation:
ben un mauvais programmeur caml fera également plein de crash bizarres... pas de segfault, mais des exceptions à tout va et non récupérées
|
|
|
|
00
|
|
|
#17 |
|
Invité(e)
![]() Messages : n/a ![]() |
|
00
|
|
|
#18 | |
|
Membre émérite
![]() Inscription : mai 2004 Messages : 738 ![]() |
Citation:
S'il manipule des arbres, il n'aura jamais de problème de pointeurs nul, mais que des algorithmes faux au pire ou qui ne terminent pas (à double tranchant ça, voir mon message précédent). Il n'aura plus de problème dû à une conversion float > int implicite non désirée. |
|
|
|
00
|
|
|
#19 |
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 963 ![]() |
aucune mauvaise foi... trop de monde préféreront faire vite et sale
juste un constat qui déplait à une certaine élite :
|
|
|
10
|
|
|
#20 |
|
Invité(e)
![]() Messages : n/a ![]() |
C'est justement ce que je reproche à Qi, c'est que son système de type nécessite un Doctorat, alors que celui de Caml ne nécessite qu'un master :-p
|
00
|
Copyright © 2000-2013 - www.developpez.com