Diaporama n°10¶

Le langage OCaml - Introduction¶

I. Historique¶

Langages impératifs : assembleurs (1950), FORTRAN (1957), C (1972)

(langages impératifs orientés objets : C++, Java, C#, Python)

"instructions" :¶

  • on fait faire des choses à l'ordinateur, qui produisent des effets (modification de la mémoire, affichage à l'écran ...)

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)

Historique¶

"Opposition" fondamentale qui remonte aux années 1930¶

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)

NB:¶

Au final, les deux approches permettent de faire les mêmes choses, différemment (influence du langage utilisé)¶

  • on peut faire de la programmation fonctionnelle en C (HP), et de la programmation impérative en OCaml (au programme)

image.png

Pour caricaturer (quoique ...) :¶

Alan Turing :¶

  • père spirituel des ingénieurs informatique, langage de prédilection impératif.

  • objectif : applications dans le monde réel, avec un soucis de performance, rétro-compatibilité

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¶

image.png

Categorical Abstract Machine Language -> Caml -> Camel -> Chameau

Objective Caml (orienté objet)

II.1 Principales caractéristiques du langage¶

Ocaml, un langage fonctionnel :¶

  • une fonction est une valeur comme une autre
    • elle a un type, on peut la passer en paramètre à une fonction, une fonction peut renvoyer calculer une nouvelle fonction.
  • 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

Principales caractéristiques du langage¶

OCaml a un système de types puissant:¶

Système de typage très poussé qui permet d'éviter de nombreuses erreurs à l'exécution.

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 ...

Principales caractéristiques du langage¶

OCaml permet de définir et manipuler de nouveau types facilement :¶

  • types construits et constructeurs associés

  • motifs et filtrage par motif (pattern-matching)

... encore quelques jours de patience ...

II.2 Autres caractéristiques du langage OCaml¶

OCaml a tout de même des aspects impératifs :¶

Parce que c'est parfois difficile de faire sans ...

  • variables modifiables (appelées références)
  • boucles for, while
  • tableaux modifiables
  • fonctions d'entrée / sortie

Autres caractéristiques du langage OCaml¶

OCaml est compilable :¶

Grâce au système de type performant, le compilateur peut générer du code machine relativement efficace

NB : OCaml est moins proche de la machine que le C. Nous nous contenterons d'un modèle d'exécution assez haut-niveau

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 !

Autres caractéristiques du langage OCaml¶

(HP) possibilité de Programmation Orientée Objet¶

(HP) un système de combinaison de modules très puissant (foncteurs)¶

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)

image.png

Les outils du programmeur¶

site web : https://try.ocamlpro.com (NB : même principe que replit.com)

image.png

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)

image.png

pour évaluer chaque phrase OCaml et afficher les valeurs obtenues

ocaml < fichier.ml :

image-3.png

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

Les outils du programmeur¶

environnement de développement intégré (IDE).

Par exemple : VSCodium

image-3.png