OCaml

OCaml
Vznik1996
LicenceLGPL
Webocaml.org
Přípona souboru.ml, .mli

OCaml je v informatice implementace programovacího jazyka Caml, která byla rozšířena o objektově orientované konstrukce. OCaml je sada nástrojů obsahující interpret, překladač do bytecode i překladač do strojového kódu, který provádí optimalizace. Obsahuje rozsáhlou knihovnu funkcí, což v něm umožňuje dělat aplikace takové jako v Pythonu nebo Perlu.

Jazyk vytvořili v roce 1996 Xavier Leroy, Jérôme Vouillon, Damien Doligez, Didier Rémy a další jako open source projekt, který je dále spravován institucí INRIA.

Základní principy

[editovat | editovat zdroj]

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émy funkcionální, imperativní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řebu deklarace datového typu (obvykle není potřeba deklarace proměnných jako je to u jiných programovacích jazyků, například v jazyce Java).

OCaml je možná nejvýznamnější z vedlejších programovacích jazyků vzniklých na akademické 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.

Vlastnosti

[editovat | editovat zdroj]

OCaml distribuce obsahuje:

  • Rozšířitelný parser a makro jazyk jménem Camlp4, který umožňuje OCaml syntaxi rozšířit nebo dokonce nahradit
  • Scanner a parser nástroje nazvané ocamllex a ocamlyacc
  • Debugger, který podporuje zpětné krokování pro zkoumání chyb
  • Generátor dokumentace
  • Profilování – pro měření výkonnosti

Kompilátor nativního (strojového) kódu je dostupný pro mnohé platformy, včetně Unix, Microsoft Windows a  Apple Mac OS X.

OCaml bytecode a nativní kód programu může být napsán ve vláknech. Nicméně garbage kolektor není navržen pro běh ve vláknech, symetrický multiprocessing není podporován.

Ukázky kódu

[editovat | editovat zdroj]

Základní příkaz ocaml vypíše verzi programu:

  $ ocaml
       Objective Caml version 3.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 jako int (integer) a vrací výsledek „7“.

Ahoj světe

[editovat | editovat zdroj]

Následující program „bonjour.ml“:

 print_endline "Bonjour Monde!";;

může být zkompilován do bytecodu:

$ ocamlc bonjour.ml -o bonjour

a spuštěn:

$ ./bonjour
Bonjour Monde!
$

Součet seznamu integerů

[editovat | editovat zdroj]

Seznam je jeden z nejzákladnějších datových typů v OCaml. Následující příklad sčítá seznam integerů.

let rec sum xs =
  match xs with
    | [] -> 0
    | x :: xs' -> x + sum xs'
 # sum [1;2;3;4;5];;
 - : int = 15

OCaml má výstižné výrazy rekurzivních algoritmů. Následující příklad implementuje quicksort algoritmus pro třídění seznamu vzestupně.

 let rec quicksort = function
   | [] -> []
   | pivot :: rest ->
       let is_less x = x < pivot in
       let left, right = List.partition is_less rest in
       quicksort left @ [pivot] @ quicksort right

Externí odkazy

[editovat | editovat zdroj]