OCaml
Objective CAML | |
---|---|
![]() | |
Basisdaten | |
Erscheinungsjahr: | 1996 |
Designer: | Xavier Leroy, Damien Doligez |
Entwickler: | INRIA |
Aktuelle Version: | 3.09.3 (18. September 2006) |
Beeinflusst von: | Standard ML |
Betriebssystem: | Plattformunabhängig |
Lizenz: | Q Public License (Compiler), LGPL (Bibliothek) |
http://caml.inria.fr/ |
Objective CAML, auch Ocaml oder O’Caml genannt, ist eine auf der ML-Sprachfamilie basierende Programmiersprache. Sie wird am INRIA unter der Leitung von Xavier Leroy entwickelt. Caml stand ursprünglich für Categorically Abstract Machine Language, basiert aber schon seit langem nicht mehr auf diesem abstrakten Konzept. Zusätzlich zu den funktionalen und imperativen Merkmalen von ML unterstützt Ocaml objektorientierte Konzepte und unterscheidet sich in Details von ML.
Ocaml bietet einen Compiler zur Erzeugung von sowohl Bytecode als auch Maschinencode. Der erzeugte Maschinencode ist sehr effizient (vergleichbar mit C++-Code). Zu den mächtigsten Merkmalen dieser Sprache gehört statische Typisierung (in Verbindung mit Typinferenz), parametrische Polymorphie, Pattern Matching, ein Mechanismus zur Ausnahmebehandlung und automatische Speicherbereinigung. Ocaml-Distributionen enthalten einige allgemeine Bibliotheken und sind für zahlreiche Plattformen, inklusive Unix und Windows erhältlich.
Ein bekanntes Programm, das in O’Caml geschrieben wurde ist MLDonkey, ein P2P-Client, der auf diversen Betriebssystemen läuft, und auf verschiedene P2P-Netzwerke zugreifen kann.
Beispiel zur funktionalen Programmierung
let rec wiederhole = function | (f, 1) -> (fun x -> f x) | (f, n) -> (fun x -> f ((wiederhole (f, n - 1)) x));; (wiederhole ((fun x -> x + 2), 3)) 1;;
Dieses Beispiel zeigt die Mächtigkeit der funktionalen Programmierung: Die Funktion „wiederhole“ kann eine beliebige Funktion mehrfach auf sich selbst anwenden und ist daher eine Funktion höherer Ordnung. Gleichzeitig ist „wiederhole“ polymorph – der Datentyp der ihr übertragenen Funktion steht im vornherein nicht fest. Typisch für OCaml ist das Pattern Matching, die durch das Zeichen „|“ gekennzeichnete Fallunterscheidung. Im Beispiel wird die Funktion „addiere zwei“ dreifach auf die Zahl 1 angewendet. Der Interpreter gibt 7 aus.
Universelle Polymorphie
Unter dem Begriff Polymorphie werden häufig die völlig verschiedenen Konzepte der Ad-hoc-Polymorphie und der universellen Polymorphie zusammengefasst. Ad-hoc-Polymorphie, also implizite Typkonversion und das Überladen von Funktionen, sind mit dem strengen statischen Typkonzept von O'Caml und der Typinferenz nicht vereinbar.
Als Beispiel sei hier erwähnt, dass z.B. zwischen der Addition von Ganzzahlen (Integer) und der Addition von Fließkommazahlen durch unterschiedliche Operatoren unterschiden wird.
Vielmehr implementiert O'Caml das mächtigere Konzept der universellen Polymorphie, und zwar in beiden Spielarten, der parametrischen Polymorphie und der Inklusionspolymorphie.
Siehe auch
- Standard ML
- F#, ein Ocaml-Compiler für Microsoft .NET
- EML, eine andere objektorientierte Erweiterung von ML
- O’Haskell, eine objektorientierte Erweiterung von Haskell, einer funktionalen Sprache, die nicht zur Familie der ML-Sprachen gehört
Weblinks
- Offizielle O’Caml-Website (englisch)
- Materialien zu O’Caml (englisch)
- O’Caml-Tutorial (englisch)
- Camelia – eine IDE für O’Caml
- GODI - Softwarepacketmanagementsystem für O’Caml
- (X)Emacs O’Caml-Modus