OCaml Tutorial
Iniziare con OCaml
Ricerca…
Osservazioni
Questa sezione fornisce una panoramica di cosa sia ocaml e perché uno sviluppatore potrebbe volerlo utilizzare.
Dovrebbe anche menzionare tutti i soggetti di grandi dimensioni all'interno di ocaml e collegarsi agli argomenti correlati. Poiché la documentazione di ocaml è nuova, potrebbe essere necessario creare versioni iniziali di tali argomenti correlati.
Installazione o configurazione
Installazione di OPAM
OPAM è un gestore di pacchetti per OCaml. Costruisce e gestisce facilmente le versioni del compilatore e le librerie OCaml.
Il modo più semplice per installare OPAM sul tuo sistema operativo è utilizzare un gestore di pacchetti per il tuo sistema. ad esempio apt-get, yum o homebrew.
Istruzioni per l'installazione di Mac OSX
Aggiorna le formule homebrew e installa OPAM.
brew update
brew install opam
Istruzioni per l'installazione di Ubuntu
add-apt-repository ppa:avsm/ppa
apt-get update
apt-get install ocaml opam
Compilando dalla fonte
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
Inizializzazione di OPAM
Una volta installato OPAM, esegui opam init e segui le istruzioni.
Una volta fatto dovresti essere in grado di eseguire l'interprete OCaml dalla tua shell.
$ ocaml
OCaml version 4.03.0
#
Il tuo primo programma in OCaml
Ora che la distribuzione di OCaml è disponibile sul tuo sistema operativo preferito, possiamo creare il tuo primo programma in OCaml: Hello World!
Abbiamo diversi modi per avviare un programma OCaml.
The REPL (toplevel)
Puoi eseguire il tuo codice in modo interattivo con il toplevel . Con il toplevel di OCaml, puoi scrivere ed eseguire il codice OCaml come shell UNIX. In seguito, il primo livello controlla il tipo di codice immediatamente. Quindi, puoi testare rapidamente e facilmente alcune parti del codice senza compilazione ed esecuzione.
Puoi avviare il toplevel con il comando ocaml . Quindi, puoi scrivere una frase di OCaml terminata da ;; che viene valutato immediatamente. Il toplevel visualizza il tipo e il valore della tua espressione subito dopo:
# "Hello Worlds!";;
- : string = "Hello Worlds!"
È anche possibile avviare il toplevel sul tuo file. Puoi vedere questa spiegazione a riguardo.
Per facilitare il tuo input in toplevel , puoi utilizzare uno strumento come ledit o rlwrap che fornisce alcune funzionalità (come la cronologia degli input):
$ ledit ocaml
$ rlwrap ocaml
Compilazione al bytecode
Abbiamo due compilatori diversi, uno che compila in bytecode e l'altro che compila in codice nativo. Il primo è lo stesso del bytecode della macchina virtuale Java. Quindi, il bytecode è meno efficiente ma più portabile.
Abbiamo alcuni file di estensioni utilizzati dai compilatori OCaml:
| estensione | definizione |
|---|---|
.ml | Il codice sorgente (come .c in C) |
.mli | L'interfaccia (come .h in C) |
.cmo | Codice sorgente compilato da ocamlc in bytecode |
.cmi | Codice di interfaccia compilato da ocamlc |
.cmx e .o | Codice sorgente compilato da ocamlopt nel codice nativo |
.cma | Libreria (bucket di alcuni *.cmo ) in bytecode |
.cmxa e .a | Libreria in codice nativo |
.cmxs | Libreria in codice nativo (per caricare dinamicamente) |
Il compilatore bytecode è ocamlc .
Hai diverse opzioni comuni:
-
-c: per compilare un file sorgente senza il processo di collegamento (per produrre un eseguibile). Quindi, il comandoocaml -c foo.mlproduce un file.cmo. A differenza di C in cui il file di intestazione non ha bisogno di essere compilato, è necessario in OCaml compilare il file.mli:ocaml -c foo.mli.
È necessario prima compilare l'interfaccia. Quando si compila il file sorgente in seguito, OCaml prova a verificare che l'implementazione corrisponda all'interfaccia.
Il file .mli non è obbligatorio. Se si compila un file .ml senza un file .mli , OCaml produrrà automaticamente un file .cmi .
-o: per compilare alcuni file.cmosu un eseguibile. Ad esempio:ocamlc -o program foo.cmo bar.cmo. Questi file devono essere organizzati dalle dipendenze per le quali il primo file non ha alcuna dipendenza.-I: per indicare un'altra directory in cui il compilatore può trovare i file necessari per la compilazione (come l'interfaccia o il codice sorgente). È lo stesso di-Idi un compilatore C.
Abbiamo molte altre opzioni. Puoi vedere il manuale per maggiori informazioni.
Quindi, puoi scrivere hello.ml adesso e compilare questo file con ocamlc -o hello hello.ml per produrre un programma bytecode :
let () = print_endline "Hello World!"
let () = ... è la prima voce del tuo programma (come il main in C). Dopo, usiamo la funzione print_endline (fornita dalla libreria standard) con l'argomento "Hello World!" per stampare Hello Worlds con una nuova riga nell'output standard.
Dopo la compilazione, hai il file .cmo e il file .cmi prodotto automaticamente dal compilatore e il tuo programma hello . Puoi aprire il tuo programma e nella parte superiore di questo file puoi vedere:
#!/usr/local/bin/ocamlrun
Ciò significa che il tuo programma ha bisogno del programma ocamlrun (fornito dalla distribuzione) per eseguire il bytecode (come la JVM).
Compilazione al codice nativo
Abbiamo un altro compilatore che produce codice nativo. Il compilatore è: ocamlopt . Tuttavia, l'eseguibile risultante non può funzionare sulla maggior parte delle altre architetture.
ocamlopt usa le stesse opzioni di ocamlc così puoi eseguire ocamlopt -o hello hello.ml Dopo, puoi vedere un file .cmx e un file .o .
Infine, dal tuo codice bytecode / programma di codice nativo, è possibile eseguire:
$ ./hello
Hello World!
$
Installazione su Windows (nativo)
Premessa
Queste istruzioni mostrano una procedura per installare i binari OCaml nativi in Windows. Se il tuo sistema operativo è Windows 10 (Insider Preview) build 14316 o successivo puoi anche installare OCaml tramite Bash su Ubuntu su Windows . In questo caso, segui le istruzioni per installare OCaml su Ubuntu.
Installa OCaml e Opam
Scarica la distribuzione ufficiale di OCaml . Contiene sia i compilatori OCaml che il gestore dei pacchetti Opam. Supponiamo di aver installato il software in C:/OCaml . Per essere sicuro di aver installato correttamente OCaml open cmd.exe e digitare ocaml .
Se vedi che il messaggio 'ocaml' is not recognized as an internal or external command, operable program or batch file devi aggiungere C:/OCaml/bin al tuo percorso (Variabile d'ambiente).
Aggiungi i binari di OCaml al percorso
in Control Panel > System and Security > System > Advanced system settings (on the left) > Environment Variables quindi selezionare Path nella scheda System Variable , quindi Edit .
Aggiungi C:/OCaml/bin; alla lista.
Installa Cygwin
Senza Cygwin non puoi usare Opam. Infatti, se provi ad aprire Opam digitando opam in cmd.exe viene visualizzato un messaggio: Fatal error: exception Unix.Unix_error(20, "create_process", "cygcheck") .
Scarica Cygwin e avvia il programma di installazione. Assicurati di controllare i seguenti pacchetti:
- automake
- Diffutils
- libreadline
- rendere
- m4
- mingw64-x86_64-gcc-core
- mingw64-x86_64-GMP
- mingw64-x86_64-openssl
- mingw64-x86_64-pkg-config
- mingw64-x86_64-sqlite3
- toppa
- rlwrap
- Unzip
- wget
Supponiamo di aver installato il software in C:/cygwin ( C:/cygwin64 per la versione a 64 bit). Aprire cmd e digitare wget (o uno dei file eseguibili presenti in C:/cygwin/bin ) per verificare se è possibile utilizzare gli eseguibili Cygwin. Se l'eseguibile non si apre, aggiungi C:/cygwin/bin al tuo percorso (Variabile d'ambiente).
Configura Opam
Aprire cmd.exe e digitare opam init per configurare Opam.
Quindi installare ocamlfind (parte del compilatore OCaml) con
opam install ocamlfind
opam config env
Controlla se ocamlfind è installato digitandolo in cmd.exe .
Il comando opam config env viene utilizzato per aggiungere la opam degli eseguibili di opam al percorso dell'ambiente. Se dopo il logout non ocamlfind più a raggiungere ocamlfind , puoi aggiungerlo manualmente aggiungendo al percorso la seguente riga: C:/Users/<your user>/Documents/.opam/system/bin/ .
Installazione dei pacchetti
I pacchetti vengono installati tramite Opam con il comando opam install xyz dove xyz è il nome del pacchetto.
Installa UTop
Prova a eseguire il comando opam install utop . Se non ci sono errori, digitando utop si aprirà l'eseguibile.
Se vedi il messaggio
[ERROR] The compilation of zed failed at "ocaml setup.ml -build".
devi installare manualmente i singoli pacchetti. Prova ancora a digitare:
opam install zed
opam install lambda-term
opam install utop
Sia lambda-term che utop potrebbero non essere installati. Vedi la sezione Risoluzione dei problemi.
Installazione di Core
È possibile installare il pacchetto core con il opam install core . Sulla versione Windows a 64 bit (e Cybit a 64 bit) verrà visualizzato il seguente errore:
[ERROR] core is not available because your system doesn't comply with os != "win32" & ocaml-version = "4.02.3".
Risoluzione dei problemi: impossibile creare file regolari
Se il pacchetto con nome xyz.10.1 non riesce ad installare (dove xyz è il nome del pacchetto e 10.1 la sua versione) con il seguente messaggio:
install: cannot create regular file '/cygdrive/c/Users/<your user>/Documents/.opam/system/bin/<something>': File exists
Devi andare in questa directory:
C:\Users\<your user>\Documents\.opam\repo\default\packages\<xyz>\<xyz.10.1>\files
ed elimina il file xyz.10.1.install .
Risoluzione dei problemi: impossibile caricare la libreria condivisa
Se provi ad aprire il pacchetto di Opam (es: utop ) e vedi questo errore:
Fatal error: cannot load shared library dlllwt-unix_stubs
Reason: The specified module could not be found.
Esegui nuovamente opam config env e prova a riaprire l'eseguibile.