Looking for ocaml Keywords? Try Ask4Keywords

OCamlErste Schritte mit OCaml


Bemerkungen

In diesem Abschnitt erhalten Sie einen Überblick darüber, was ocaml ist und warum ein Entwickler es verwenden möchte.

Es sollte auch alle großen Themen innerhalb von ocaml erwähnen und auf die verwandten Themen verweisen. Da die Dokumentation für ocaml neu ist, müssen Sie möglicherweise erste Versionen dieser verwandten Themen erstellen.

Installation unter Windows (native)

Prämisse

Diese Anleitung zeigt ein Verfahren zum Installieren von nativen OCaml-Binärdateien in Windows. Wenn Ihr Windows 10 (Insider Preview) build 14316 oder höher ist, können Sie OCaml auch über Bash unter Ubuntu unter Windows installieren. Befolgen Sie in diesem Fall die Anweisungen, um OCaml unter Ubuntu zu installieren.

Installieren Sie OCaml und Opam

Laden Sie den offiziellen Vertrieb von OCaml herunter. Es enthält sowohl OCaml-Compiler als auch den Opam-Paketmanager. Angenommen, Sie haben die Software in C:/OCaml installiert. Um sicher zu sein, dass Sie OCaml open cmd.exe korrekt installiert haben und geben Sie ocaml .

Wenn die Nachricht 'ocaml' is not recognized as an internal or external command, operable program or batch file müssen Sie C:/OCaml/bin zu Ihrem Pfad (Umgebungsvariable) hinzufügen.

Fügen Sie dem Pfad OCaml-Binaries hinzu

in Control Panel > System and Security > System > Advanced system settings (on the left) > Environment Variables und wählen Sie dann Path in System Variable Registerkarte dann Edit .

Add C:/OCaml/bin; zur Liste

Installieren Sie Cygwin

Ohne Cygwin können Sie Opam nicht verwenden. Wenn Sie versuchen, opam in cmd.exe zu öffnen, wird eine Meldung Fatal error: exception Unix.Unix_error(20, "create_process", "cygcheck") : Fatal error: exception Unix.Unix_error(20, "create_process", "cygcheck") .

Laden Sie Cygwin herunter und starten Sie das Installationsprogramm. Überprüfen Sie unbedingt die folgenden Pakete:

  • automake
  • Diffutilen
  • Libreadline
  • machen
  • m4
  • mingw64-x86_64-gcc-core
  • mingw64-x86_64-gmp
  • mingw64-x86_64-openssl
  • mingw64-x86_64-pkg-config
  • mingw64-x86_64-sqlite3
  • Patch
  • rlwrap
  • entpacken
  • wget

Angenommen, Sie haben die Software in C:/cygwin ( C:/cygwin64 für 64-Bit-Version) installiert. Öffnen Sie cmd und geben Sie wget (oder eine der in C:/cygwin/bin vorhandenen ausführbaren Datei) ein, um zu prüfen, ob Sie die ausführbaren Dateien von Cygwin verwenden können. Wenn sich die ausführbare Datei nicht öffnen lässt, fügen Sie Ihrem Pfad (Umgebungsvariable) C:/cygwin/bin .

Konfigurieren Sie Opam

Öffnen Sie cmd.exe und geben Sie opam init , um Opam zu konfigurieren.

Installieren ocamlfind dann ocamlfind (Teil des OCaml-Compilers) mit

opam install ocamlfind
opam config env
 

Überprüfen Sie, ob ocamlfind installiert ist, und geben Sie es in cmd.exe .

Mit dem Befehl opam config env wird das ausführbare Verzeichnis von opam zum Umgebungspfad opam . Wenn Sie nach dem Abmelden nicht mehr ocamlfind erreichen können, können Sie es manuell hinzufügen und die folgende Zeile in den Pfad C:/Users/<your user>/Documents/.opam/system/bin/ : C:/Users/<your user>/Documents/.opam/system/bin/

Pakete installieren

Pakete werden über Opam mit dem Befehl opam install xyz wobei xyz der Name des Pakets ist.

Installieren Sie UTop

Versuchen Sie, den Befehl opam install utop . Wenn Sie keine Fehler haben, wird die ausführbare Datei durch Eingabe von utop geöffnet.

Wenn Sie die Nachricht sehen

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

Sie müssen die einzelnen Pakete manuell installieren. Versuchen Sie es noch einmal:

opam install zed
opam install lambda-term
opam install utop
 

Sowohl lambda-term als auch utop möglicherweise nicht installiert. Siehe Abschnitt "Fehlerbehebung".

Core installieren

Sie können installieren core mit opam install core . Bei der Windows-64-Bit-Version (und 64-Bit-Cygwin) wird der folgende Fehler angezeigt:

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

Problembehandlung: Es kann keine reguläre Datei erstellt werden

Wenn das Paket mit dem Namen xyz.10.1 nicht installiert werden kann (wobei xyz der Name des Pakets und 10.1 dessen Version ist), wird die folgende Meldung xyz.10.1 :

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

Sie müssen in dieses Verzeichnis gehen:

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

und löschen Sie die Datei xyz.10.1.install .

Fehlerbehebung: Die gemeinsam genutzte Bibliothek kann nicht geladen werden

Wenn Sie versuchen, ein Paket von Opam zu öffnen (zB: utop ), und Sie sehen diesen Fehler:

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

Führen Sie opam config env erneut aus und versuchen Sie, die ausführbare Datei erneut zu öffnen.

Installation oder Setup

OPAM installieren

OPAM ist ein Paketmanager für OCaml. Es erstellt und verwaltet auf einfache Weise Compilerversionen und OCaml-Bibliotheken.

Die einfachste Möglichkeit, OPAM auf Ihrem Betriebssystem zu installieren, ist die Verwendung eines Paketmanagers für Ihr System. zB apt-get, yum oder homebrew.

Installationsanweisungen für Mac OSX

Aktualisieren Sie die Homebrew- Formeln und installieren Sie OPAM.

brew update
brew install opam
 

Ubuntu Installationsanweisungen

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

Kompilieren aus Quelle

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
 

OPAM initialisieren

Wenn Sie OPAM installiert haben, führen Sie opam init und befolgen Sie die Anweisungen.

Wenn Sie fertig sind, sollten Sie den OCaml-Interpreter von Ihrer Shell aus ausführen können.

$ ocaml
        OCaml version 4.03.0

#
 

Dein erstes Programm in OCaml

Jetzt, da die OCaml-Distribution auf Ihrem bevorzugten Betriebssystem verfügbar ist, können Sie Ihr erstes Programm in OCaml erstellen: die Hello World!

Wir haben verschiedene Möglichkeiten, ein OCaml-Programm zu starten.

Die REPL (Toplevel)

Sie können Ihren Code interaktiv mit dem Toplevel ausführen . Mit dem OCaml- Toplevel können Sie OCaml-Code als UNIX-Shell schreiben und ausführen. Danach überprüft der Toplevel sofort den Typ Ihres Codes. So können Sie einige Teile des Codes schnell und einfach testen, ohne sie zu kompilieren und auszuführen.

Sie können den Toplevel mit dem Befehl ocaml ocaml . Dann können Sie einen OCaml- Satz schreiben, der mit ;; das wird sofort ausgewertet. Die oberste Ebene zeigt den Typ und den Wert Ihres Ausdrucks unmittelbar danach an:

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

Es ist auch möglich, den Toplevel Ihrer Datei zu starten. Sie können diese Erklärung dazu sehen.

Um Ihre Eingabe in der obersten Ebene zu erleichtern, können Sie ein Tool wie ledit oder rlwrap , das einige Funktionen (wie den Eingabeverlauf) bereitstellt:

 $ ledit ocaml

 $ rlwrap ocaml
 

Kompilierung zum Bytecode

Wir haben zwei verschiedene Compiler, einen zum Bytecode und den anderen zum nativen Code. Der erste ist derselbe wie der Bytecode der virtuellen Maschine des Java. Der Bytecode ist also weniger effizient, aber portabler.

Wir haben einige Erweiterungsdateien, die von den OCaml-Compilern verwendet werden:

Erweiterung Definition
.ml Der Quellcode (als .c in C)
.mli Die Schnittstelle (wie .h in C)
.cmo Quellcode zusammengestellt von ocamlc im Bytecode
.cmi Von ocamlc kompilierter ocamlc
.cmx und .o Von ocamlopt kompilierter ocamlopt im nativen Code
.cma Bibliothek (Eimer mit einem *.cmo ) im Bytecode
.cmxa und .a Bibliothek im nativen Code
.cmxs Bibliothek im nativen Code (zum dynamischen Laden)

Der Bytecode- Compiler lautet ocamlc .

Sie haben verschiedene gemeinsame Möglichkeiten:

  • -c : um eine Quelldatei ohne den Verknüpfungsprozess zu kompilieren (um eine ausführbare Datei zu erzeugen). Der Befehl ocaml -c foo.ml erzeugt also eine .cmo Datei. Im Gegensatz zu C, bei dem die Headerdatei nicht kompiliert werden muss, ist es in OCaml erforderlich, die .mli Datei zu kompilieren: ocaml -c foo.mli .

Sie müssen zuerst die Schnittstelle kompilieren. Wenn Sie die Quelldatei anschließend kompilieren, versucht OCaml zu überprüfen, ob die Implementierung mit der Schnittstelle übereinstimmt.

Die .mli Datei ist nicht obligatorisch. Wenn Sie eine .ml Datei ohne eine .mli Datei kompilieren, erstellt OCaml automatisch eine .cmi Datei.

  • -o : um einige .cmo Dateien zu einer ausführbaren Datei zu kompilieren. Zum Beispiel: ocamlc -o program foo.cmo bar.cmo . Diese Dateien müssen nach den Abhängigkeiten geordnet werden, für die die erste Datei keine Abhängigkeit hat.

  • -I : um ein anderes Verzeichnis anzugeben, in dem der Compiler die für die Kompilierung erforderlichen Dateien finden kann (z. B. die Schnittstelle oder der Quellcode). Es ist dasselbe wie das -I eines C-Compilers.

Wir haben viele andere Möglichkeiten. Weitere Informationen finden Sie im Handbuch .

Sie können hello.ml jetzt die Datei ocamlc -o hello hello.ml schreiben und diese Datei mit ocamlc -o hello hello.ml , um ein Bytecode- Programm zu erstellen:

let () = print_endline "Hello World!"
 

Das let () = ... ist der erste Eintrag Ihres Programms (wie der main in C). Danach verwenden wir die von der Standardbibliothek bereitgestellte Funktion print_endline mit dem Argument "Hello World!" Hello Worlds mit einem Zeilenumbruch in der Standardausgabe drucken.

Nach dem Kompilieren haben Sie die .cmo Datei und die .cmi Datei, die automatisch vom Compiler und Ihrem Programm erstellt wurden. hello . Sie können Ihr Programm öffnen und oben in dieser Datei sehen Sie:

#!/usr/local/bin/ocamlrun
 

Das bedeutet, dass Ihr Programm das ocamlrun Programm (das von der Distribution bereitgestellt wird) benötigt, um den Bytecode auszuführen (wie bei der JVM).

Kompilierung zum nativen Code

Wir haben einen anderen Compiler, der nativen Code produziert. Der Compiler ist: ocamlopt . Die resultierende ausführbare Datei kann jedoch auf den meisten anderen Architekturen nicht funktionieren.

ocamlopt verwendet die gleichen Optionen wie ocamlc sodass Sie ocamlopt -o hello hello.ml ausführen ocamlopt -o hello hello.ml . Danach sehen Sie eine .cmx und eine .o Datei.

Schließlich können Sie aus Ihrem Bytecode / Native Code-Programm Folgendes ausführen:

$ ./hello
Hello World!
$