A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Tópicos Avançados em Linguagens Computacionais – IF724

Apresentações semelhantes


Apresentação em tema: "Tópicos Avançados em Linguagens Computacionais – IF724"— Transcrição da apresentação:

1 Tópicos Avançados em Linguagens Computacionais – IF724
Tópicos Avançados em Linguagens Computacionais – IF724 ML OCAML FSHARP Leandro Mitsuo Rodrigo Lumack Professor: André Santos

2 Linguagens Funcionais
Programação Funcional Ênfase na avaliação de expressões Expressões são formadas por funções que combinam valores básicos Funções podem ou não ter argumentos e um simples valor de retorno Funções podem ser nomeadas ou anônimas (lambda)

3 Linguagens Funcionais Vantagens
Maior concisão Maior elegância (facilidade de compreensão) Ausência de “core dumps” É impossível tratar um inteiro como um ponteiro ou haver referências nulas Reuso de código (através de polimorfismo) Alta abstração e modularização Funções de alta ordem Gerenciamento automático de memória

4 Linguagens Funcionais Desvantagens
Bibliotecas com recursos limitados Incompatibilidade com outras tecnologias Instalação de compiladores e interpretadores complicada Pouco difundidas Não podem ser utilizadas em sistemas onde a performance é crítica

5 História das Linguagens Funcionais
Primeira linguagem de programação funcional: Lambda Calculus Não foi projetada para ser executada por um computador Desenvolvida por Alonzo Church na década de 30 LISP Desenvolvida por John McCarthy no MIT na década de 50 SCHEME Tentativa de simplificar LISP ML Desenvolvida na década de 70 na Universidade de Edimburgo por Robin Milner

6 História das Linguagens Funcionais
Miranda Anos 70 em Kent Haskell Anos 80 Outras SML, SML/NJ, MOSML, CAML, CAML Light, OCAML, FSharp

7 ML – Meta Language Características
Influenciou o desenvolvimento de Haskell, Cyclone, Nemerle, OCAML Estaticamente Tipada Fortemente Tipada Inferência de tipo fun fac : (int -> int) 0 = 1 | fac n = n * fac (n-1); : (int -> int) é opcional fun fac 0 = 1 | fac n = n * fac(n-1);

8 ML – Meta Language Características
Suporte a valores estruturados: tuplas, listas, árvores Exemplos de tuplas val pair = (1,"abc"); val pair = (1,"abc") : int * string val triple = (1,true,1.0); val triple = (1,true,1.0) : int * bool * real

9 ML – Meta Language Características
Exemplos de Listas val l = [1,2,3]; val l = [1,2,3] : int list Operações sobre a lista hd l; val it = 1 : int tl l; val it = [2,3] : int list tl(tl(tl l)); val it = [] : int list

10 ML – Meta Language Características
Exemplo de árvores Declarando o tipo árvore binária datatype ’a bintr = LEAF of ’a | NODE of ’a bintr*’a bintr; Criando uma árvore binária val tree = NODE (NODE(LEAF 1,LEAF 4),LEAF 7);

11 ML – Meta Language Características
Funções de alta ordem Exemplo Declaração de um map fun map f [] = [] | map f (h::t) = (f h)::(map f t); Utilizando o map map (fn x=> x+1) [1,2,3]; val it = [2,3,4] : int list map (fn x=> [x]) [1,2,3]; val it = [[1],[2],[3]] : int list list

12 ML – Meta Language Características
Polimorfismo paramétrico Exemplo fun mklist x = [x]; val mklist = fn : ’a -> ’a list mklist 1; val it = [1] : int list mklist (mklist 1); val it = [[1]] : int list list mklist (mklist “a”); val it = [[“a”]] : string list list

13 ML – Meta Language Outras Características
Chamada por valor (call-by-value evaluation) Gerenciamento de memória automático : Garbage Collection Tipos de dados algébricos Casamento de padrões Utiliza eager evaluation: ganha memória e velocidade, mas não pode usar listas infinitas

14 ML – Meta Language Características Imperativas
Referências São como ponteiros em C e C++ Exemplos: Ponteiro para inteiro val iRef = ref 7; val iRef = ref 7 : int ref Ponteiro para função fun id x = x; val id = fn : ‘a -> ‘a val fRef = ref id; val fRef = ref fn : ‘a -> ‘a ref

15 ML – Meta Language Características Imperativas
Arrays Coleções de dados homogêneos fortemente tipados Podem ser atualizados Exemplos A partir de uma lista val l = [3, 5, 1]; val l = [3,5,1] : int list val a = Array.fromList l; val a = [|3,5,1|] : int array Especificando o tamanho e um valor default Array.array (3, “jaca"); val it = [|“jaca"," jaca "," jaca"|] : string array A partir de uma função Array.tabulate (4, fn x => x + 2); val it = [|2,3,4,5|] : int array

16 ML – Meta Language Características Imperativas
Vetores São como arrays, mas não podem ser atualizados e fornecem acesso aleatório Exemplos A partir de uma lista Vector.fromList ["alpha", "beta", "gamma", "delta"]; val it = #["alpha","beta","gamma","delta"] : string vector A partir de um array val a = Array.tabulate (4, fn x => x + 2); val a = [|2,3,4,5|] : int array val v = Array.extract (a, 1, SOME(2)); val v = #[3,4] : int vector

17 ML – Meta Language Características Imperativas
Exceções Exemplo fun illustrate1 i = if i > 0 then i - 1 else raise Example; val illustrate1 = fn : int -> int fun ill2 j = illustrate1 j handle Example => (print "Example raised!\n"; 0); val ill2 = fn : int -> int ill2 17; val it = 16 : int ill2 0; Example raised! val it = 0 : int

18 ML – Meta Language Uso Compiladores Analisadores Provadores de teorema Bio-Informática Sistemas Financeiros Aplicações com banco de dados genealógicos Programas cliente/servidor

19 OCAML – Objective CAML Desenvolvida por Xavier Leroy, Jérôme Vouillon, Damien Doligez e Didier Rémy em 1996 Open Source mantida pelo INRIA (licença LGPL) Derivada de ML herdando suas principais características Fortemente tipada Estaticamente tipada Inferência de tipos Multi-paradigma Funcional Imperativo Orientação a objeto Dá ênfase em performance Compilador gera código otimizado Segundo Xavier Leroy, alcança 50% da performance de um código C

20 OCAML – Objective CAML O compilador gera código nativo para as plataformas: Windows, Unix e Mac OS X Excelente portabilidade IA32, AMD64, PowerPC, Sparc, IA64, Alpha, HP/PA, MIPS e StrongARM Possibilidade de uso de Multithread Porém o Garbage Collector não foi projetado para dar suporte a concorrência

21 OCAML – Objective CAML Exemplo Declarando Classe #class point = object
val mutable x = 0 method get_x = x method move d = x <- x + d end;;

22 OCAML – Objective CAML Exemplo Instanciando #let p = new point;;
Invocando Métodos #p#get_x;; - : int = 0   #p#move 3;; - : unit = ()   - : int = 3

23 OCAML – Objective CAML Aplicações
Uso Comercial Slam Project da Microsoft Técnicas de análise estática para encontrar bugs em device drivers Software financeiro da LexiFi Med-Sumo Sistema de bio-informática distribuído pela empresa Medit Merjis Ltd é uma empresa especializada em web marketing que possui diversas ferramentas de uso interno desenvolvidas em OCAML

24 OCAML – Objective CAML Aplicações
Utilitários MLDonkey Programa p2p Unison Sincronizador de arquivos Texvc Um compilador TeX Educacionais GeoProof Software de geometria MinCaml Pequeno tutorial de compilador

25 OCAML – Objective CAML Aplicações
Engenharia Confluence Gera lógica digital para FPGA ou código C para softwares de tempo real Entretenimento Desenvolvimento de jogos simples Gerador de labirinto 2D Solucionador de Sudoku Dominó Simulador de gravidade

26 OCAML – Objective CAML Aplicações
Ciência Provador de teoremas HOL Sistema de gerenciamento de provas formais Orpie Uma calculadora para console

27 FSharp Combinação da eficiência, scripting, sistema de tipos forte e produtividade de ML com a estabilidade, bibliotecas, compatibilidade (cross-language) e ferramentas de .NET Multi-paradigma Funcional Orientada a objetos

28 FSharp Fornece a combinação de: Scripting interativo (como Python)
A base para ambientes de visualização de dados interativos (como o MatLab) Sistema de tipos forte e inferência de tipos (de ML) Alta performance (de C#) Fácil acesso às bibliotecas da .NET e ferramentas de banco de dados Baseada em simplicidade (como Scheme) Integração com o Visual Studio A velocidade de execução de código nativo da plataforma .NET

29 FSharp É uma variante de ML
Compartilha o núcleo da linguagem com OCaml Ao contrário de outras linguagens de script, F# roda na mesma (ou quase mesma) velocidade de C# ou C++ Performance através de sistema de tipos forte

30 FSharp C# e F# podem se chamar diretamente
F# tem acesso imediato à API da plataforma .NET, incluindo, por exemplo, WinForms e DirectX Bibliotecas desenvolvidas em F# podem ser utilizadas por outras linguagens .NET F# também é compatível Caml Poucas mudanças de pré-compilação são necessárias Facilita porting de código escrito em Caml para .NET

31 FSharp Objetivos Resolver os 7 grandes problemas que levam ao desuso de linguagens funcionais Bibliotecas Acesso às bibliotecas .Net sem necessidade de wrappers Portabilidade Através de .NET Disponibilidade Pacotes Assemblies de .NET provêm mecanismo de pacotes Ferramentas Integração com o Visual Studio Treinamento Popularidade Projeto similar ao OCaml

32 FSharp Áreas de Aplicação
Programação orientada à Matemática Desenvolvimento de aplicações científicas e de engenharia Implementação de análises simbólicas sofisticadas Verificação de hardware Verificação de software Otimização Aprendizagem de máquina Desenvolvimento de compiladores

33 F# within .NET C# VB ML F# CLR GC, JIT, NGEN etc. Debuggers System.I/O
Profilers, Optimizers etc. System.Windows.Forms Avalon etc. VB ML F# Debuggers System.I/O System.Net etc. Sockets etc. ASP.NET

34 F# as a Language F# OCaml Core Core ML ML Other .NET API extensions
Powerful, simple programming language Core ML Core ML Modules-as- values “OCaml-Objects” Other extensions .NET API Access + tools + tools F# OCaml

35 FSharp Observações F# é: Excelente para utilizar bibliotecas .NET
Excelente para escrever bibliotecas ML OK em tornar bibliotecas ML usáveis por .NET O objetivo é escrever programas que: Utilizam componentes .NET Necessitam de processamento simbólico Utilizam componentes escritos em C#

36 F#, the CLR & .NET Generics
VB VC++ C# ... F# MS-IL F# trabalha com ou sem generics Dá suporte a generics e polimorfismo Common Language Runtime Loader JIT Verifier ... GC Native Code

37 F# v1.0 O núcleo e o compilador da linguagem estão estáveis
É utilizado internamente pela Microsoft Integração com o Visual Studio 2005 Beta 1 Compatibilidade com biblioteca ML


Carregar ppt "Tópicos Avançados em Linguagens Computacionais – IF724"

Apresentações semelhantes


Anúncios Google