|
Publicité ' | ||||||||||||||||||||||||
|
|
#21 | |
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 961 ![]() |
Citation:
comme la majorité des langages académiques... ils ont incontestablement énormement d'avantages, mais ont le gros défaut d'être trop compliqués pour un utilisateur lamba nb : le niveau moyen d'un codeur serait plutot vers BTS/DUT/Licence |
|
|
|
00
|
|
|
#22 | |
|
Invité(e)
![]() Messages : n/a ![]() |
Citation:
Après, le reste de Qi apporte sans doute beaucoup à Lisp, mais vu que je ne connais pas ce dernier, je ne saurais juger. |
|
00
|
|
|
#23 | |
|
Expert Confirmé Sénior
![]() ![]() |
Ce qui me gène dans ce que dit Alex_pi, c'est que ce système de type ne semble pas appuyé sur une fondation solide... Autrement dit on peut lui faire dire n'importe quoi !
Le système de type de Coq est très complexe, mais au moins on ne peut pas lui faire dire des bétises, plus exactement on ne pourra jamais écrire un programme de type "True -> False" en Coq, alors que le système de Qi ne semble pas limité ainsi. Autrement dit, dès qu'on commence à essayer de l'utiliser, on est obligé de prouver nous même qu'on n'est pas en train de casser tout. S'il en est ainsi, je préfère encore programmer en Lisp et faire quelques preuves informelles là où j'en ai besoin. Citation:
-- Jedaï |
|
|
|
00
|
|
|
#24 | |
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 961 ![]() |
Citation:
ben regardes le niveau moyen des TP caml ou des TIPE en fin de spé... ça laisse souvent songeur je pense clairement que si l'on veut utiliser correctement OCaml, il faut un background théorique sur les foncteurs et l'inférence de type... et clairement ce n'est pas du niveau licence. après il est clair qu'on peut coder des hello world en caml dès le lycée, mais je doute que ça justifie une embauche dans une boite comme JaneStreet
|
|
|
|
00
|
|
|
#25 | |||
|
Membre Expert
![]() Inscription : avril 2007 Messages : 829 ![]() |
Citation:
Pareil pour les foncteurs, "ça prend un module en paramètre et ça renvoie un module", c'est quand même pas sorcier et ça demande pas de formation théorique. Après je dis pas, je me suis jamais trop intéressé aux modules récursifs et je les ai vu employés pour faire des trucs que je ne comprends pas, mais je n'en ai jamais eu besoin non plus. Bref le background théorique, je ne suis pas convaincu. J'ai essayé de toucher à Coq, et j'ai bien compris ce que c'est que "ne pas avoir les bases théoriques nécessaires". Je ne pense pas que ce soit le cas avec Caml. Même en Haskell d'ailleurs, il y a un grand nombre de gens qui absorbent des choses délicates comme les monades sans aucun background théorique. Il y a aussi des gens qui savent faire le lien et c'est très intéressant, mais ce n'est pas "nécessaire" pour une utilisation non-gurutique du Haskell (même si le problème se pose certainement plus vite qu'en OCaml). Si les gens ont du mal à comprendre les monades, c'est parce que c'est une notion non-triviale, et pas (à mon avis) parce qu'il manque un background théorique. Citation:
Bon, il se trouve que c'est aussi la principale (comprendre "la seule qui le fait aussi bruyamment", il y en a bien d'autres) boîte recrutant sur OCaml. Mais ça reste biaisé dans le sens où quand tu choisis des boîtes aussi spécialisées et exigeantes, forcément tu auras des prérequis élevés. Ce n'est pas parce que les boîtes gagnant leur croûte avec de la programmation fonctionnelle travaillent dans des domaines aussi avancés que Jane Street (ou Galois, etc.) qu'on ne pourrait pas faire des choses raisonnables avec un niveau raisonnable, comme la plupart des programmeurs dans la plupart des langages. Citation:
|
|||
|
|
00
|
|
|
#26 | |
|
Membre émérite
![]() Inscription : mai 2004 Messages : 738 ![]() |
Matinal le bluestorm (ou nocturne...
).Citation:
Et les foncteurs, tu peux trouver plein d'analogies dans d'autres langages. C'est comme une classe template en C++ (pas mal de fois avec la STL, tu te sens obligé de fournir un foncteur C++ en paramètre du type pour std::set<> ou std::map<>, pour spécialiser le comportement). Le module en argument, c'est aussi comme un objet qui implémente une interface en POO classique. |
|
|
|
00
|
|
|
#27 | ||
|
Membre Expert
![]() ![]() Inscription : septembre 2006 Messages : 1 036 ![]() |
Citation:
Le C est très rustique et ne comporte aucun mécanisme d'exceptions. En d'autres termes, quand une fonction de librairie (librairie standard LibC ou non) échoue, il y a toujours un moyen clairement documenté pour traiter n'importe quelle erreur, qu'elle soit grave, pas grave, ou qu'elle soit un simple avertissement (Warning) ! Tu n'as rien de similaire en OCaml. Souvent, les fonctions dans les langages soft buguent, lancent une exception qui est dans 99% des cas irrécupérable car ou non documentée ou critique, et puis font lamentablement planter (non pardon, terminer) ton programme et tu te retrouves comme une poule avec un cure-dents ! Je vais te donner un exemple. L'année dernière, alors que je compilais une librairie que j'avais faite (en C) avec gcc, je me rends compte que la compilation s'arrête brutalement. gcc avait fait un segfault ! Cependant, les programmeurs de gcc ainsi que les mainteneurs chez Mandriva, qui ne sont pas nés de la dernière pluie, semble-t-il, ont eu la clairvoyance d'enregistrer dans le programme un handler de signal SIGSEGV (le signal qui est levé par l'OS quand il y a un segfault) afin d'afficher dans le terminal, avant que le programme termine mais après qu'il ait segfault'é, l'e-mail de la personne/groupe à contacter dans ce cas-là ainsi que l'origine du bug (un segfault). Ici, clairement, on est face à de bonnes pratiques de programmation qui permettent indéniablement de renforcer un programme et le rendre résistant à beaucoup de choses. Avec OCaml ou Haskell, je pense que l'on aurait eu une lamentable phrase ésotérique pour la personne qui n'a pas forcément envie d'y connaître quelque chose à son compilateur : Uncaught exception: Array_out_of_bounds, puis la main rendue à l'utilisateur. Tu auras remarqué qu'en C POSIX, on peut tout à fait se passer des segfault, les rattrapper et ainsi poursuivre les calculs ! Tu ne feras tout simplement jamais ça avec Java ! Uncaught exception: void pointer Uncaught exception: void pointer Uncaught exception: void pointer Uncaught exception: void pointer Sans parler de la portabilité du C : ben oui, seul le C ANSI est portable ! Sur toutes les machines et tous les OS correctement faits : Windows, Linux, tous les BSD, Solaris, HP-UX (on en avait encore à GAMMA !), etc... Quand j'étais à GAMMA l'année dernière, on demandait que tous les programmes 1- suivent scrupuleusement les normes, car ils étaient compilés et exécutés sous les systèmes/CPU/OS les plus classiques comme les plus exotiques (et surtout ceux-là) 2- puissent être compilés sans Makefile avec une seule commande du genre cc *.c ou encore f77 *.f
__________________
When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal. |
||
|
|
00
|
|
|
#28 | |
|
Expert Confirmé Sénior
![]() ![]() |
Citation:
-- Jedaï |
|
|
|
00
|
|
|
#29 |
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Je n'ai pas vraiment envie de débattre de la sûreté de C dans ce thread (mais pourquoi pas dans un autre ?). Mais :
1) le segfault n'est pas systématique. Faire un mauvais accès peut te renvoyer une valeur quasi-aléatoire. 2) c'est quand même plus simple de poursuivre l'exécution après avoir rattrapé une exception qu'après un segfault. |
|
|
00
|
|
|
#30 | |
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 961 ![]() |
bon j'arrête de parler dans ce thread... ça va finir en pugilat
Citation:
|
|
|
|
00
|
|
|
#31 | ||||||||
|
Invité(e)
![]() Messages : n/a ![]() |
Cette discussion n'est notoirement pas dans le bon thread...
Citation:
Citation:
Citation:
Si une exception est lancée et non ratrappée, effectivement, mon programme termine. Si une erreur est produite par une fonction C, mais que le programmeur n'a pas vérifiée la valeur de retour de la fonction, l'erreur est totalement silencieuse, le reste du programme continue à s'exécuter, alors qu'il a été pensé par un programmeur qui a oublié que la fonction pouvait échouer. Les pires choses peuvent maintenant se passer. Citation:
Citation:
Citation:
Code :
Arghl ! Et c'est toi qui parlais de "bonne habitudes de programmation" ? Cacher l'erreur sous le tapis, tenter de reprendre le cours des calculs (qui sont évidement érroné puisqu'avant de provoquer une erreur, tu as très probablement fait n'importe quoi dans ta pile ou dans ton tas), en espérant eventuellement que l'utilisateur ne se rendra compte de rien, et ne tentera donc pas d'exploiter la faille (dommage que ptrace existe) ? Tu appelles ça de bonnes habitudes ? |
||||||||
00
|
|
|
#32 |
|
Futur Membre du Club
![]() Inscription : juin 2005 Messages : 28 ![]() |
Juste pour signaler que QiII vient juste de sortir aujourd'hui.
La page de nouveautés : What's new |
|
|
00
|
|
|
#33 | |
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Citation:
|
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com