OCaml
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) |
| Criado por | INRIA |
| Estilo de tipagem |
|
| Dialetos: |
|
| Influenciada por |
|
| Influenciou | |
| Sistema operacional | Multiplataforma |
| Licença: | Q Public License (compilador) LGPL (biblioteca) |
| Extensão do arquivo: |
|
| Página oficial | ocaml |
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
- 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
Comentários
(* Comentário... *)
Olá Mundo
print_endline "Hello world!"
(* Imprime "Hello world!" *)
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 *)
Closures
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
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)
let a = ref 1;;
print_int !a;;
a:=!a+1;;
print_int !a;;
(* Imprime 1 e 2*)
Ver também
Ligações externas
- Sítio oficial
- Documentos introdutórios
- Repositório de software
- Tutorial para programadores em C, C++, Java e Perl
- 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)