OCamlDémarrer avec OCaml


Remarques

Cette section fournit une vue d'ensemble de ce qu'est ocaml et pourquoi un développeur peut vouloir l'utiliser.

Il devrait également mentionner tous les sujets importants dans ocaml, et établir un lien avec les sujets connexes. La documentation de ocaml étant nouvelle, vous devrez peut-être créer des versions initiales de ces rubriques connexes.

Installation sous Windows (native)

Prémisse

Ces instructions montrent une procédure pour installer des binaires OCaml natifs dans Windows. Si votre système d'exploitation est Windows 10 (Insider Preview) build 14316 ou ultérieur, vous pouvez également installer OCaml via Bash sur Ubuntu sous Windows . Dans ce cas, suivez les instructions pour installer OCaml sur Ubuntu.

Installez OCaml et Opam

Télécharger la distribution officielle d'OCaml . Il contient à la fois les compilateurs OCaml et le gestionnaire de paquets Opam. Supposons que vous ayez installé le logiciel dans C:/OCaml . Pour être sûr d'avoir installé OCaml, ouvrez cmd.exe et tapez ocaml .

Si vous voyez que le message 'ocaml' is not recognized as an internal or external command, operable program or batch file vous devez ajouter C:/OCaml/bin à votre chemin (variable d'environnement).

Ajouter des binaires OCaml au chemin

dans Control Panel > System and Security > System > Advanced system settings (on the left) > Environment Variables , puis sélectionnez Path dans l'onglet System Variable , puis Edit .

Ajouter C:/OCaml/bin; à la liste.

Installez Cygwin

Sans Cygwin, vous ne pouvez pas utiliser Opam. En fait, si vous essayez d'ouvrir Opam en tapant opam dans cmd.exe le message suivant apparaît: Fatal error: exception Unix.Unix_error(20, "create_process", "cygcheck") .

Téléchargez Cygwin et démarrez le programme d'installation. Assurez-vous de vérifier les paquets suivants:

  • automake
  • diffutils
  • libreadline
  • faire
  • m4
  • mingw64-x86_64-gcc-core
  • mingw64-x86_64-gmp
  • mingw64-x86_64-openssl
  • mingw64-x86_64-pkg-config
  • mingw64-x86_64-sqlite3
  • pièce
  • rlwrap
  • décompresser
  • wget

Supposons que vous ayez installé le logiciel dans C:/cygwin ( C:/cygwin64 pour la version 64 bits). Ouvrez cmd et tapez wget (ou un des exécutables présents dans C:/cygwin/bin ) pour vérifier si vous pouvez utiliser les exécutables Cygwin. Si l'exécutable ne s'ouvre pas, ajoutez C:/cygwin/bin à votre chemin (variable d'environnement).

Configurer Opam

Ouvrez cmd.exe et tapez opam init pour configurer Opam.

Ensuite, installez ocamlfind (partie du compilateur OCaml) avec

opam install ocamlfind
opam config env
 

Vérifiez si ocamlfind est installé en le tapant dans cmd.exe .

La commande opam config env est utilisée pour ajouter le opam des exécutables opam au chemin de l'environnement. Si après la déconnexion, vous ne pouvez plus accéder à ocamlfind , vous pouvez l'ajouter manuellement en ajoutant au chemin la ligne suivante: C:/Users/<your user>/Documents/.opam/system/bin/ .

Installer des paquets

Les packages sont installés via Opam avec la commande opam install xyzxyz est le nom du package.

Installer UTop

Essayez d'exécuter la commande opam install utop . Si vous n'avez aucune erreur, alors taper utop ouvrira l'exécutable.

Si vous voyez le message

[ERROR] The compilation of zed failed at "ocaml setup.ml -build".
 

vous devez installer manuellement les packages uniques. Essayez à nouveau de taper:

opam install zed
opam install lambda-term
opam install utop
 

Les lambda-term et utop peuvent ne pas être installés. Voir la section Dépannage.

Installation de Core

Vous pouvez installer core package core avec le opam install core . Sur la version Windows 64 bits (et Cygwin 64 bits), vous verrez l'erreur suivante:

[ERROR] core is not available because your system doesn't comply with os != "win32" & ocaml-version = "4.02.3".
 

Dépannez: impossible de créer un fichier régulier

Si le package avec le nom xyz.10.1 ne parvient pas à installer (où xyz est le nom du package et 10.1 sa version) avec le message suivant:

install: cannot create regular file '/cygdrive/c/Users/<your user>/Documents/.opam/system/bin/<something>': File exists
 

Vous devez aller dans ce répertoire:

C:\Users\<your user>\Documents\.opam\repo\default\packages\<xyz>\<xyz.10.1>\files 
 

et supprimez le fichier xyz.10.1.install .

Dépannage: impossible de charger la bibliothèque partagée

Si vous essayez d'ouvrir un paquet d'Opam (par exemple: utop ) et que vous voyez cette erreur:

Fatal error: cannot load shared library dlllwt-unix_stubs
Reason: The specified module could not be found.
 

Exécutez à nouveau opam config env et essayez de rouvrir l'exécutable.

Installation ou configuration

Installation d'OPAM

OPAM est un gestionnaire de paquets pour OCaml. Il construit et gère facilement les versions du compilateur et les bibliothèques OCaml.

La méthode la plus simple pour installer OPAM sur votre système d'exploitation consiste à utiliser un gestionnaire de packages pour votre système. par exemple apt-get, yum ou homebrew.

Instructions d'installation Mac OSX

Mettre à jour les formules homebrew et installer OPAM.

brew update
brew install opam
 

Instructions d'installation d'Ubuntu

add-apt-repository ppa:avsm/ppa
apt-get update
apt-get install ocaml opam
 

Compiler à partir de la source

wget http://caml.inria.fr/pub/distrib/ocaml-4.03/ocaml-4.03.0.tar.gz
tar xf ocaml-4.03.0.tar.gz
cd ocaml-4.03.0
./configure -prefix installation_path
make world.opt
make install
 

Initialisation OPAM

Une fois OPAM installé, lancez opam init et suivez les instructions.

Une fois cela fait, vous devriez être capable d'exécuter l'interpréteur OCaml à partir de votre shell.

$ ocaml
        OCaml version 4.03.0

#
 

Votre premier programme en OCaml

Maintenant que la distribution OCaml est disponible sur votre système d'exploitation préféré, nous pouvons créer votre premier programme dans OCaml: le Hello World!

Nous avons différentes façons de lancer un programme OCaml.

Le REPL (toplevel)

Vous pouvez exécuter votre code de manière interactive avec le niveau supérieur . Avec OCaml toplevel , vous pouvez écrire et exécuter du code OCaml, sous forme de shell UNIX. Ensuite, le niveau supérieur vérifie immédiatement le type de votre code. Ainsi, vous pouvez rapidement et facilement tester certaines parties du code sans compilation ni exécution.

Vous pouvez lancer le toplevel avec la commande ocaml . Ensuite, vous pouvez écrire une phrase OCaml terminée par ;; qui est évalué immédiatement. Le niveau supérieur affiche le type et la valeur de votre expression juste après:

# "Hello Worlds!";;
- : string = "Hello Worlds!"
 

Il est également possible de lancer le toplevel sur votre fichier. Vous pouvez voir cette explication à ce sujet.

Pour faciliter votre saisie dans le toplevel , vous pouvez utiliser un outil comme ledit ou rlwrap qui fournit certaines fonctionnalités (comme l'historique des entrées):

 $ ledit ocaml

 $ rlwrap ocaml
 

Compilation au bytecode

Nous avons deux compilateurs différents, l'un qui compile en bytecode et l'autre qui compile en code natif. Le premier est identique au bytecode de la machine virtuelle Java. Le bytecode est donc moins efficace mais plus portable.

Nous avons des fichiers d’extensions utilisés par les compilateurs OCaml:

extension définition
.ml Le code source (comme .c en C)
.mli L'interface (comme .h en C)
.cmo Code source compilé par ocamlc dans bytecode
.cmi Code d'interface compilé par ocamlc
.cmx et .o Code source compilé par ocamlopt en code natif
.cma Bibliothèque ( *.cmo ) en bytecode
.cmxa et .a Bibliothèque en code natif
.cmxs Bibliothèque en code natif (pour charger dynamiquement)

Le compilateur bytecode est ocamlc .

Vous avez différentes options communes:

  • -c : compiler un fichier source sans le processus de liaison (pour produire un exécutable). Ainsi, la commande ocaml -c foo.ml produit un fichier .cmo . Contrairement à C dans lequel le fichier d' en- tête n'a pas besoin d'être compilé, il est nécessaire OCaml pour compiler le .mli fichier: ocaml -c foo.mli .

Vous devez d'abord compiler l'interface. Lorsque vous compilez le fichier source par la suite, OCaml essaie de vérifier que l'implémentation correspond à l'interface.

Le fichier .mli n'est pas obligatoire. Si vous compilez un fichier .ml sans un fichier .mli , OCaml produira automatiquement un fichier .cmi .

  • -o : compiler des fichiers .cmo sur un exécutable. Par exemple: ocamlc -o program foo.cmo bar.cmo . Ces fichiers doivent être organisés par les dépendances pour lesquelles le premier fichier n'a aucune dépendance.

  • -I : pour indiquer un autre répertoire où le compilateur peut trouver les fichiers nécessaires à la compilation (comme l'interface ou le code source). C'est la même chose que le -I d'un compilateur C.

Nous avons beaucoup d'autres options. Vous pouvez voir le manuel pour plus d'informations.

Donc, vous pouvez écrire le hello.ml maintenant et compiler ce fichier avec ocamlc -o hello hello.ml pour produire un programme bytecode :

let () = print_endline "Hello World!"
 

Le let () = ... est la première entrée de votre programme (comme le main dans C). Après, nous utilisons la fonction print_endline (fournie par la bibliothèque standard) avec l'argument "Hello World!" imprimer Hello Worlds avec une nouvelle ligne dans la sortie standard.

Après la compilation, vous avez le .cmo fichier et le .cmi fichier produit automatiquement par le compilateur et votre programme hello . Vous pouvez ouvrir votre programme et, en haut de ce fichier, vous pouvez voir:

#!/usr/local/bin/ocamlrun
 

Cela signifie que votre programme a besoin du programme ocamlrun (fourni par la distribution) pour exécuter le bytecode (comme la JVM).

Compilation au code natif

Nous avons un autre compilateur qui produit du code natif. Le compilateur est: ocamlopt . Cependant, l'exécutable résultant ne peut pas fonctionner sur la plupart des autres architectures.

ocamlopt utilise les mêmes options que ocamlc pour que vous puissiez exécuter ocamlopt -o hello hello.ml . Après, vous pouvez voir un .cmx et un fichier .o .

Enfin, à partir de votre programme de code bytecode / native, vous pouvez exécuter:

$ ./hello
Hello World!
$