OCaml

linguagem de programação
 Nota: Não confundir com occam, veja occam (linguagem de programação). Para outros significados, veja Occam.

Objective Caml, também conhecida como OCaml (Objective Categorical Abstract Machine Language), é uma linguagem de programação funcional da família ML, desenvolvida pelo INRIA em 1996. Trata-se da linguagem Caml com a adição de suporte de técnicas de orientação a objetos e algumas alterações e extensões de sintaxe.

Objective Caml
Paradigma Multiparadigma:
Surgido em 1996 (27–28 anos)
Última versão 4.12.0 (24 de fevereiro de 2021; há 3 anos)
Criado por INRIA
Estilo de tipagem
  • estática
  • forte
  • inferida
Dialetos
Influenciada por
Influenciou
Sistema operacional Multiplataforma
Licença Q Public License (compilador)
LGPL (biblioteca)
Extensão do arquivo
  • .ml
  • .mli
Página oficial ocaml.org

OCaml permite dois tipos de compilação, para bytecode que corre numa máquina virtual (zinc) ou para código de máquina nativo para um grande número de plataformas. Ela não é uma linguagem puramente funcional, permitindo a existência de valores mutáveis bem como de efeitos colaterais (side-effects), tipicamente existentes apenas em linguagens imperativas. Esta característica distingue-a de outras linguagens puramente funcionais, como por exemplo Haskell.

A excelência de seu compilador que tem gerado código nativo rapidamente e com excelente desempenho quanto a tempos de execução, bem como uma biblioteca base extensa, têm-lhe conquistado bastante notoriedade.

Características

editar
  • Linguagem funcional e imperativa;
  • Fortemente e estaticamente tipada;
  • Tipos dos valores inferidos automaticamente durante a compilação;
  • Estruturação e encapsulamento de código por módulos parametrizáveis ou objectos;
  • Tipos pré-definidos como listas, tuplas ou records (sendo os últimos similares aos structs em C);
  • Orientação a objetos implementadas com um sistema de troca de mensagens;
  • Gerência automática de memória (coletor de lixo).

Exemplos

editar

Comentários

editar
(* Comentário... *)

Olá Mundo

editar
 Ver artigo principal: Programa Olá Mundo
print_endline "Hello world!"
(* Imprime "Hello world!" *)

Funções como valores

editar
let s x y = x + y in
let d x y = x - y in
let sq f x y = (f x y)*(f x y) in
let square_sum = sq s in
let square_dif = sq d in
print_string( string_of_int(square_sum 4 6)^ "\t" ^ string_of_int(square_dif 4 6));;

(* Imprime 100  4 *)

Closures

editar
let gen_next i =
    let _add x = i+x in
    _add
;;
let f = gen_next 10 in
print_int (f 5);;

(* Imprime 15 *)

Factorial recursivo

editar
let rec fact x =
    match x with
    |0->1
    |_ -> x*(fact (x-1))
;;
print_int (fact 20);;

(* Imprime 45350912 *)

Valores mutáveis (conhecidos como "variáveis", no estilo imperativo)

editar
let a = ref 1;;
print_int !a;;
a:=!a+1;;
print_int !a;;

(* Imprime 1 e 2*)

Ver também

editar

Ligações externas

editar
  NODES