Baixe o app para aproveitar ainda mais
Prévia do material em texto
Haskell Uma Linguagem Funcional UNIVERSIDADE FEDERAL DOS VALES DO JEQUITINHONHA E MUCURI DIAMANTINA – MINAS GERAIS Sistemas de Informação – FACET/UFVJM Diamantina, 13 de Agosto de 2016. Vinicius Ribeiro Tâmela Freitas Sumário • Introdução • História • Paradigma de Programação • Utilização • Sintaxe • Especificação • Implementação • Ambientes de Desenvolvimento • Exemplos de Programas • Vantagens e Desvantagens • Conclusões • Referências 2 Introdução • Atualmente no mercado, diversos são paradigmas utilizados na programação, e consequentemente diversas também são as linguagens de programação existentes pra suprir diferentes necessidades. • O foco desse trabalho é a linguagem Haskell, desenvolvida especificamente para programação em paradigma funcional . • A Haskell foi desenvolvida para uso em diversos tipos de aplicações. Tanto para lecionar como para desenvolvimento de produtos de softwares comerciais • O propósito inicial da linguagem era ter uma proposta de ser aberta e disponível a qualquer um livremente.. 3 História • Tudo começou por volta de 1930 quando os matemáticos Stephen Kleene e Alonzo Church apresentaram o λ-cálculo, que seria uma teoria de funções, que tinha intensão de fundamentar teoricamente as linguagens de programação funcional. • Baseado no λ-cálculo, em 1985 foi apresentada a linguagem Miranda. A primeira linguagem de programação Funcional. • Era muito eficiente, mas não tinha um livre domínio. • Com o sucesso de Miranda, começaram a emergir inúmeras outras linguagens funcionais e o mercado começou a ficar poluído. 4 História • Para criar um padrão que fosse aberto para as linguagens funcionais, foi realizada em Oregon nos EUA, em setembro de 1987, uma conferência nomeada como Linguagens de Programação Funcional e Arquitetura de Computadores. (FPCA ‘87). • Em 1988, finalmente definiram algumas primeiras metas da linguagem. A linguagem seria de fácil ensino, deveria ser escrita completamente baseada em sintaxe e semântica formais, além de ter livre disponibilidade. • Seu nome foi dado em homenagem ao matemático Haskell Curry. • Hoje ainda a universidade de Yale administra e estuda a linguagem. 5 Paradigma de Programação • A linguagem Haskell é completamente baseada no paradigma de programação funcional. • O objetivo do projeto de uma linguagem de programação funcional é imitar na programação o comportamento das funções matemáticas, ao máximo possível. • A primeira linguagem de programação funcional foi criada para oferecer recursos de linguagem para processamento de listas, nas primeiras aplicações da área de inteligência artificial. • Principal motivação para linguagens baseadas em paradigmas funcionais, foi o começar a ter processos mais simples e baratos para criação e manutenção de sistemas de maior porte. 6 Paradigma de Programação • No modelo de paradigma funcional qualquer código vai ser escrito estruturado na forma de um conjunto de funções sendo definidas e recebendo valores os quais o usuário vai aplicar. Enquanto isso, no modelo do paradigma imperativo, o código é composto por um segmento de instruções capazes de mudar células na memória, durante sua execução. • Peculiaridades de uma linguagem puramente baseada no paradigma funcional são facilmente notadas, como por exemplo, a não alocação de forma explícita de memória, nem declaração explícita de variáveis, ou a ausência de laços. 7 Utilização • Uma das grandes vantagens da programação funcional, é com certeza a facilidade para dar manutenção em produtos finais. • Esse tem sido o principal atrativo da linguagem, para atrair os olhares do mercado comercial. • Entre as empresas que usam Haskell, podemos citar: • Intel: A Intel desenvolveu um compilador Haskell. • Google: Éusado em um pequeno número de projetos internos. • Facebook: Usa Haskell internamente em algumas ferramentas. (Lex-Pass). • The New York Times: Uma equipe usou uma biblioteca matriz paralela de Haskell para processar imagens em 2013. • A Linux desenvolveu diversas das suas ferramentas do seu sistema em Haskell. 8 Sintaxe • Sobre a sintaxe podemos dizer que a linguagem tenta imitar ao máximo as notações que já são populares na matemática. • Isso é facilmente percebido a partir das funções base da linguagem : • sin - seno de angulo • tan - tangente • sqrt - raiz quadrada • exp - exponencial • log - logaritmo natural • max - maior de 2 objetos dados • lcm - mínimo múltiplo comum 9 Sintaxe • Algumas convenções básicas importantes são apresentadas em comparação com a matemática: 10 p ç Sintaxe • Mais exemplos de sintaxe: • Soma dos Elementos sum [1,2,3,4,5] 15 • Comprimento length [1,2,3,4,5] 5 • Obter um Prefixo take 3 [1,2,3,4,5] [1,2,3] • Inverter everse [1,2,3,4,5] [5,4,3,2,1] 11 Sintaxe • Os comentários: Simples: Iniciados por -- e valem para toda a linha comentada. Embricados: São marcados pelas delimitações {- e -}. • Identação: 12 Sintaxe Nesse exemplo a tag let atribui nome para funções temporárias. No código a tag case cria uma condicional múltipla, e o _ representa algo como ‘os demais casos’ . 13 Especificação lA primeira especificação da linguagem foi elaborada em 1990. lA especificação mais atual é fo Report de 1998, mais conhecido como Haskell 98 Report, que já foi revisada em 2003. 14 Implementação l O compilador mais popular de Haskell é o GHC. l Quando você tiver o GHC instalado, vão ter dois programas o ghc e o ghci. l O ghc compila código Haskell para executáveis e o ghci é um interpretador interativo que permite que você escreva código Haskell e tenha o retorno imediato. 15 Ambientes de Desenvolvimento l O ghci é um interpretador muito importante para quem deseja estuda Haskell, pois através dele é possível: ü Rodar trechos específicos do sistema, para testar o comportamento; ü Testar as funções separadamente; ü Obter informações detalhadas sobre funções e variáveis; ü Carregar/Descarregar módulos e usar seus tipos e funções; ü Realizar avaliações de expressões; etc 16 Exemplos de Programas • Faremos um comparativo entre as linguagens C++ e Haskell para mostrar a diferença entre as linguagens Imperativas e Funcionais. Utilizaremos o algoritmo Quicksort. 17 Exemplos de Programas l O Quicksort é um algoritmo de ordenação que recebe um vetor A[p..r] e rearranja o vetor em ordem crescente, é um método de ordenação muito rápido e eficiente. l Foi inventado por C.A.R. Hoare em 1960, quando visitou a Universidade de Moscovo como estudante. 18 QuickSort em C++ 19 QuickSort em Haskell 20 Vantagens l Inferência de dados é feita automaticamente, baseada no programa. l Avaliação Lazy. l Polimorfismo. l Funções de Ordem Superior. l As estruturas de dados pode ter tamanho infinito, como por exemplo as listas. l Não tem variáveis globais ou desvios incondicionais. 21 Desvantagens lAvaliação Lazy, só serão avaliados os parâmetros no corpo daquela função quando é utilizado. lOs detalhes de baixo nível da avaliação lazy são complicados, podendo perder um pouco de eficiência. lExecução lenta. lAlto consumo de memória. 22Conclusão • Apesar ainda de ter pouca notoriedade ainda em relação à outras linguagens já consolidadas como C, Java ou C#, sua ascendência vem sido notória. • Através de estudos da literatura, também foi notório o anseio que a sociedade da computação tem para com o segmento da portabilidade. • Para aprender os princípios de Haskell é bastante recomendado que se aprenda previamente outras linguagens preferencialmente imperativas e, principalmente, ferramentas matemáticas como a indução, por exemplo. 23 Referências • Haskell: uma linguagem de programação ideal para matemáticos, Costa, E. T., et al., CAJ/UFG, 2013. • Programação Funcional Haskell, Caetano, M. F., INE, 2001; • Programação Funcional com a Linguagem Haskell, Bois, A. R., MACS.HW, 2005; • A Linguagem Funcional Haskell, Piffer, M. M., et al.,UFSC, 2002 ; • Programação Funcional, Vasconcelos, P., DCC/FCUP, 2013; • Haskell Programming Language. 2011. Site ofcial da linguagem Haskell. Disponível em: http://www.haskell.org/haskellwiki/Haskell. Acessado em: 06 agosto. 2016 24 Dúvidas 25
Compartilhar