OCaml
Este artigo não cita fontes confiáveis. (Fevereiro de 2014) |
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 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
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
- 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)