~/ / docs / Einrichtung / 01 · Einrichtung
OCaml einrichten — opam und Editor
Eine saubere OCaml-Toolchain mit opam, dune und einem brauchbaren Editor-Setup als Basis für alle weiteren Kapitel.
OCaml wird über opam installiert — den Paketmanager der Sprache. Damit lassen sich Compiler-Versionen parallel halten, Bibliotheken pro Projekt isolieren und Build-Tools nachziehen. Wer einmal eine saubere Toolchain steht, spart sich später viel Reibung.
opam installieren
Unter macOS reicht Homebrew, unter Debian/Ubuntu der Paketmanager:
# macOS
brew install opam
# Ubuntu / Debian
sudo apt install opam
Nach der Installation wird opam initialisiert und ein Compiler-Switch aufgesetzt. Ein Switch ist eine isolierte OCaml-Umgebung — ungefähr das, was venv für Python ist.
opam init --bare -a -y
opam switch create 5.2.0
eval $(opam env)
Der letzte Befehl exportiert die richtigen Pfade in die aktuelle Shell. Praktisch ist, das in .zshrc oder .bashrc zu hinterlegen, damit neue Terminals den Switch automatisch übernehmen.
Werkzeuge nachinstallieren
Drei Pakete gehören in jedes ernsthafte Setup: dune als Build-System, utop als interaktive REPL und ocaml-lsp-server für Editor-Integration.
opam install dune utop ocaml-lsp-server ocamlformat
Mit utop startet eine erweiterte REPL, in der sich Ausdrücke direkt ausprobieren lassen:
utop # let square x = x * x ;;
val square : int -> int = <fun>
utop # square 7 ;;
- : int = 49
Beachte das doppelte Semikolon — es signalisiert dem REPL das Ende eines Ausdrucks. In normalen Quelldateien schreibt man es nicht.
Editor
VS Code mit der Erweiterung OCaml Platform funktioniert direkt mit dem oben installierten LSP-Server. Neovim-Nutzer greifen zu nvim-lspconfig und konfigurieren ocamllsp. In beiden Fällen liefert der Sprachserver Typinformationen beim Hovern, Sprung zur Definition und Vervollständigung.
Ein kurzer Funktionstest: Datei hello.ml anlegen, Code eintippen und über die REPL prüfen.
let () = print_endline "ready"
Im Terminal:
ocaml hello.ml
Erscheint ready, ist die Basis komplett. Im nächsten Kapitel geht es um let-Bindungen, Funktionen und das Typsystem.