Contenu | Rechercher | Menus

Caml Light

Caml Light est un langage fonctionnel développé par l'INRIA jusqu'en 2002. C'est le principal langage enseigné en classe préparatoire, aux côtés de Pascal et de son successeur Objective Caml.

Installation

La version disponible sur le site de l'INRIA ne fonctionne pas correctement sur Linux : elle ne charge pas la librairie "graphics". Grâce au travail de François Boisson ( fran.b) on peut enfin l'utiliser !

Les paquets existent en version 0.77

Dapper Hardy Intrepid Jaunty
32 bits .deb .deb .deb .deb
64 bits - .deb .deb .deb

en version 0.80 (pour Hardy et Intrepid) et 0.81 ou 0.81-1 pour les suivants jusqu'à Oneiric et 0.82-3 jusqu'à Raring.

Hardy Intrepid Jaunty Karmic Lucid Maverick Natty Oneiric Precise Quantal Raring
32 bits .deb .deb .deb .deb .deb .deb .deb .deb .deb .deb .deb
64 bits .deb .deb .deb .deb .deb .deb .deb .deb .deb .deb .deb

À partir de Saucy, la version est la 0.82-5 avec l'utilisation du paquet camltuareg-mode (dérivé du mode tuareg de ocaml):

Saucy Trusty Utopic
32 bits .deb .deb .deb
64 bits .deb .deb .deb

Ces paquets contiennent jusqu'à la version 0.82-3 le mode tuareg pour emacs. Il est préférable de l'installer avant : emacs. Comme précisé ci dessus, à partir de la version 0.82-4 (nécessaire pour trusty), le passage à emacs24 a rendu nécessaire le mode tuareg d'ocaml et donc l'installation de ce mode dans une version dédiée fournie par le paquet camltuareg-mode (pour donc camllight version 0.82-4 et plus)

La version 0.81 corrige entre autres un bug entraînant un segfault dans la librairie graphique pour la fonction text_size. La version 0.81-1 contient un mode «toplevel» caml_all permettant de disposer en mode interactif des librairies libunix, libnum et libgraph en même temps (sur une suggestion de Dang Nguyen Bac). Cette version est disponible sous Lucid, Maverick et suivantes. La version 0.82 corrige un bug important dans la gestion des pages mémoires qui entraînait l'impossibilité de profiter de la totalité de la mémoire (seuls 512K étaient utilisés). La version 0.82-1 améliore l'efficacité du code [j'ai mis cette version le 17 Avril 2013] et les versions 0.82-2 et 0.82-3 corrigent deux bugs dans la librairie big_num. [mis en place 6 Mai 2013]. La version 0.82-4 concerne l'utilisation d'un mode tuareg plus récent mis dans un paquet à part (à partir de trusty). La version 0.82-5 corrige un bug sur la fonction open_graph. (J'invite les personnes à me signaler les bugs, je peux éventuellement les corriger facilement)

Il peuvent aussi s'installer par apt-get via le dépôt non signé suivant :

deb http://boisson.homeip.net/ubuntu/ hardy divers

ou le dépôt signé :

deb http://boisson.homeip.net/depot/ quantal divers

NB : Remplacez "hardy" ou "quantal", par la version que vous utilisez.

La signature s'obtient par

gpg --keyserver pgpkeys.mit.edu --recv-key D78A5C23CEA8D8FF

qui récupère la clef sur le serveur de clef et :

gpg -a --export D78A5C23CEA8D8FF > /tmp/clef.txt

puis sous root :

apt-key add /tmp/clef.txt

Utilisation avec la librairie "graphics"

Pour lancer Caml avec la librairie "graphics", il faut lancer :

camllight camlgraph

ou bien plus simplement avec la version 0.81-1

camllight caml_all

qui charge toutes les extensions (camlnum, camlunix, camlgraph, etc)

Si vous avez fait des installations foireuses de CaML Light précédemment, il se peut que vous devez soit remplacer camllight par /usr/bin/camllight, soit simplement supprimer /usr/local/bin/camllight.

Une fois lancé, il faut commencer par :

load_object "graphics";;

et enfin le fameux :

#open "graphics";;

autre particularité pour lancer une fenêtre il faut désormais taper :

open_graph " 800x600";;

Surtout ne pas oublier l'espace après les premiers guillemets si vous utilisez une version inférieur à la 0.82-4 comprise, ce bug est corrigé pour la version 0.82-5. [ Remarque: Indiquez moi ce genre d'erreur, parfois elle se corrige simplement (F.Boisson) ]

Voilà vous êtes équipé pour programmer en CaML!!

Exemple

load_object "graphics";;
#open "graphics";;
open_graph " 100x50";;
moveto 15 20;;
draw_string "!!BONJOUR!!";;

Une commande pour compiler le fichier toto.ml

camlc -custom unix.zo graphics.zo  -lunix -lgraph -ccopt -L/usr/X11R6/lib -lX11 -o toto toto.ml

Editeur de texte avec caml light

On peut utiliser principalement deux éditeurs : Gedit et Emacs

Gedit

Gedit est un très bon éditeur de texte pour faire des programmes en CaML Light.

Coloration syntaxique

Pour colorier le texte vous pouvez aller dans Affichage > Mode de coloration > Source > Objective Caml

Si vous enregistrez votre fichier avec l'extension .ml et que vous l'ouvrez ensuite avec Gedit, la couleur sera automatiquement activée

Lancer vos programmes Caml dans un panneau inférieur

Le mode interactif ne marche pas avec Gedit, si vous voulez faire de l'interactif, utilisez emacs (voir plus bas).

  1. Commencez par activer le greffon via Édition > Préférences > onglet Greffons > Cocher Outils externes.
  2. Allez ensuite, dans Outils > Gérer les outils externes. Faites "Nouveau", et rentrez ce que vous voulez en nom, description et raccourci clavier. En "Entrée" (ou "Input"), choisissez "Document actuel". En "Sortie" (ou "Output"), choisissez "Afficher dans le panneau inférieur". En "Applicability", choisissez "Tous les documents".
  3. En commande, trois possibilités :
  • mettre
    #!/bin/sh
    
    cat "$GEDIT_CURRENT_DOCUMENT_PATH" | camllight

    (les guillemets permettent d'empêcher que d'éventuels espaces contenus dans le chemin de votre fichier actuel soient interprétés comme des séparateurs de commandes).

  • mettre
    tee fichier_de_sauvegarde.ml | camllight

    (par exemple tee /media/disque_externe/fichier.ml | camllight ou alors tee /home/utilisateur/fichier.ml). Une fois cela effectué, vous pouvez rentrer votre programme en caml light et pour l'exécuter, lancez la commande que vous avez créée précédemment.

La commande "tee" permet de faire une sauvegarde automatique à chaque exécution dans l'emplacement de sauvegarde, et camllight permet d'exécuter le programme
Si vous ne souhaitez pas enregistrer automatiquement à chaque exécution, rentrez en commande uniquement camllight

Au moins depuis la version 10.10 (peut-être avant ?), il suffit de rentrer en commande "camllight". Cela à l'avantage d'exécuter la version actuelle du programme affichée dans l'éditeur et non la dernière version enregistrée. Pour enregistrer automatiquement le programme à chaque exécution, il suffit alors de choisir l'option Enregistrer : Document actuel

  • mettre
    #!/bin/sh
    i=0
    for file in $(ls *$GEDIT_CURRENT_DOCUMENT_NAME-*.ml|sort -r)
    do
    let i=1+$i
    if [ $i -ge 15 ]
    then
    rm $file
    fi
    done
    
    echo $(echo $GEDIT_CURRENT_DOCUMENT_PATH);
    tee $(echo $GEDIT_CURRENT_DOCUMENT_NAME)-$(date +%s).ml | camllight;

Cette commande fonctionne sur le même principe que la précédente, sauf qu'elle enregistre chaque sauvegarde indépendamment des autres en rajoutant à chaque sauvegarde un numéro. Plus le numéro est grand, plus la sauvegarde est récente. Et en plus, cette commande supprime les sauvegardes trop anciennes (elle conserve uniquement 15 sauvegardes au maximum).

Emacs

Pour faire des programmes avec caml light, on peut aussi utiliser emacs. Le mode tuareg est installé en même temps que le paquet emacs dans une version adaptée à camllight. emacs appelle par défaut «camllight camlgraph» ou «camllight caml_all» lors de l'évaluation de la première phrase caml par Ctrl-c Ctrl-b ou Ctrl-x Ctrl-e. Le premier permet d'avoir la librairie graphique, caml_all permet d'avoir toutes les librairies usuelles accessibles.

Tuareg peut s'installer à part dans sa forme originale mais théoriquement c'est inutile si on utilise les paquets camllight sauf depuis trusty où le paquet camltuareg-mode est indispensable.

Pour installer tuareg, il y a trois méthodes :

  • Première méthode recommandée

Installer le paquet camltuareg-mode :

sudo apt-get install camltuareg-mode

Pour l'utiliser il suffit d'éditer un fichier avec l'extension .ml ou bien de faire Alt+x puis camltuareg-mode Emacs se mettra en mode caml. Il L'évaluation du buffer se fait par Ctrl-c, Ctrl-b. L'évaluation de la fonction/expression sur laquelle est le curseur se fait par Ctrl-x, Ctrl-e.

  • Deuxième méthode: utilisation du mode tuareg original.

Le paquet tuareg-mode est adapté à ocaml, mais peut s'utiliser avec camllight. Il suffit d'installer le paquet tuareg-mode. Lors de la première compilation il vous sera demandé en bas de la fenêtre de renseigner la librairie, entrez ocaml ou camllight selon le langage choisi. Votre instruction sera alors compilée.

  • Troisième méthode (obsolète)

On peut aussi installer caml-mode pour emacs.

Lancer emacs et faire Alt-x puis taper caml-mode Ensuite, faire la procédure caml dans l'éditeur de texte emacs et pour l'évaluer, faire Ctrl-c,Ctrl-e. Puis rentrer camllight dans la barre du bas d'emacs.

"caml-mode" est prévu pour programmer en ocaml, si vous l'utilisez pour camllight des bugs peuvent apparaître (en particulier, n'affiche pas les exceptions et se met à mouliner)

Vim

Le script bash vimcaml donne une interface du type wincaml avec vim. Il doit être exécuté dans un terminal et ouvre alors un deuxième terminal dans lequel se lance vim. Dans le premier se lance camllight. En utilisant la touche 'ù' (configurable) dans vim, le paragraphe (morceau de code démarquée par un saut de ligne de part et d'autre) sous le curseur est alors envoyé à camllight et exécuté. La touche 'è' (configurable aussi) exécute le fichier entier. Ce script nécessite que camllight - pour lequel les instructions sont données plus haut, gnome-terminal et vim soient installés.

Télécharger ici: http://mxpgrm.free.fr/vimcaml-26-02-2011.tar.gz.tar.gz

Pour le lancer, il faut d'abord le rendre exécutable en exécutant "chmod a+x vimcaml" dans un terminal ou en allant à l'onglet "permissions" de la fenêtre "propriétés" du fichier. Le script doit impérativement être exécuté dans un terminal. Si vous exécutez une boucle infinie, allez dans la fenêtre de camllight et entrez Ctrl + c ; vous pouvez alors continuer normalement.


http://caml.inria.fr/caml-light/release.fr.html

Problèmes connus

À l'installation

Il est possible, sous Quantal (12.10) au moins, que l'installation révèle un bug du gestionnaire de sources de logiciels, software-properties-gtk, dû probablement à un plantage du module utf-8.

Un post sur le forum existe sur le sujet : http://forum.ubuntu-fr.org/viewtopic.php?id=1102821&p=2

Rapportez-vous aux posts #29, #30 pour plus d'infos :)

PS : Je suis encore la discussion donc n'hésitez pas à y poser vos questions si nécessaire ;)



Le contenu de ce wiki est sous licence : CC BY-SA v3.0