Merci pour ces conseils. Pour le moment, j'attends le livre de Gaham Hutton "Programming in Haskell" que j'ai commandé à la bibliothèque. Je vais débuter avec ça. Je pense que j'ai pas mal de matière pour débuter mon apprentissage.
Thierry
Merci pour ces conseils. Pour le moment, j'attends le livre de Gaham Hutton "Programming in Haskell" que j'ai commandé à la bibliothèque. Je vais débuter avec ça. Je pense que j'ai pas mal de matière pour débuter mon apprentissage.
Thierry
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
Non tu n'as pas besoin de connaître le lambda-calcul pour faire de la programmation fonctionnelle correctement. C'est une habitude très française de croire ça.
Attention cependant, si tu peux te lancer dedans, certains aspects du lambda-calcul permettent de mieux comprendre des notions de paradigmes fonctionnels. Mais c'est loin d'être nécessaire. Ça serait comme dire que tu as besoin de connaître les machines de Turing ou les automates à piles pour programmer en Fortran.
En pratique ce n'est pas exact. Comme il est dit dans l'article An Introduction to Category Theory, Category Theory Monads, and Their Relationship to Functional Programming :C'est pour cela que les monades ont été introduites. Les monades sont LA façon dans un langage paresseux comme Haskell d'effectuer des actions ou d'évaluer des valeurs dans un ordre prédéterminé.
Il me semble que les monades ont été introduites en programmation pour leurs vertus de généralisation / modélisation, et non pas en relation directe avec l'évaluation paresseuse. D'ailleurs, avant d'utiliser les monades, Haskell utilisait pour l'entrée/sortie une méthode reposant beaucoup plus sur la paresse (et qui était d'ailleurs, de l'aveu de la plupart, complètement imbuvable).Monads are typically equated with single-threadedness, and are therefore used as a technique for incorporating imperative features into a purely functional language. Category theory monads have little to do with signle-threadedness; it is the sequencing imposed by composition that ensures single-threadedness. [...] There is nothing new in this connection. Peter Landin in his Algo60 paper used functional composition to model semi-colon. Semi-colon can be thought of as a state transforming operator that threads the state of the machine throughout a program.
Je vois ce que tu veux dire, mais je me demande très honnêtement ce qui est venu en premier dans le cas de Haskell : l'implantation des monades dans le langage ou sa justification ?
When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.
C'est des crétins, c'est tout.Envoyé par Garulfo
Ca me fait penser à une présentation en cours, avant-hier, par un groupe d'étudiants.
La personne en question a présenté les caps et les floors, deux produits utilisés en finance pour se couvrir. Il a montré tout plein de formules mathématiques, et quand je lui ai posé la question dix minutes après "C'est quoi un cap ? C'est quoi un floor ?", il m'a tout de suite montré les formules qu'il avait écrites au tableau. J'ai tout de même réussi à lui arracher de la bouche "C'est une option avec un actif sans risque.". En fait, ça n'a rien à voir avec ça.
Et ce mec-là va se retrouver dans quatre mois dans une grosse salle de marchés à jouer avec de grosses sommes d'argent tous les jours.
Donc bon, les gens qui font de la théorie sans pratique, moi je pense que ça fait de belles pièces de musées.
When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.
Ce serait sympa que tu arrêtes avec tes provocation gratuites, ça éviterait à mes posts de se faire supprimer quand je te réponds... Et tu pourrais éventuellement penser à monsieur Church avant de te prononcer de façon si catégorique...
Et évidement, s'il n'y avait pas de théoricien pur, l'informatique serait bien loin de son point d'avancement actuel.
De plus, je ne pense pas que les théoriciens aient fait réellement avancer l'informatique. Certaines théories ont peut-être, au commencement, fait émerger certaines idées, mais ce n'est certainement pas la théorie qui a boosté l'informatique.
- le transistor : découverte théorique ?)
- la micro-puce : pas réellement une avancée théorique, même si ça fait certainement appel à des notions de physique pointues
- LISP : oui, à la rigueur, la première implantation du lambda-calcul
- FORTRAN : non, clairement
- MULTICS : 1000 fois non
- UNIX : là encore, non, même si c'est sorti de labos de recherche
- C : idem
- l'augmentation incessante de la puissance des processeurs : non, encore
- PROLOG : une belle histoire montrant qu'il faut savoir combiner théorie et pratique
Par contre, il est vrai que du côté de la preuve formelle et du cryptage les choses sont autres, mais je considère qu'ils pèsent à eux seuls bien peu vis-à-vis de ceux cités ci-dessus.
When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.
À ma connaissance, les monades telles qu'on les connait aujourd'hui ont fait leur apparition en info à la fin des années 80, dans les travaux de E. Moggi (entre autres http://citeseer.ist.psu.edu/417447.html, et surtout Notions of computations and monads).Je vois ce que tu veux dire, mais je me demande très honnêtement ce qui est venu en premier dans le cas de Haskell : l'implantation des monades dans le langage ou sa justification ?
Il emploie les monades au niveau de la sémantique du langage de programmation, mais il y a déjà l'idée de la modularité (l'exemple 1, page 3 du deuxième article le montre bien).
Les articles de Wadler qui reprennent ce travail (et qui l'ont popularisé chez les Haskelliens) mettent l'accent sur les fonctionnalités "impératives" apportées, mais gardent l'idée de la modularité (par exemple il présente aussi les monades de Continuation Passing Style, qui sont tout à fait différentes).
Par ailleurs, pour ce qui est de ton "OCaml doit mourrir", je ne suis pas de ton avis. Je fais le même constat que toi : la communauté Haskell est très vivante, la communauté OCaml peine à se constituer.
Mais ça ne veut pas dire que les deux langages n'ont pas leur place : leurs différences les enrichissent, et OCaml a des possibiltés que Haskell n'a pas (contrairement à ce que disent certain qui voudraient nous faire croire que OCaml n'est qu'un brouillon de Haskell).
En particulier il me paraît dangereux de tout miser sur l'évaluation paresseuse, et tout à fait profitable de pouvoir utiliser deux langages, l'un principalement paresseux et l'autre principalement strict.
Je pense donc maintenant qu'il faut constituer une communauté OCaml, ou plutôt rendre celle qui existe actuellement plus visible. Ce n'est pas facile, mais ce n'est pas impossible non plus, on a déjà les ingrédients en place, et les autres y sont bien arrivés.
C'est essentiellement pour cette raison que j'en parle comme je le fais. Je suis absolument d'accord sur le fait qu'il s'agit d'une façon élégante de faire de la modularité et qu'il s'agit là de leur vraie nature, car, en fait, la seule monade en Haskell exploitant l'aspect séquencement/strictness est la monade IO, les autres étant là pour introduire de la modularité. Tout ça, je le sais, et je suis d'accord avec toi.Envoyé par bluestorm
Je voulais seulement dire qu'OCaml était en phase de quasi-végétation. Il lui faudrait un peu de sang neuf et, on est d'accord, une communauté qui ne se limite pas à Ulm - X - MP*, mais qui soit un peu plus ouverte et modeste.Envoyé par bluestorm
Dans le fond, je continue cependant de penser qu'OCaml, bien que très différent, est supérieur.
When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.
Donc tous les théoriciens qui ont fait les fondements de l'informatique sont des crétins ? Church, Curry, Turing ? Les modèles de calcul ne sont pas théoriques selon toi ? Tu penses vraiment que le transistor a apparu sans qu'il n'y ait de théorie avant ? Est-ce qu'on aurait remplacé IOCWT par un gamin qui ne connait pas ce qu'est la science ?
Tu déformes mes propos.
Je n'ai jamais dit que la théorie ne servait à rien.
J'ai, par contre, affirmé que la théorie sans pratique, elle, ne servait à rien. C'est pas la même chose.
When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
connaissant IOWT IRL, je pense savoir ce qu'il souhaitait dire, à savoir :
- la théorie sans pratique n'est pas applicable à l'informatique ;
- trop de personnes font des maths ou de la logique et non de l'informatique, ont un niveau quasi-nul en programmation (quelque soit le langage), et prétendent être chercheurs en informatique ;
- en informatique, beaucoup d'avancées techniques ont été faites par ce que certains appeleraient de manière condescendante des bricoleurs ; mais cela souligne qu'une bonne intuition d'un problème et de l'huile de coude peut faire avancer bien plus qu'une centaine de papiers qui tournent autour d'un même problème sans réellement chercher à faire autre chose que d'en parler
Oui, c'est ça, mais je pensais aussi au domaine des mathématiques appliquées.
When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.
Je suis relativement en accord avec les autres points (en soulignant quand même que dans AUCUN domaine la théorie sans la pratique ne sert à quoi que ce soit y compris en math).
Par contre là... j'aimerais voir des réels exemples de ce qui a fait avancer vraiment l'informatique et qui vient d'un gars uniquement armé d'une bonne intuition sans aucun support théorique quelconque ? Des exemples ?
Je ne sais pas ce que tu appelles "théorie" et "pratique" en maths. Ça dépend sûrement du domaine (parce que "maths" est assez large) mais, en utilisant le sens courant de ces mots (pratique = concret, matériel, tangible; théorique = abstrait, virtuel, éloigné du monde réel), je ne suis pas d'accord, principalement parce qu'alors en maths, la plupart des choses sont théoriques (en tout cas du point de vue des matheux), et restent tout aussi amusantes et intéressantes.en soulignant quand même que dans AUCUN domaine la théorie sans la pratique ne sert à quoi que ce soit y compris en math.
Si on répond (avec une once d'ironie) "C++", tu dis quoi ? Ou surtout "le C" ?Par contre là... j'aimerais voir des réels exemples de ce qui a fait avancer vraiment l'informatique et qui vient d'un gars uniquement armé d'une bonne intuition sans aucun support théorique quelconque ? Des exemples ?
Tu pourrais répondre "oui mais ces langages ne sont pas innovants, ils n'ont pas apporté de concepts nouveaux" ou quelque chose du genre. Attention à ne pas avoir un point de vue biaisé : si tu évalues les "avancées" de l'informatique d'un point de vue de Computer Scientist, alors forcément seules les avancées "théoriques" vont avoir de la valeur à tes yeux. Je pense que ce serait un problème de non-relativisme. Si tu veux des avancées de l'informatique faites par des praticiens, alors il faut savoir évaluer ce qu'est une "avancéee" d'un point de vue pratique aussi.
Dans cette optique, pense que le C, qui a permis la construction de multiples couches logicielles, est un bon exemple d'"avancée" "pratique". Ceci dit, le statut "uniquement pratique" de C et de Unix est à la rigueur contestable, puisqu'ils ont tout de même été créés dans un environnement "de recherche" (les laboratoires Bells), mais je pense (je ne suis pas un connaisseur par contre) qu'ils sont tout de même suffisamment "pratiques" (et surtout suffisamment peu "théorique", en regard de ce qu'on savait faire en théorie des langages de programmation à l'époque) pour remplir les critères. Sinon, on peut toujours choisir un autre grand projet, comme C++ (?!), ou Linux.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager