Langages fonctionnels :
- LISP (John McCarthy 1958) : LISt Processing
- Scheme --> Haskell
- ML (Robert Milner - 1973) : Meta Language --> Caml, Sml, ...
- En France (INRIA) : Caml (1985) puis Caml Light puis Objective Caml, puis OCaml (1996)
"expressions" :¶
- on calcule des valeurs. Un programme réalise un calcul
NB : ne pas confondre¶
ML qui désigne une famille de langages fonctionnels
ML : machine learning, sous-partie du domaine de l'intelligence artificielle (IA)
Alan Turing, ... : on peut calculer tout ce qui est calculable avec une machine et quelques instructions (machine de Turing, ancètre conceptuel de l'ordinateur actuel)
Alonzo Church, logicien, mathématicien : on peut calculer tout ce qui est calculable avec des fonctions récursives (lambda calcul, formalisme dans lequel on ne manipule que des fonctions)
- on peut faire de la programmation fonctionnelle en C (HP), et de la programmation impérative en OCaml (au programme)
Alonzo Church :¶
père spirituel des théoriciens informatique, langage de prédilection fonctionnel.
objectif : mise en place de nouvelles façon de penser, pureté du langage
Les deux mondes sont longtemps restés séparés. Les langages de programmation récents commencent à profiter "des deux mondes"¶
NB : autres paradigmes de programmation¶
- logique (Prolog ...)
- concurrentiel, parallèle (Erlang ...)
- synchrone, temps-réel (Lustre ...)
- quantique (Q# ...)
- ...
II. Le langage OCaml¶
Categorical Abstract Machine Language -> Caml -> Camel -> Chameau
Objective Caml (orienté objet)
- une fonction a pour but de réaliser un calcul (~ fonction mathématique)
- NB: en C, une fonction réalise souvent une modification de l'état de la mémoire
- on utilise (de préférence) des objets non-modifiables (immuable ou non-mutable)
- NB: modifier un objet serait une instruction (beurk !)
- usage intensif de la récursivité.
- NB: débordement de la pile d'appel ? optimisation OCaml : les appels récursifs terminaux (le calcul se termine par l'appel récursif) ne font pas augmenter la taille de la pile d'appel
- les listes chaînées (structure de donnée récursive) sont fréquemment utilisées
- on peut les parcourir simplement avec une fonction récursive
Caractéristiques du sytème de type OCaml :¶
- typage implicite : le programmeur n'a pas à spécifier les types des variables. Le système se charge de les déduire (inférence des types)
- typage statique : le typage est fait avant l'exécution
- typage fort : une erreur de typage est considérée comme fatale. Pas de tentative de conversion automatique comme en C
- typage polymorphe : les types en OCaml sont polymorphes :
il n'y a qu'une seule définition du type liste !
qui permet de manipuler des listes d'entiers, des listes de float, des listes de listes ...
- variables modifiables (appelées références)
- boucles
for
,while
- tableaux modifiables
- fonctions d'entrée / sortie
Autres caractéristiques du langage OCaml¶
Gestion mémoire automatique :¶
La plupart des objets du langage sont constuits de manière automatique dans le tas.
Le programmeur n'a pas à y faire spécialement attention ...
les objets qui ne sont plus utilisés sont détruits automatiquement
L'espace mémoire est recyclé par le ramasse-miette (garbage-collector)
NB : comme en Python !
II.3 Organisation générale du langage :¶
NB : même organisation que les autres langages
Une partie directement utilisable par le programmeur :
- coeur du langage + core library + std library
Des modules fournis directement avec l'installation d'OCaml
- modules de la std library (
List
,Array
,Queue
,Stack
...)
Des modules tiers à installer en supplément
- fournis par la communauté des programmeurs
La documentation officielle :¶
https://ocaml.org/manual/index.html¶
III. Les outils du programmeur¶
REPL : Read Eval Print Loop
NB : même principe que la console Python : affiche la valeur calculée
Commande Linux ocaml
(appelé toplevel) ou utop
(version améliorée)
Les outils du programmeur¶
éditeur de texte + "compilation et exécution" en ligne de commande
ocaml fichier.ml
: "compilation et exécution" du fichier
NB : la valeur produite n'est pas affichée. On utilise les fonctions d'affichage. (Comme en Python)
pour évaluer chaque phrase OCaml et afficher les valeurs obtenues
ocaml < fichier.ml
:
Les outils du programmeur¶
éditeur de texte + compilation puis exécution en ligne de commande
ocamlc -o progr fichier.ml
puis ./progr
NB : progr
est script exécutable : "bytecode", pas tout à fait du code machine
ocamlopt -o progr fichier.ml
puis ./progr
NB : dans ce cas, progr
est fichier exécutable en code machine