Introduction

publicité
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
Téléchargement