www.wikidata.de-de.nina.az
OCaml ist eine auf der ML Sprachfamilie basierende Programmiersprache Sie wird am INRIA unter der Leitung von Xavier Leroy entwickelt Caml stand ursprunglich fur Categorical Abstract Machine Language basiert aber schon seit langem nicht mehr auf diesem abstrakten Konzept Zusatzlich zu den funktionalen und imperativen Merkmalen von ML unterstutzt OCaml objektorientierte Konzepte und unterscheidet sich in Details von ML OCamlBasisdatenErscheinungsjahr 1996Designer Xavier Leroy Damien DoligezEntwickler INRIAAktuelle Version 5 1 0 1 14 September 2023 Beeinflusst von Caml Light Cool Standard MLBeeinflusste ATS Elm F F Haxe Opa Rust ScalaBetriebssystem PlattformunabhangigLizenz Q Public License Compiler LGPL Bibliothek ocaml orgOCaml bietet einen Compiler zur Erzeugung von sowohl Bytecode als auch Maschinencode Der erzeugte Maschinencode ist sehr effizient vergleichbar mit C Code Zu den machtigsten Merkmalen dieser Sprache gehort 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 fur zahlreiche Plattformen inklusive Unix und Windows erhaltlich Ein bekanntes Programm das in OCaml geschrieben wurde ist MLDonkey ein P2P Client der auf diversen Betriebssystemen lauft und auf verschiedene P2P Netzwerke zugreifen kann Inhaltsverzeichnis 1 Beispiel zur funktionalen Programmierung 2 Universelle Polymorphie 3 Modulsystem 4 Funktoren 5 Siehe auch 6 Weblinks 7 EinzelnachweiseBeispiel zur funktionalen Programmierung Bearbeitenlet rec wiederhole f function 1 gt f n gt fun x gt wiederhole f n 1 f x wiederhole fun x gt x 2 3 1 Dieses Beispiel zeigt die Machtigkeit der funktionalen Programmierung Die Funktion wiederhole kann eine beliebige Funktion mehrfach auf sich selbst anwenden und ist daher eine Funktion hoherer Ordnung Gleichzeitig ist wiederhole polymorph der Datentyp der ihr ubertragenen Funktion steht im vornherein nicht fest Typisch fur OCaml ist das Pattern Matching die durch das Zeichen gekennzeichnete Fallunterscheidung Im Beispiel wird die Funktion addiere zwei span class k fun span span class n x span span class o gt span span class n x span span class o span span class mi 2 span dreifach auf die Zahl 1 angewendet Der Interpreter gibt 7 aus Universelle Polymorphie BearbeitenUnter dem Begriff Polymorphie werden haufig die vollig verschiedenen Konzepte der Ad hoc Polymorphie und der universellen Polymorphie zusammengefasst Ad hoc Polymorphie also implizite Typkonversion und das Uberladen von Funktionen sind mit dem strengen statischen Typkonzept von OCaml und der Typinferenz nicht vereinbar Als Beispiel sei hier erwahnt dass z B zwischen der Addition von Ganzzahlen Integer und der Addition von Gleitkommazahlen durch unterschiedliche Operatoren unterschieden wird Beispiel Der Ausdruck 1 2 ist in OCaml genau so wohltypisiert wie 1 5 2 3 Der Ausdruck 1 1 5 hingegen ist nicht wohltypisiert da der Operator zwei Integer Werte als Eingaben erwartet Eine implizite Typkonvertierung findet nicht statt Vielmehr implementiert OCaml das machtigere Konzept der universellen Polymorphie und zwar in beiden Spielarten der parametrischen Polymorphie und der Inklusionspolymorphie Modulsystem BearbeitenEine grosse Starke der Programmiersprache OCaml ist ihr Modulsystem Es ermoglicht eine Strukturierung des Quellcodes ahnlich den Packages von Java Zusammenhangende Definitionen sollen in Module gruppiert werden Dadurch kann es zu keinen Namenskonflikten zwischen unterschiedlichen Programmteilen und Bibliotheken kommen Jedes Modul wird mithilfe des struct end Ausdrucks definiert und erhalt mit sig end seine Signatur optional module Str sig type t val compare t gt t gt int end struct type t string let compare s1 s2 String compare s1 s2 end Das Beispiel definiert ein Modul mit Namen Str Dieses Modul besitzt einen Typ t und eine Funktion compare Compare erwartet zwei Werte vom Typ t und liefert eine Ganzzahl Int als Ergebnis zuruck An diesem Beispiel kann man ebenfalls sehen wie in OCaml mithilfe von Modulsignaturen Informationen versteckt werden konnen Der Typ t ist ausserhalb des Moduls Str nur abstrakt sichtbar Das statische Typsystem von OCaml stellt sicher dass Programmierer die an anderen Stellen mit Werten vom Typ t arbeiten nur die passenden Funktionen verwenden konnen z B die Funktion compare des Moduls Str Der Einsatz der Methode compare des Moduls String ist dagegen mit Werten vom Typ t nicht moglich auch wenn die interne Reprasentation zeigt dass dies funktionieren wurde denn jeder Wert vom Typ t ist ein String Der Vorteil dieser abstrakten Datentypen besteht aber darin dass bei einer Anderung der internen Darstellung von t in z B eine Unicode Zeichenkette nur in dem Modul Str Anpassungen vorgenommen werden mussen Alle anderen Stellen des Programmcodes sind von der Anderung nicht betroffen Im Gegensatz zum Packagesystem von Java erlaubt es OCaml Module zu verschachteln Funktoren BearbeitenDas Modulsystem von OCaml erlaubt das Programmieren von parametrisierten Modulen Diese erhalten statisch zur Ubersetzungszeit ein anderes Modul als Parameter Damit lassen sich auf sehr abstrakte Art und Weise Datenstrukturen und Algorithmen entwerfen ohne dass diese von ihrer konkreten Verwendung abhangen Als Beispiel ist hier das Modul Set genannt Es beinhaltet im Wesentlichen einen Funktor Make der es moglich macht fur Daten Mengen zu erzeugen falls es fur die Daten entsprechende Interfaces gibt compare und t mussen implementiert sein module SetStr Set Make Str Siehe auch BearbeitenStandard ML F eine auf OCaml basierte Programmiersprache fur Microsoft NET EML eine andere objektorientierte Erweiterung von MLWeblinks BearbeitenOffizielle OCaml Website englisch OCaml im Browser testen Materialien zu OCaml englisch OCaml Tutorial OCaml Videotutorial auf YouTube Camelia eine IDE fur OCaml OCaml Package Manager OPAM Softwarepaketmanagementsystem fur OCaml X Emacs OCaml ModusEinzelnachweise Bearbeiten OCaml 5 1 0 Release Notes abgerufen am 24 Oktober 2023 Normdaten Sachbegriff GND 7578649 7 lobid OGND AKS LCCN sh2007000473 Abgerufen von https de wikipedia org w index php title Objective CAML amp oldid 220417183