introduction - inriapeople.rennes.inria.fr/alan.schmitt/teaching/caml/introduction.pdf · pourquoi...

24
Introduction Alan Schmitt 3 février 2016

Upload: others

Post on 24-Sep-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

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

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

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/

[email protected]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 22: Introduction - Inriapeople.rennes.inria.fr/Alan.Schmitt/teaching/caml/introduction.pdf · Pourquoi s’intéresser à la programmation fonctionnelle (1) Approche favorisant des programmes

Apprendre OCaml

http://try.ocamlpro.com/

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

Apprendre OCaml

https://github.com/andrewray/iocamlhttp://gazagnaire.org/fuconf14/