La lecture à portée de main
Description
Informations
Publié par | Issi |
Nombre de lectures | 37 |
Langue | Français |
Extrait
Langage de Programmation 2 (LP2)
Langage de Programmation 2 (LP2)
RICM3
Cours 4
Modules, foncteurs, Input Output
Pascal Lafourcade
Polytech
2009 - 2010
1 / 73Langage de Programmation 2 (LP2)
La dernière fois
◮ Type Produit
◮ Évaluation et valeurs
◮ Type Nommé
◮ Compléments
2 / 73Langage de Programmation 2 (LP2)
Plan
Compilation
Modules
Généralités
Compilation séparée
Exemple de module
Foncteurs
Input OutPut
Conclusion
3 / 73Langage de Programmation 2 (LP2)
Compilation
Compilation simple
Ocaml
produit du bytecode :
◮ indépendant de la machine
◮ interprété par une machine virtuelle
Ocaml
produit du code natif (machine dépendant).
5 / 73Langage de Programmation 2 (LP2)
Compilation
Hello world*
Les doubles point-virgules sont facultatifs dans un code source.
file.ml -> file.cmi file.cmo output
let x=42
let main =
print_string "Hello World! \n";
print_int(x);
print_newline()
$ ocamlc file.ml -o output
$ ./output
Hello World!
42
$ 7 / 73
a.outLangage de Programmation 2 (LP2)
Compilation
Compilation vers du bytecode
Le code source ne doit pas contenir de directives du toplevel.
#!/usr/bin/ocamlrun
Code source réparti dans plusieur fichiers (main.ml, types.ml,
fifo.ml ...) appelés unité ou module.
9 / 73Langage de Programmation 2 (LP2)
Modules
Généralités
Principes généraux
Objectifs de la modularité
◮ fourniture des fonctionnalités : indépendance entre fournisseur
et utilisateur
◮ rôle pivot de l’interface = joue le rôle de contrat
◮ l’utilisateur n’a pas à connaître les détails de la réalisation
◮ le fournisseur se concentre sur les fonctions promises
◮ abstraction des données
◮ garantie des invariants : il suffit que chaque fonction de
l’interface respecte ces invariants
11 / 73Langage de Programmation 2 (LP2)
Modules
Généralités
Modularité en Ocaml
◮ interface = signature S
◮ réalisation = module M : S
◮ sous-modules : notation pointée M1.M2.M3
(idem signatures)
Accés par notation pointée : List.hd
12 / 73Langage de Programmation 2 (LP2)
Modules
Généralités
Modules et fichiers
◮ cohérence module-fichier :
◮ fichier.ml⇒ module,
◮ fichier.mli⇒ signature,
◮ possibilité de déclarer des (sous-)modules et des
(sous-)signatures dans un fichier
◮ correspondance fichier.ml⇒ module Fichier
◮ correspondance fichier.mli⇒ signature Fichier
Attention aux majuscules!
Les noms de modules, d’exceptions et de constructeurs
commencent par des majuscules.
13 / 73Langage de Programmation 2 (LP2)
Modules
Généralités
Interface : .mli
.mli donne .cmi
file.ml file.mli
type euros = int
type carte type carte
= number of int | color → = number of int | color
let p1 = fun (x,y) -> x → val p1 : int -> ’b -> int
exception → exception
Interface
◮ moins générale : val p1 : ’a -> ’b -> ’a
◮ omission de valeurs et de type (type <abstr> et masquage
pour encapsulation)
Ne donne pas d’informations sur le TAD
Astuce : ocamlc -i file.ml donne une version du .mli 14 / 73