OCaml
Origem: Wikipédia, a enciclopédia livre.
Objective Caml, também conhecido como OCaml ou O'Caml é uma linguagem de programação funcional da família ML, desenvolvida por INRIA em 1996. Trata-se de um desenvolvimento da linguagem Caml com a adição de suporte a técnicas de programação por objectos e algumas alterações e extensões de sintaxe.
OCaml permite dois tipos de compilação:
- Para bytecode que corre numa máquina virtual (zinc)
- Para código máquina nativo para um grande número de plataformas
OCaml não é uma linguagem puramente funcional, permitindo a existência de valores mutáveis bem como de efeitos colaterais (side-efects), tipicamente existentes apenas em linguagens imperativas. Esta característica distingue-a de outras linguagens puramente funcionais, como por exemplo Haskell.
A capacidade de compilar rapidamente código nativo com bons tempos de execução, bem como uma biblioteca base extensa, têm-lhe conseguido bastante notoriedade.
Índice |
[editar] Características
- 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 (Garbage collector).
[editar] Exemplos
[editar] Comentários
(* Comentário. *)
[editar] Hello World
print_endline "Hello world!" (* Imprime "Hello world!" *)
[editar] Funções como valores
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 *)
[editar] Closures
let gen_next i = let _add x = i+x in _add ;; let f = gen_next 10 in print_int (f 5);; (* Imprime 15 *)
[editar] Factorial recursivo
let rec fact x = match x with |0->1 |_ -> x*(fact (x-1)) ;; print_int (fact 20);; (* Imprime 45350912 *)
[editar] Valores mutáveis (conhecidos como "variáveis", no estilo imperativo)
let a = ref 1;; print_int !a;; a:=!a+1;; print_int !a;; (* Imprime 1 e 2*)
[editar] Ligações internas
[editar] Ligações externas
- Homepage
- Documentos introdutórios
- Repositório de software
- Tutorial para programadores em C, C++, Java e Perl
- Livro sobre programação científica em OCaml
- Comparação de velocidade de execução com outras linguagens
- Sincronizador de ficheiros Unison
- Desenvolvendo aplicações utilizando Objective CAML
- LablGL (OpenGL+ interface)
- LablGTK (GTK+ interface)