Introduction Alan Schmitt 3 février 2016 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] Pourquoi apprendre OCaml ? Objectifs de ce cours ▶ Comprendre des concepts fondamentaux de la programmation (types, récursion) ▶ Apprendre à exploiter les atouts de la programmation fonctionnelle Pourquoi ? ▶ Pourquoi s’intéresser à ce style de programmation ? ▶ Peut-on résoudre les mêmes problèmes qu’en C ou Java ? 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 langages fonctionnels sont le résultat de nombreuses années de recherche. Pourquoi s’intéresser à la programmation fonctionnelle (2) Langages fonctionnels proches des mathématiques. Ce sont des langages 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). Pourquoi s’intéresser à la programmation fonctionnelle (3) De nombreux langages intègrent des aspects fonctionnels: ▶ Java ▶ Objective C ▶ JavaScript ▶ Swift Exemple: gestion de la mémoire Allouer une liste en C: struct struct if (x1 x1->hd return list * x1 = malloc(sizeof(struct list)); list * x2 = malloc(sizeof(struct list)); == NULL || x2 == NULL) return NULL; = 1; x1->tl = x2; x2->hd = 2; x2->tl = NULL; x1; Allouer une liste en OCaml 1 :: 2 :: [] La gestion automatique de la mémoire a un coût à l’exécution. La gestion manuelle de la mémoire a un coût à la programmation … et à l’exécution (bug: plantage, fuite mémoire). 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. Histoire de OCaml Préhistoire (1973 - 1983) ML (Meta-Language) Robin Milner Assistant de Preuve LCF SML (1983 - présent) Standard ML Standardisation par Robin Milner et Dave McQuenn. Caml (1987 - 1992) ▶ Compilé vers VM Lisp ▶ Gestion mémoire VM ▶ Pourquoi pas SML ? Coq. Ascánder Suárez Pierre Weis Michel Mauny Caml Light (1990 - 2002) ▶ interpréteur de code à octets en C ▶ Gestionnaire mémoire efficace Xavier Leroy Damien Doligez Caml Special Light (1995 - 1996) ▶ Compilateur vers code natif et système de modules Xavier Leroy 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 OCaml aujourd’hui Influence Haskell F# Scala Swift Consortium Caml ▶ CEA ▶ LexiFi ▶ Citrix ▶ Microsoft ▶ Dassault Aviation ▶ MLstate ▶ Dassault Systèmes ▶ Mylife.com ▶ Esterel Technologies ▶ OCamlPro ▶ Jane Street Capital ▶ SimCorp 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 to find them? Small number of great FP hackers, but fewer great jobs in industry. OCaml is a signal of quality, in both 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) Apprendre OCaml http://caml.inria.fr/about/books.fr.html http://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/ Apprendre OCaml http://try.ocamlpro.com/ Apprendre OCaml https://github.com/andrewray/iocaml http://gazagnaire.org/fuconf14/ Apprendre OCaml https://www.france-universite-numerique-mooc.fr/ courses/parisdiderot/56002/session01/about