| Vznik | 1996 |
|---|---|
| Licence | LGPL |
| Web | ocaml.org |
| Přípona souboru | .ml, .mli |
OCaml je vinformatice implementaceprogramovacího jazyka Caml, která byla rozšířena oobjektově orientované konstrukce. OCaml je sada nástrojů obsahujícíinterpret,překladač dobytecode i překladač dostrojového kódu, který provádíoptimalizace. Obsahuje rozsáhlouknihovnu funkcí, což v něm umožňuje dělat aplikace takové jako vPythonu neboPerlu.
Jazyk vytvořili v roce 1996Xavier Leroy, Jérôme Vouillon,Damien Doligez, Didier Rémy a další jakoopen source projekt, který je dále spravován institucíINRIA.
Programovací jazyky odvozené od ML jsou známé pro své staticky orientovanétypové systémy a typy odvozující kompilátory (překladače). OCaml sjednocuje pod ML typově orientované systémyfunkcionální,imperativní a objektově orientované programování.
OCaml, jakožto jazyk se statickým typovým systémem, eliminuje velké množstvíprogramátorských chyb, které se jinak mohou objevovat až při běhu programu. Nutí programátora brát ohled na omezení typově orientovaného systému. Kompilátor s typovým odvozováním (inferencí) značně redukuje potřebudeklaracedatového typu (obvykle není potřeba deklarace proměnných jako je to u jiných programovacích jazyků, například v jazyceJava).
OCaml je možná nejvýznamnější z vedlejších programovacích jazyků vzniklých naakademické půdě, s ohledem na výkonnost. Díky tomu, že je to staticky orientovaný typový systém, není možný výskyt typových chyb za běhu. Další výhodou je, že zabraňuje[kdo?] typování za běhu programu, které snižuje výkonnost dynamických jazyků, přičemž je stále zaručen (pouze) typově bezpečný chod programu.
OCaml distribuce obsahuje:
Kompilátor nativního (strojového) kódu je dostupný pro mnohéplatformy, včetněUnix,Microsoft Windows a AppleMac OS X.
OCaml bytecode a nativní kód programu může být napsán vevláknech. Nicméněgarbage kolektor není navržen pro běh ve vláknech,symetrický multiprocessing není podporován.
Základní příkazocaml vypíše verzi programu:
$ocamlObjectiveCamlversion3.09.0#
Kód může být zapsán na# řádku. Například pro výpočet 1 + 2 * 3:
#1+2*3;;-:int=7
OCaml odvozuje datový typ z výrazu jakoint (integer) a vrací výsledek „7“.
Následující program „bonjour.ml“:
print_endline"Bonjour Monde!";;
může být zkompilován do bytecodu:
$ocamlcbonjour.ml-obonjour
a spuštěn:
$./bonjourBonjourMonde!$
Seznam je jeden z nejzákladnějších datových typů v OCaml. Následující příklad sčítá seznam integerů.
letrecsumxs=matchxswith|[]->0|x::xs'->x+sumxs'
#sum[1;2;3;4;5];;-:int=15
OCaml má výstižné výrazy rekurzivních algoritmů. Následující příklad implementujequicksort algoritmus pro třídění seznamu vzestupně.
letrecquicksort=function|[]->[]|pivot::rest->letis_lessx=x<pivotinletleft,right=List.partitionis_lessrestinquicksortleft@[pivot]@quicksortright