Programação Funcional. Capítulo 2. OCaml. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2015.

Documentos relacionados
Programação Funcional. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2012.

ISBN. Impresso e PDF: EPUB: MOBI:

Programação Funcional

Linguagens de Programação e Programação Funcional

Universidade Estadual de Santa Cruz

Linguagens de Programação Funcional

Casa do Código Livros para o programador Rua Vergueiro, º andar Vila Mariana São Paulo SP Brasil

Introdução ao Python. Programa Computacional

Python - Variáveis e expressões

1 Introdução à Programação O que é? Para que serve?... 1

Construção de Compiladores. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2014.

Programação Estruturada e OO Aula 1.2 Introdução a Paradigmas de Programação. Prof. Bruno Moreno

Programação de Computadores I

Fabiano Moreira.

Introdução à Programação Aula 03. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Métodos de implementação de linguagens. Kellen Pinagé

Programação I A Linguagem C. Prof. Carlos Alberto

Informática Parte 15 Prof. Márcio Hunecke

Linguagens de Programação Programação Funcional (Haskell)

Noções de sistemas de computação

Capítulo 1. Aspectos Preliminares

Universidade Estadual De Santa Cruz (UESC)

Laboratório de Programação 1 Algoritmos e a Lógica de Programação

Questões de Paradigmas de Programação Matéria: Prova 1 4ª EDIÇÃO

Paradigmas de Linguagem de Programação. Aspectos Básicos

Programação Funcional. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2013.

Conceitos de Linguagens de Programação - Características. Paavo Soeiro

Implementação de Linguagens

Paradigmas de Programação

Prof. Natalia Castro Fernandes Mestrado em Telecomunicações UFF 2º semestre/2012

Provadores de Teoremas e suas Aplicações. Prof. Marcus Ramos 13 de Julho de 2018 UNIVASF

Algoritmos e Programação

SEMÂNTICA. Rogério Rocha. rode = program simples = var x : int := 3 in x := x + 5 end.

Principais paradigmas de programação. Programação imperativa Programação funcional Programação lógica Programação OO

Linguagens de Programação

Linguagens de Programação

Paradigmas de Programação

MC-102 Aula 01. Instituto de Computação Unicamp

PROGRAMAÇÃO I. Introdução

Algoritmos e Programação

Introdução à Programação

Implementação de Linguagens

1 a Aula. Mestrado em Engenharia Física Tecnológica

Compiladores. Introdução

Lista de Linguagens de Programação 7

3. Linguagem de Programação C

Noções de compilação

Gabriel Giorisatto De Angelo Luiz Otávio Gerhardt Fernandes

Programas Interativos

Instalação JDK. Joyce França. Professora de Ciência da Computação - IFNMG

Noções de compilação

Linguagem de Programação I Prof. Tiago Eugenio de Melo.

Programação Python. Nesta aula... 1 Programação. 2 Python. Operadores e Operandos Variáveis, Expressões, Instruções Funções Ciclos Comentários

Instalação JDK 10/03/2017

O AMBIENTE DE DESENVOLVIMENTO

INFORMÁTICA: Informação automática

Linguagem Funcional Haskell

Compiladores. Fabio Mascarenhas

Ederson Luiz da Silva Ciência da Computação. Algoritmos e Programação

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Introdução. Geovane Griesang

Paradigmas de Linguagem de Programação

Como construir um compilador utilizando ferramentas Java

Obs.: para realizar estas atividades tenha certeza de que já tenha instalado no sistema operacional o Java JDK e o NetBeans.

Conceito de Linguagens de Programação - 1

Simulação de Caixa Automático

Programação Funcional

Linguagem de Programação II Programação Orientada a Objetos. Ambientes de Programação

Linguagem Técnica I. Prof. Jonatas Bastos

Shell Script. Básico do básico

HASKELL. Breno Simão Boscaglia Pablo Santana Satler Ramon Pereira de Matos

Programação para Servidores. Cassio Diego

PLANO DE UNIDADE DIDÁTICA- PUD

JAVA. Professor: Bruno Toledo

Introdução aos computadores, à Internet e à World Wide Web. Prof. Marcelo Roberto Zorzan

Puca Huachi Vaz Penna

COMPILAÇÃO. Ricardo José Cabeça de Souza

Linguagens de Programação

Programação de Computadores

Programação de Computadores

Fundamentos de Lógica e Algoritmos. Aula 3.1 Introdução a Python. Prof. Dr. Bruno Moreno

Capítulo 5. Nomes, Vinculações e Escopos

PROGRAMAÇÃO EM JOGOS DIGITAIS

PROGRAMAÇÃO FUNCIONAL [BCC222] 1 Jogo Adivinha o Número. Teste 4 (2018 1) 23 de maio de 2018 Matrícula: Nome:

FERRAMENTA DE AUXÍLIO AO PROCESSO DE DESENVOLVIMENTO DE SOFTWARE INTEGRANDO TECNOLOGIAS OTIMIZADORAS

Programação Estruturada

Linguagens de Programação

Fundamentos de Lógica e Algoritmos. Aula 3.1 Introdução a Programação. Prof. Dr. Bruno Moreno

Introdução à plataforma Java

Programação para Servidores. Cassio Diego

Programação: Compiladores x Interpretadores PROF. CARLOS SARMANHO JR

V.2 Especificação Sintática de Linguagens de Programação

Linguagens de Programação Classificação

Programação de Computadores

Introdução. PCO / PPO Departamento de Informática Faculdade de Ciências da Universidade de Lisboa

Linguagens de Programação. Introdução. Carlos Bazilio

Java Standard Edition (JSE)

Transcrição:

Programação Funcional Capítulo 2 OCaml José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2015.1 1/27

1 História 2 Características de OCaml 3 Usos e Aplicações 4 O Sistema OCaml 2/27

Tópicos 1 História 2 Características de OCaml 3 Usos e Aplicações 4 O Sistema OCaml 3/27

Histórico das linguagens funcionais Década de 1930: Alonzo Church desenvolve o cálculo lambda, uma teoria de funções simples, mas poderosa. 4/27

Histórico das linguagens funcionais (cont.) Década de 1950: John McCarthy desenvolve Lisp, a primeira linguagem funcional, com algumas influências do cálculo lambda, mas mantendo as atribuições de variáveis. 5/27

Histórico das linguagens funcionais (cont.) Década de 1960: Peter Landin desenvolve ISWIM, a primeira linguagem funcional pura, baseada fortemente no cálculo lambda, sem atribuições. 6/27

Histórico das linguagens funcionais (cont.) Década de 1970: John Backus desenvolve FP, uma linguagem funcional que enfatiza funções de ordem superior e raciocínio sobre programas. 7/27

Histórico das linguagens funcionais (cont.) Década de 1970: Robin Milner e outros desenvolvem ML, a primeira linguagem funcional moderna, que introduziu a inferência de tipos e tipos polimórficos. 8/27

Histórico das linguagens funcionais (cont.) Décadas de 1970 e 1980: David Turner desenvolve uma série de linguagens funcionais com avaliação lazy, culminando com o sistema Miranda. 9/27

Histórico das linguagens funcionais (cont.) 1987: Um comitê internacional de pesquisadores inicia o desenvolvimento de Haskell, uma linguagem funcional lazy padrão. 10/27

ML OCaml começou com a ML original criada na universidade de Edinburgo por Robin Milner, no começo da década de 1970. ML significa Meta Language pois ela foi feita para funcionar como a meta-linguagem do provador de teoremas LCF. Os primeiros usuários de ML perceberam que ela funcionava bem para programar outras coisas, então ela foi separada do seu sistema de origgem. 11/27

CAML Várias variações de ML foram desenvolvidas em universidades e institutos da Europa. No INRIA1 Pierre-Louis Curien criou a Categorial Abstract Machine (CAM), uma máquina virtual e modelo de computação adequado para execução de linguagens funcionais. Gérard Huet e outros pesquisadores criaram uma versão de ML usando a máquina CAM, e a chamaram de CAML, em meados da década de 1980. Como o código executado por CAML era lento e usava muita memória, Xavier Leroy e Damien Doligez criaram Caml Light no início da década de 1990, muito mais rápida e compacta. A linguagem foi estendida na década de 1990 para incluir suporte a orientação a objetos, resultando em Objective Caml. Em 2011 o nome foi mudado para OCaml. 1O INRIA (Institute national de recherche en informatique et en automatique) é uma organização pública francesa de carácter científico e tecnológico. 12/27

Tópicos 1 História 2 Características de OCaml 3 Usos e Aplicações 4 O Sistema OCaml 13/27

Algumas características de OCaml Estaticamente tipada Inferência de tipos Orientada a expressões Compilação nativa ou para bytecode Uso interativo ou em batch Tipos algébricos e casamento de padrão Módulos Objetos e classes Avaliação estrita 14/27

Por que OCaml? Aprendizagem de um novo paradigma de programação. Desempenho e expressividade Programas escritos em OCaml tendem a ter desempenho mais próximo de linguagens como C++, mas com código mais sucinto, geralmente mais próximo de linguagens como Python e Ruby. 15/27

Tópicos 1 História 2 Características de OCaml 3 Usos e Aplicações 4 O Sistema OCaml 16/27

Usos e aplicações OCaml não é somente experimental. Existem aplicações de complexidade e tamanho significativos escritos em OCaml. Estas aplicações tendem a ser de domínios realativamente complexos ou que usam pesquisas de ponta. Algumas delas funcionam em ambientes que requer alta confiabilidade. 17/27

Usos e aplicações (cont.) Jane Street Capital empresa financeira especializada na compra e venda de produtos financeitos em alta frequência (Hight-Speed Trading). Coq sistema assistente para provas que pode ser usado para auxílio na prova de teoremas matemáticos (e verificar as provas criadas), para verificação de outros sistemas de software (provar que um programa segue sua especificação), e como sistema de programação, para criar os chamados produtos certificados. Mirage OS sistema operacional criado especificamente para a computação em nuvens. Microsoft criou o projeto SLAM que resultou na ferramenta SDV (Static Driver Verifier) para verificação de drivers. Facebook compilador da linguagem Hack e algumas ferramentas internas. 18/27

Tópicos 1 História 2 Características de OCaml 3 Usos e Aplicações 4 O Sistema OCaml 19/27

Ferramentas da distribuição OCaml ocamlc: compilador para bytecode. ocamlopt: compilador para código nativo. ocaml: ambiente interativo. ocamldoc: gerador de documentação baseado em comentários. ocamlbuild: ferramenta para compilação de projetos OCaml. ocamldep: analisador de dependências entre módulos, geralmente usado para determinar a ordem de compilação dos arquivos. ocamllex e ocamlyacc: geradores de analisadores léxicos e sintáticos, usados principalmente na criação de compiladores e interpretadores para linguagens de programação. ocamlmktop: possibilita a criação de ambientes interativos customizados para OCaml. 20/27

O ambiente interativo REPL (Read Eval Print Loop): lê declarações e expressões digitadas pelo usuário, compila-as para bytecode, e executa-as. Útil para testar e explorar novas idéias. O ambiente interativo padrão (ocaml) tem algumas deficiências, como por exemplo a edição da entrada é bastante básica e não há suporte para um histórico de linhas digitadas. Sugestão: Adicionar estas capacidades usando utilitários como ledit ou rlwrap. Sugestão: usar o ambiente interativo alternativo utop, que é bastante melhorado. 21/27

Pacotes e bibliotecas findlib: ferramenta para instalação, gerenciamento e uso de bibliotecas usando a ferramenta ocamlfind. OPAM (OCaml Package Manager): sistema de gerenciamento de pacotes avançado com resolução de dependência. Ainda não disponível para Windows. 22/27

Editores Vários editores suportam a linguagem OCaml: Emacs, VIM, Sublime Text, Textmate, Atom, etc. 23/27

Usando o ambiente interativo No ambiente interativo do OCaml podemos digitar expressões e declarações da linguagem OCaml. Elas são compiladas e avaliadas, e o tipo e o valor obtido são exibidos. O ambiente interativo padrão pode ser iniciado a partir de um terminal usando o comando ocaml. Em um sistema Unix: $ ocaml OCaml version 4.01.0 # 24/27

Usando o ambiente interativo (cont.) Para adicionar facilidades de edição da linha de entrada e histórico, use os utilitários ledit ou rlwrap: Em um sistema Unix: $ rlwrap ocaml OCaml version 4.01.0 # 25/27

Usando o ambiente interativo (cont.) Expressões da linguagem OCaml podem ser digitadas no prompt. A entrada deve ser encerrada com dois sinais de ponto-e-vírgula: ;; Por exemplo: # 2 + 3*4;; - : int = 14 # (2 + 3)*4;; - : int = 20 # print string "Hello, world!\n";; Hello, world! - : unit = () Observe que o ambiente interativo responde informando o tipo e o valor calculados. 26/27

Fim 27/27