Programmierkurs: OCaml
Aus Wikibooks
Inhaltsverzeichnis |
[Bearbeiten] Motivation
Das funktionale Programmierparadigma ist ein Modell, das sich im Gegensatz zum imperativen Ansatz nicht auf vordefinierte Abfolgen von Befehlen sondern auf Funktionen, die Daten transformieren, konzentriert. Funktionale Programmierung nimmt ihren Ursprung in der Programmiersprache LISP und wird auch von anderen wie OCaml, SML oder Haskell getragen. Funktionale Elemente finden neuerdings auch in den imperativen Programmiersprachen Einzug. So finden Templates in C++ und Generics in Java und C# breite Verwendung, in neueren Revisionen von C++ und C# wird voraussichtlich die später behandelte Typinferenz umgesetzt. Auch viele Operationen auf Mengen bilden einen wichtigen Bestandteil der imperativen Sprachen, wie wir sie heute kennen.
Gleich vorab: funktionale Programmierung erweist sich oft für Anfänger, die keine Programmierkenntnisse vorweisen können, als ein verständlicheres Modell, während es für Menschen, die sich mit imperativem Ansatz auskennen, dieses Paradigma eine harte Nuss darstellt. Vor dem Kennenlernen der funktionalen Sprachen habe ich über zehn Jahre lang in Basic, Pascal, C und Python entwickelt und eine sehr lange Zeit, um überhaupt den Ansatz zu verstehen.
Mein größter Fehler war, dass ich in Abfolgen von Befehlen und einzelnen Werten gedacht habe. Richtig ist es jedoch, mengenorientiert zu denken und das Zielergebnis vor Augen halten. Ein Beispiel, das den Unterschied verdeutlicht: man möchte eine Menge (z.B. Array) von Zahlen erhöhen.
Imperativ:
i = 0 solange i kleiner als Länge: erhöhe Element aus Array mit Index i um eins erhöhe i um eins
Funktional:
NeueListe ist Liste, auf deren Elemente (+1) angewendet wurde.
Man möge sich fragen, warum man funktionales Programmieren erlernen sollte. Ich kann drei Antworten geben:
- einige Probleme lassen sich damit einfacher lösen
- das Programm kann durch den Compiler automatisch aufgeteilt und somit nebenläufig gemacht werden.
- viele Ansätze können in imperativen Sprachen verwendet werden
Lassen Sie sich von den ersten beiden Punkten nicht blenden. Man kann viele Probleme deutlich einfacher mit OCaml lösen. Andererseits werden andere schwerer im Vergleich zu imperativen Umsetzungen. Die vollautomatische Optimierung auf Multicomputer ist noch nicht vorhanden, jedoch werden Sie mit Erlang eine ausgezeichnete Plattform für verteilte Systeme finden.
Dieses Buch wird geschrieben, um das Denken zu vermitteln. So erlangt man die Fertigkeit, ein Problem von verschiedenen Seiten anzugehen und damit eine bessere Lösung zu finden. Man kann Vieles in die imperative Programmiersprache Ihrer Wahl direkt übernehmen. OCaml ist dabei eine Sprache, die sich für den alltäglichen Einsatz ausgezeichnet eignet.
Haben Sie Spaß!
[Bearbeiten] Über Objective Caml
Objective Caml ist eine auf der ML-Sprachfamilie basierende Programmiersprache. Typisch für ML-Sprachen sind statische Typisierung, Polymorphie und automatische Speicherverwaltung. Diese Sprachen sind funktional, erlauben jedoch auch Verwendung imperativer Ansätze wie Dateioperationen.
ML wurde 1973 an der Universität Edinburgh von Robin Milner entwickelt und war dazu gedacht, die Korrektheit von Programmen zu beweisen. Seither haben sich viele Dialekte herausgebildet. Eines dieser Dialekte war Caml, das Mitte der Achtziger am INRIA (Institut National de Recherche Informatique et en Automatique) entwickelt wurde. Diese Sprache wurde schließlich vom selben Institut 1990 wieder aufgegriffen und zu Objective Caml erweitert.
Caml stand dabei ursprünglich für Categorically Abstract Machine Language, die jedoch nicht mehr zutrifft. Das Objective Caml erweitert die Sprachbasis um objekt-orientierte Ansätze, die jedoch oft in Redundanz mit der Kernfunktionalität stehen.
Vom INRIA wird ein Satz von Entwicklungsprogrammen geliefert, zu deren Umfang unter anderem zwei Compiler gehören: je nach Wunsch kann das Programm in Byte- oder Maschinencode übersetzt werden. Anwendungen, die in Bytecode zur Verfügung stehen, können überall ausgeführt werden, wo eine virtuelle Maschine von OCaml installiert ist. Native Programme verlieren diese Portabilität, erreichen dafür Ausführungsgeschwindigkeiten von C++.
[Bearbeiten] Installation
[Bearbeiten] Microsoft Windows
INRIA bietet auf im Download-Bereich der Projektseite von OCaml zwei unterschiedliche Installer für Windows, die unterschiedliche Portierungen von OCaml beinhalten. Eine Distribution erfordert für einige Funktionalität Cygwin, die andere - Microsoft Visual Studio. Je nachdem, ob auf Ihrem System Visual Studio installiert ist oder nicht, ist das entsprechende Paket vorzuziehen. Falls Sie nicht sicher sind, welches Sie brauchen, nehmen Sie den mit Cygwin vermerkten Installer.
Der Installer kopiert entsprechende Dateien in das Zielverzeichnis und setzt die Umgebungsvariable PATH entsprechend der Auswahl entweder systemweit oder für den aktiven Benutzer. Diese Variable definiert Pfade, wo Windows nach Programmen sucht, die ohne Pfadangabe aufgerufen werden. Sollten die später im Buch erwähnten Befehle Ihrem System nicht bekannt sein, so wurde die Variable falsch gesetzt. Verfahren Sie in diesem Falle wie folgt (unter Annahme, dass OCaml unter C:\Ocaml installiert ist):
- Öffnen Sie System in der Systemsteuerung
- Klicken Sie auf den Reiter Erweitert
- Klicken Sie auf die Schaltfläche Umgebungsvariablen
- Suchen Sie nach PATH in der entsprechenden Liste - je nachdem, ob die Einstellung systemweit oder nur für Ihren Benutzer gelten soll
- Falls Sie PATH nicht finden können, müssen Sie die Variable mit Neu anlegen
- Nach einem Klick auf Bearbeiten fügen Sie in die Textbox Wert der Variable ";C:\Ocaml\bin" hinzu (ohne Anführungsstriche, der Semikolon ist kein Fehler)
[Bearbeiten] Erste Schritte
An diesem Kapitel wird gerade gearbeitet. Bitte keine Änderungen vornehmen oder vorher kurz Verbindung mit dem gerade aktiven Autor aufnehmen: Damg 15:51, 16. Jul. 2008 (CEST).
Hinweis: Dieser Vermerk muss nicht beachtet werden, wenn die Unterschrift schon älter als einen Tag ist.
OCaml kann als Compiler und als Read-eval-print-loop (REPL) verwendet werden, in der Befehle sofort ausgewertet werden. Die interaktive Konsole kann mit dem Befehl ocaml gestartet werden. Windows-Benutzer können alternativ das in der Standarddistribution mitgelieferte komfortablere OCamlWin verwenden, Emacs-Benutzern wird der Einsatz von Tuareg-Mode empfohlen.