• [^] # Re: Quelques questions

    Posté par . En réponse à la dépêche Common LISP, un langage à (re)découvrir. Évalué à 7.

    Je vais tenter de donner des éléments de réponse à vos questions :

    - vous recommanderiez quoi comme bouquin pour mieux saisir les joies de la programmation fonctionnelle ?

    La question est difficile... Mon livre préféré est celui de X. Leroy et P. Weis que je recommande vivement, mais il s'agit de Caml même s'il s'efforce de donner un aperçu syntétique de la question.

    Je vous conseille d'aller faire un tour dans la section livres de plusieurs langages fonctionnels (Haskell, Caml, ML), d'éventuellement télécharger des tutoriels pour vous en faire une idée :
    http://www.haskell.org(...) (livres en anglais exclusivement)
    http://www.ocaml.org(...)

    - plus ca va, plus python a l'air d'integrer des fonctionnalites de programmation fonctionnelle. Vous croyez qu'un langage imperatif peut s'approcher d'un langage fonctionnel suffisamment pour en procurer les avantages ? D'apres ce que je vois, les langages fonctionnels supportent aujourd'hui le double paradigme fonctionnel et imperatif. Donc eux aussi se rapprochent ?

    Tous les langages fonctionnels ne supportent pas le double paradigme fonctionnel/impératif : contre-exemple Haskell.
    Lisp est aussi vieux que Fortran et antérieur à C, Ada, etc. Autrement dit les langages fonctionnels ne se rapprochent pas, ils ont toujours été là.
    Quant à savoir si les langages purement impératifs vont un jour adopter les paradigmes venus du monde fonctionnel, jusqu'à présent toutes les initiatives en ce sens ont échoué, que ce soit Pizza (au dessus de Java) ou autres. C'est fondamentalement un problème de conception, à l'image des machines virtuelles de Java et de Python sont irrécupérables (et resteront à jamais des tortues devant celle de Caml)

    - y a-t-il des boite a outils graphique (style Qt, gtk, ...) et des constructeurs d'interface (glade, Qt Designer, ...) avec vos langages fonctionnels ?

    Caml et Haskell ont des wrappers pour toutes les librairies graphiques nécessaires (ils ont d'ailleurs des interfaces C, COM, etc?). Vous trouverez nombre d'applications Caml qui utilisent une interface Tk ou GTk, j'ai même vu un jeu en openGL
    (voir les entrées correspondante dans la bosse -the hump- sur le site caml précédemment cité)

    - j'ai cru comprendre qu'une des forces du Lisp etait la souplesse de ses types definies de facon plutot faineante [comment on traduit 'lazy' ?] et ses capacites de mise a jour dynamique. Il semble que ce genre de fonctionnalite ne fasse pas partie de OCaml mais que ca soit bien quand meme. Vous pouvez m'expliquer ?

    Il ne faut faire la part entre les différents concepts :

    - typage dynamique / typage statique

    Le typage dynamique se fait à l'exécution (Lisp), le typage statique à la compilation (Caml), certains langages ont une part des deux (Java)

    Le principe du typage statique est "si le programme compile correctement, il n'explosera pas à l'exécution" autrement dit pas de segfaults, pas de message d'erreur "method not found", etc.

    - évaluation stricte / évaluation paresseuse (lazy)

    Cela désigne le fait que lors de l'appel à une fonction, tous les arguments sont évalués même s'ils sont inutiles (strict) ou seulement les arguments nécessaires sont évalues (paresseur). Exemples caractéristiques Caml / Haskell.

    Cependant, les langages paresseux comportent toujours des mécanismes pour forcer une évaluation stricte (! en Haskell) et inversement les langages stricts ont des calculs déférés (type lazy en Caml)

    - réflexivité

    C'est un concept plus difficile, il s'agit de pouvoir se manipuler soi-même en tant que langage. Par exemple en Lisp les fonctions sont des listes, donc on peut les manipuler comme des listes (prendre la tête, coller avec une autre queue, etc.)

    - mise à jour dynamique

    Je ne vois pas très bien ce que vous voulez dire par là, sans doute faites vous référence à la particularité de pouvoir changer les éléments en cours d'éxécution (un peu à la SmallTalk).
    Il faut savoir que cela est caractéristique des langages interprétés (typiquement SmallTalk), seulement tant Lisp que Caml ou Haskell viennent en version interprétée ou compilée.

    Lisp (même compilé) permet certaines manipulations du genre (Java aussi par exemple), mais il s'agit là plutôt de réflexivité

    Lisp
    forces :
    - réflexivité
    faiblesses :
    - typage dynamique

    Caml
    forces :
    - typage statique
    - vitesse
    faiblesse :
    - absence de réflexivité (cependant MetaOCaml)

    - je crois que je devrai faire un tour sur un newsgroup de programmation fonctionelle.

    Il y a une FAQ qui peut vous être utile

    - ca a l'air cool l'inria, vous etes tous payes pour vous eclatez sur des trucs qui vous plaisent ? Comment qu'on rentre ?

    On rentre par concours. Voir http://inria.fr(...) pour les postes disponibles (tout niveaux : chercheurs, ingénieurs confirmés ou débutants...)