Introduction - Inriapeople.rennes.inria.fr/Alan.Schmitt/teaching/caml/introduction.pdf · Pourquoi...
Transcript of Introduction - Inriapeople.rennes.inria.fr/Alan.Schmitt/teaching/caml/introduction.pdf · Pourquoi...
![Page 1: Introduction - Inriapeople.rennes.inria.fr/Alan.Schmitt/teaching/caml/introduction.pdf · Pourquoi s’intéresser à la programmation fonctionnelle (1) Approche favorisant des programmes](https://reader034.fdocuments.net/reader034/viewer/2022051916/60085f2b427c0665064133fd/html5/thumbnails/1.jpg)
Introduction
Alan Schmitt
3 février 2016
![Page 2: Introduction - Inriapeople.rennes.inria.fr/Alan.Schmitt/teaching/caml/introduction.pdf · Pourquoi s’intéresser à la programmation fonctionnelle (1) Approche favorisant des programmes](https://reader034.fdocuments.net/reader034/viewer/2022051916/60085f2b427c0665064133fd/html5/thumbnails/2.jpg)
Informations Pratiques
▶ Équipe pédagogique▶ Alan Schmitt (cours, TP)
▶ 4 cours▶ 9 TP notés▶ pas d’examen, mais un devoir maison▶ http://www.irisa.fr/celtique/aschmitt/teaching/
![Page 3: Introduction - Inriapeople.rennes.inria.fr/Alan.Schmitt/teaching/caml/introduction.pdf · Pourquoi s’intéresser à la programmation fonctionnelle (1) Approche favorisant des programmes](https://reader034.fdocuments.net/reader034/viewer/2022051916/60085f2b427c0665064133fd/html5/thumbnails/3.jpg)
Pourquoi apprendre OCaml ?
![Page 4: Introduction - Inriapeople.rennes.inria.fr/Alan.Schmitt/teaching/caml/introduction.pdf · Pourquoi s’intéresser à la programmation fonctionnelle (1) Approche favorisant des programmes](https://reader034.fdocuments.net/reader034/viewer/2022051916/60085f2b427c0665064133fd/html5/thumbnails/4.jpg)
Objectifs de ce cours
▶ Comprendre des concepts fondamentaux de la programmation(types, récursion)
▶ Apprendre à exploiter les atouts de la programmationfonctionnelle
Pourquoi ?▶ Pourquoi s’intéresser à ce style de programmation ?▶ Peut-on résoudre les mêmes problèmes qu’en C ou Java ?
![Page 5: Introduction - Inriapeople.rennes.inria.fr/Alan.Schmitt/teaching/caml/introduction.pdf · Pourquoi s’intéresser à la programmation fonctionnelle (1) Approche favorisant des programmes](https://reader034.fdocuments.net/reader034/viewer/2022051916/60085f2b427c0665064133fd/html5/thumbnails/5.jpg)
Pourquoi s’intéresser à la programmation fonctionnelle (1)
Approche favorisant des programmes▶ corrects;▶ lisibles;▶ réutilisables ou modifiables.
Un langage de programmation est un outil pointu. Les langagesfonctionnels sont le résultat de nombreuses années de recherche.
![Page 6: Introduction - Inriapeople.rennes.inria.fr/Alan.Schmitt/teaching/caml/introduction.pdf · Pourquoi s’intéresser à la programmation fonctionnelle (1) Approche favorisant des programmes](https://reader034.fdocuments.net/reader034/viewer/2022051916/60085f2b427c0665064133fd/html5/thumbnails/6.jpg)
Pourquoi s’intéresser à la programmation fonctionnelle (2)
Langages fonctionnels proches des mathématiques. Ce sont deslangages de haut niveau:
▶ permettant de s’abstraire de l’architecture des machine;▶ donnant des programmes clairs et concis;▶ favorisant un développement rapide;▶ fournissant des outils pour une meilleure sûreté (types).
![Page 7: Introduction - Inriapeople.rennes.inria.fr/Alan.Schmitt/teaching/caml/introduction.pdf · Pourquoi s’intéresser à la programmation fonctionnelle (1) Approche favorisant des programmes](https://reader034.fdocuments.net/reader034/viewer/2022051916/60085f2b427c0665064133fd/html5/thumbnails/7.jpg)
Pourquoi s’intéresser à la programmation fonctionnelle (3)
De nombreux langages intègrent des aspects fonctionnels:▶ Java▶ Objective C▶ JavaScript▶ Swift
![Page 8: Introduction - Inriapeople.rennes.inria.fr/Alan.Schmitt/teaching/caml/introduction.pdf · Pourquoi s’intéresser à la programmation fonctionnelle (1) Approche favorisant des programmes](https://reader034.fdocuments.net/reader034/viewer/2022051916/60085f2b427c0665064133fd/html5/thumbnails/8.jpg)
Exemple: gestion de la mémoire
Allouer une liste en C:struct list * x1 = malloc(sizeof(struct list));struct list * x2 = malloc(sizeof(struct list));if (x1 == NULL || x2 == NULL) return NULL;x1->hd = 1; x1->tl = x2; x2->hd = 2; x2->tl = NULL;return x1;
Allouer une liste en OCaml1 :: 2 :: []
La gestion automatique de la mémoire a un coût à l’exécution. Lagestion manuelle de la mémoire a un coût à la programmation … età l’exécution (bug: plantage, fuite mémoire).
![Page 9: Introduction - Inriapeople.rennes.inria.fr/Alan.Schmitt/teaching/caml/introduction.pdf · Pourquoi s’intéresser à la programmation fonctionnelle (1) Approche favorisant des programmes](https://reader034.fdocuments.net/reader034/viewer/2022051916/60085f2b427c0665064133fd/html5/thumbnails/9.jpg)
Peut-on tout programmer en OCaml?
Oui, répond la théorique de la calculabilité.Machine du Turing modèle abstrait du fonctionnement d’un
ordinateur (Turing, 2936)λ-calcul langage de programmation fonctionnel théorique
(Church, 1930)Ces modèles sont équivalents.
![Page 10: Introduction - Inriapeople.rennes.inria.fr/Alan.Schmitt/teaching/caml/introduction.pdf · Pourquoi s’intéresser à la programmation fonctionnelle (1) Approche favorisant des programmes](https://reader034.fdocuments.net/reader034/viewer/2022051916/60085f2b427c0665064133fd/html5/thumbnails/10.jpg)
Histoire de OCaml
![Page 11: Introduction - Inriapeople.rennes.inria.fr/Alan.Schmitt/teaching/caml/introduction.pdf · Pourquoi s’intéresser à la programmation fonctionnelle (1) Approche favorisant des programmes](https://reader034.fdocuments.net/reader034/viewer/2022051916/60085f2b427c0665064133fd/html5/thumbnails/11.jpg)
Préhistoire (1973 - 1983)
ML (Meta-Language)Robin MilnerAssistant de Preuve LCF
![Page 12: Introduction - Inriapeople.rennes.inria.fr/Alan.Schmitt/teaching/caml/introduction.pdf · Pourquoi s’intéresser à la programmation fonctionnelle (1) Approche favorisant des programmes](https://reader034.fdocuments.net/reader034/viewer/2022051916/60085f2b427c0665064133fd/html5/thumbnails/12.jpg)
SML (1983 - présent)
Standard MLStandardisation par Robin Milneret Dave McQuenn.
![Page 13: Introduction - Inriapeople.rennes.inria.fr/Alan.Schmitt/teaching/caml/introduction.pdf · Pourquoi s’intéresser à la programmation fonctionnelle (1) Approche favorisant des programmes](https://reader034.fdocuments.net/reader034/viewer/2022051916/60085f2b427c0665064133fd/html5/thumbnails/13.jpg)
Caml (1987 - 1992)
▶ Compilé vers VM Lisp▶ Gestion mémoire VM▶ Pourquoi pas SML ? Coq.
Ascánder Suárez Pierre Weis Michel Mauny
![Page 14: Introduction - Inriapeople.rennes.inria.fr/Alan.Schmitt/teaching/caml/introduction.pdf · Pourquoi s’intéresser à la programmation fonctionnelle (1) Approche favorisant des programmes](https://reader034.fdocuments.net/reader034/viewer/2022051916/60085f2b427c0665064133fd/html5/thumbnails/14.jpg)
Caml Light (1990 - 2002)
▶ interpréteur de code à octets en C▶ Gestionnaire mémoire efficace
Xavier Leroy Damien Doligez
![Page 15: Introduction - Inriapeople.rennes.inria.fr/Alan.Schmitt/teaching/caml/introduction.pdf · Pourquoi s’intéresser à la programmation fonctionnelle (1) Approche favorisant des programmes](https://reader034.fdocuments.net/reader034/viewer/2022051916/60085f2b427c0665064133fd/html5/thumbnails/15.jpg)
Caml Special Light (1995 - 1996)
▶ Compilateur vers code natif et système de modules
Xavier Leroy
![Page 16: Introduction - Inriapeople.rennes.inria.fr/Alan.Schmitt/teaching/caml/introduction.pdf · Pourquoi s’intéresser à la programmation fonctionnelle (1) Approche favorisant des programmes](https://reader034.fdocuments.net/reader034/viewer/2022051916/60085f2b427c0665064133fd/html5/thumbnails/16.jpg)
OCaml (1996 – présent)
▶ objets et classes▶ comme les variants polymorphes▶ version courante: OCaml 4.02.3, sortie en juillet 2015
Didier Rémy Jérôme Vouillon Jacques Garrigue
![Page 17: Introduction - Inriapeople.rennes.inria.fr/Alan.Schmitt/teaching/caml/introduction.pdf · Pourquoi s’intéresser à la programmation fonctionnelle (1) Approche favorisant des programmes](https://reader034.fdocuments.net/reader034/viewer/2022051916/60085f2b427c0665064133fd/html5/thumbnails/17.jpg)
OCaml aujourd’hui
![Page 18: Introduction - Inriapeople.rennes.inria.fr/Alan.Schmitt/teaching/caml/introduction.pdf · Pourquoi s’intéresser à la programmation fonctionnelle (1) Approche favorisant des programmes](https://reader034.fdocuments.net/reader034/viewer/2022051916/60085f2b427c0665064133fd/html5/thumbnails/18.jpg)
Influence
Haskell Scala
F# Swift
![Page 19: Introduction - Inriapeople.rennes.inria.fr/Alan.Schmitt/teaching/caml/introduction.pdf · Pourquoi s’intéresser à la programmation fonctionnelle (1) Approche favorisant des programmes](https://reader034.fdocuments.net/reader034/viewer/2022051916/60085f2b427c0665064133fd/html5/thumbnails/19.jpg)
Consortium Caml
▶ CEA▶ Citrix▶ Dassault Aviation▶ Dassault Systèmes▶ Esterel Technologies▶ Jane Street Capital
▶ LexiFi▶ Microsoft▶ MLstate▶ Mylife.com▶ OCamlPro▶ SimCorp
![Page 20: Introduction - Inriapeople.rennes.inria.fr/Alan.Schmitt/teaching/caml/introduction.pdf · Pourquoi s’intéresser à la programmation fonctionnelle (1) Approche favorisant des programmes](https://reader034.fdocuments.net/reader034/viewer/2022051916/60085f2b427c0665064133fd/html5/thumbnails/20.jpg)
Grands succès▶ Unison (synchronisation de fichiers)▶ MLdonkey (client P2P)▶ Lexify (langage formel pour la finance)▶ Jane Street Capital (finance: arbitrage)
Lots of great Java programmers out there, but how tofind them? Small number of great FP hackers, but fewergreat jobs in industry. OCaml is a signal of quality, inboth directions.
▶ Ensemble (système de communication distribuée)▶ Coq (Assistant de preuve). Théorème des 4 couleurs …▶ Astrée (Analyse statique de C). Utilisé pour valider des
systèmes de vol pour A340 ou A380▶ SLAM (vérification statique de drivers pour Windows)▶ FFTW (génération automatique de transformées de Fourier)
![Page 21: Introduction - Inriapeople.rennes.inria.fr/Alan.Schmitt/teaching/caml/introduction.pdf · Pourquoi s’intéresser à la programmation fonctionnelle (1) Approche favorisant des programmes](https://reader034.fdocuments.net/reader034/viewer/2022051916/60085f2b427c0665064133fd/html5/thumbnails/21.jpg)
Apprendre OCaml
http://caml.inria.fr/about/books.fr.htmlhttp://ocaml.org
http://caml.inria.fr/pub/distrib/books/llc.pdf
http://www.pps.jussieu.fr/Livres/ora/DA-OCAML/
http://programmer-avec-ocaml.lri.fr/
![Page 23: Introduction - Inriapeople.rennes.inria.fr/Alan.Schmitt/teaching/caml/introduction.pdf · Pourquoi s’intéresser à la programmation fonctionnelle (1) Approche favorisant des programmes](https://reader034.fdocuments.net/reader034/viewer/2022051916/60085f2b427c0665064133fd/html5/thumbnails/23.jpg)
Apprendre OCaml
https://github.com/andrewray/iocamlhttp://gazagnaire.org/fuconf14/
![Page 24: Introduction - Inriapeople.rennes.inria.fr/Alan.Schmitt/teaching/caml/introduction.pdf · Pourquoi s’intéresser à la programmation fonctionnelle (1) Approche favorisant des programmes](https://reader034.fdocuments.net/reader034/viewer/2022051916/60085f2b427c0665064133fd/html5/thumbnails/24.jpg)
Apprendre OCaml
https://www.france-universite-numerique-mooc.fr/courses/parisdiderot/56002/session01/about