Programação genérica usando o sistema CT

Detalhes bibliográficos
Autor(a) principal: Rodrigo Geraldo Ribeiro
Data de Publicação: 2007
Tipo de documento: Dissertação
Idioma: por
Título da fonte: Repositório Institucional da UFMG
Texto Completo: http://hdl.handle.net/1843/RVMR-7AAQD2
Resumo: Na última década surgiram diversas abordagens para programação genérica em Haskell: PolyP, Scrap Your Boilerplate, Derivable Type-Classes, Generic Haskell, Generics for the Masses etc. Estas abordagens variam em sofisticação e público alvo e algumas propõe extensões à linguagem de programação, enquanto outras sugerem bibliotecas.A maioria dessas abordagens utiliza uma representação para a estrutura de definição de tipos algébricos, sendo as funções genéricas definidas sobre esta representação estrutural e automaticamente instanciadas para tipos de dados definidos no programa. Nesse caso, instâncias de uma dada função genérica para diferentes tipos são definições sobrecarregadas da mesma função. SYB adota uma estratégia distinta, definindo uma biblioteca de funções genéricas que realizam travessias sobre valores de tipos de dados complexos. Tais funções genéricas podem ser usadas para definir funções que operam sobre componentes específicos de valores de tipos complexos, evitando que a definição dessas funções envolva código simples e repetitivo, responsável pela travessia de valores do tipo complexo (boilerplate code). Neste trabalho, apresentamos uma descrição sucinta dessas diversas abordagens para programação genérica, assim como uma comparação entre as abordagens mais relevantes. Com base nessa análise, propomos uma abordagem para suporte a programação genérica em uma linguagem similara Haskell, baseada no sistema de tipos CT. O sistema CT estende o sistema de Damas-Milner com suporte para sobrecarga, sem necessidade de declaração de classes de tipos, tal como em Haskell. O back-end do compilador desta linguagem foi implementado como parte deste trabalho. Além disso, foram identificadas duas extensões necessárias ao sistema CT, para prover suporte a programação genérica: polimorfismo de ordem superior e definição de funções polimórficas especializadas. Esta última extensão é baseada na idéia de definições sobrecarregadas sobrepostas para uma mesma função, que foi também implementada como parte deste trabalho.
id UFMG_d4b0671c0a090de871179e9cb5ca2693
oai_identifier_str oai:repositorio.ufmg.br:1843/RVMR-7AAQD2
network_acronym_str UFMG
network_name_str Repositório Institucional da UFMG
repository_id_str
spelling Carlos Camarao de FigueiredoCristiano Damiani VasconcellosLucilia Camarão de FigueiredoMariza Andrade da Silva BigonhaRodrigo Geraldo Ribeiro2019-08-11T00:24:23Z2019-08-11T00:24:23Z2007-12-18http://hdl.handle.net/1843/RVMR-7AAQD2Na última década surgiram diversas abordagens para programação genérica em Haskell: PolyP, Scrap Your Boilerplate, Derivable Type-Classes, Generic Haskell, Generics for the Masses etc. Estas abordagens variam em sofisticação e público alvo e algumas propõe extensões à linguagem de programação, enquanto outras sugerem bibliotecas.A maioria dessas abordagens utiliza uma representação para a estrutura de definição de tipos algébricos, sendo as funções genéricas definidas sobre esta representação estrutural e automaticamente instanciadas para tipos de dados definidos no programa. Nesse caso, instâncias de uma dada função genérica para diferentes tipos são definições sobrecarregadas da mesma função. SYB adota uma estratégia distinta, definindo uma biblioteca de funções genéricas que realizam travessias sobre valores de tipos de dados complexos. Tais funções genéricas podem ser usadas para definir funções que operam sobre componentes específicos de valores de tipos complexos, evitando que a definição dessas funções envolva código simples e repetitivo, responsável pela travessia de valores do tipo complexo (boilerplate code). Neste trabalho, apresentamos uma descrição sucinta dessas diversas abordagens para programação genérica, assim como uma comparação entre as abordagens mais relevantes. Com base nessa análise, propomos uma abordagem para suporte a programação genérica em uma linguagem similara Haskell, baseada no sistema de tipos CT. O sistema CT estende o sistema de Damas-Milner com suporte para sobrecarga, sem necessidade de declaração de classes de tipos, tal como em Haskell. O back-end do compilador desta linguagem foi implementado como parte deste trabalho. Além disso, foram identificadas duas extensões necessárias ao sistema CT, para prover suporte a programação genérica: polimorfismo de ordem superior e definição de funções polimórficas especializadas. Esta última extensão é baseada na idéia de definições sobrecarregadas sobrepostas para uma mesma função, que foi também implementada como parte deste trabalho.The last decade has seen a number of approaches to datatype-generic programming: PolyP, Scrap Your Boilerplate, Derivable Type-Classes, Generic Haskell, Generics for the Masses, etc. The approaches vary in sophistication and target audience: some propose fullblown programming languages, others suggestlibraries. Most of these approaches uses a structural representation of the definition of an algebraic data type, with generic functions defined over this structural representation and automatically instantiated for data types defined in the program. In this case, instances of a generic function for different types are overloaded. SYB adopts a different approach, by defining a library of generic combinators for the traversal of values of complex data types. These generic functions can be used to define functions that operate on specific components of these complex types, avoiding the boilerplate code involved on the traversal of the structureof values of these types.This work presents a summary of the various approaches for generic programming in Haskell and compares the most relevant ones. Based on this analysis, we propose an approach for generic programming in a language similar to Haskell, but based on System CT. System CT extends the Damas-Milner type system with support for overloading, without the need for type class declarations, as inHaskell. As part of this work, a compiler for the language Haskell-CT has been implemented, by integrated system CT's front-end with the back-end of Haskell's compiler GHC. Two fundamental extensions to System CT are identified in order to provide support for generic programming: high order polymorphism and thedefinition of specialized poli rphic functions. This last extension is based on the ideia of overlapped definitions for a function.Universidade Federal de Minas GeraisUFMGLinguagem de programação (Computadores)ComputaçãoProgramação (Computadores)sistema CTProgramação genérica usando o sistema CTinfo:eu-repo/semantics/publishedVersioninfo:eu-repo/semantics/masterThesisinfo:eu-repo/semantics/openAccessporreponame:Repositório Institucional da UFMGinstname:Universidade Federal de Minas Gerais (UFMG)instacron:UFMGORIGINALrodrigogeraldoribeiro.pdfapplication/pdf687545https://repositorio.ufmg.br/bitstream/1843/RVMR-7AAQD2/1/rodrigogeraldoribeiro.pdf90cad4f7270dece8e00a49fc6d1ffba1MD51TEXTrodrigogeraldoribeiro.pdf.txtrodrigogeraldoribeiro.pdf.txtExtracted texttext/plain288985https://repositorio.ufmg.br/bitstream/1843/RVMR-7AAQD2/2/rodrigogeraldoribeiro.pdf.txt2424bbd218da44830a674d988540b67cMD521843/RVMR-7AAQD22019-11-14 11:56:37.325oai:repositorio.ufmg.br:1843/RVMR-7AAQD2Repositório de PublicaçõesPUBhttps://repositorio.ufmg.br/oaiopendoar:2019-11-14T14:56:37Repositório Institucional da UFMG - Universidade Federal de Minas Gerais (UFMG)false
dc.title.pt_BR.fl_str_mv Programação genérica usando o sistema CT
title Programação genérica usando o sistema CT
spellingShingle Programação genérica usando o sistema CT
Rodrigo Geraldo Ribeiro
sistema CT
Linguagem de programação (Computadores)
Computação
Programação (Computadores)
title_short Programação genérica usando o sistema CT
title_full Programação genérica usando o sistema CT
title_fullStr Programação genérica usando o sistema CT
title_full_unstemmed Programação genérica usando o sistema CT
title_sort Programação genérica usando o sistema CT
author Rodrigo Geraldo Ribeiro
author_facet Rodrigo Geraldo Ribeiro
author_role author
dc.contributor.advisor1.fl_str_mv Carlos Camarao de Figueiredo
dc.contributor.referee1.fl_str_mv Cristiano Damiani Vasconcellos
dc.contributor.referee2.fl_str_mv Lucilia Camarão de Figueiredo
dc.contributor.referee3.fl_str_mv Mariza Andrade da Silva Bigonha
dc.contributor.author.fl_str_mv Rodrigo Geraldo Ribeiro
contributor_str_mv Carlos Camarao de Figueiredo
Cristiano Damiani Vasconcellos
Lucilia Camarão de Figueiredo
Mariza Andrade da Silva Bigonha
dc.subject.por.fl_str_mv sistema CT
topic sistema CT
Linguagem de programação (Computadores)
Computação
Programação (Computadores)
dc.subject.other.pt_BR.fl_str_mv Linguagem de programação (Computadores)
Computação
Programação (Computadores)
description Na última década surgiram diversas abordagens para programação genérica em Haskell: PolyP, Scrap Your Boilerplate, Derivable Type-Classes, Generic Haskell, Generics for the Masses etc. Estas abordagens variam em sofisticação e público alvo e algumas propõe extensões à linguagem de programação, enquanto outras sugerem bibliotecas.A maioria dessas abordagens utiliza uma representação para a estrutura de definição de tipos algébricos, sendo as funções genéricas definidas sobre esta representação estrutural e automaticamente instanciadas para tipos de dados definidos no programa. Nesse caso, instâncias de uma dada função genérica para diferentes tipos são definições sobrecarregadas da mesma função. SYB adota uma estratégia distinta, definindo uma biblioteca de funções genéricas que realizam travessias sobre valores de tipos de dados complexos. Tais funções genéricas podem ser usadas para definir funções que operam sobre componentes específicos de valores de tipos complexos, evitando que a definição dessas funções envolva código simples e repetitivo, responsável pela travessia de valores do tipo complexo (boilerplate code). Neste trabalho, apresentamos uma descrição sucinta dessas diversas abordagens para programação genérica, assim como uma comparação entre as abordagens mais relevantes. Com base nessa análise, propomos uma abordagem para suporte a programação genérica em uma linguagem similara Haskell, baseada no sistema de tipos CT. O sistema CT estende o sistema de Damas-Milner com suporte para sobrecarga, sem necessidade de declaração de classes de tipos, tal como em Haskell. O back-end do compilador desta linguagem foi implementado como parte deste trabalho. Além disso, foram identificadas duas extensões necessárias ao sistema CT, para prover suporte a programação genérica: polimorfismo de ordem superior e definição de funções polimórficas especializadas. Esta última extensão é baseada na idéia de definições sobrecarregadas sobrepostas para uma mesma função, que foi também implementada como parte deste trabalho.
publishDate 2007
dc.date.issued.fl_str_mv 2007-12-18
dc.date.accessioned.fl_str_mv 2019-08-11T00:24:23Z
dc.date.available.fl_str_mv 2019-08-11T00:24:23Z
dc.type.status.fl_str_mv info:eu-repo/semantics/publishedVersion
dc.type.driver.fl_str_mv info:eu-repo/semantics/masterThesis
format masterThesis
status_str publishedVersion
dc.identifier.uri.fl_str_mv http://hdl.handle.net/1843/RVMR-7AAQD2
url http://hdl.handle.net/1843/RVMR-7AAQD2
dc.language.iso.fl_str_mv por
language por
dc.rights.driver.fl_str_mv info:eu-repo/semantics/openAccess
eu_rights_str_mv openAccess
dc.publisher.none.fl_str_mv Universidade Federal de Minas Gerais
dc.publisher.initials.fl_str_mv UFMG
publisher.none.fl_str_mv Universidade Federal de Minas Gerais
dc.source.none.fl_str_mv reponame:Repositório Institucional da UFMG
instname:Universidade Federal de Minas Gerais (UFMG)
instacron:UFMG
instname_str Universidade Federal de Minas Gerais (UFMG)
instacron_str UFMG
institution UFMG
reponame_str Repositório Institucional da UFMG
collection Repositório Institucional da UFMG
bitstream.url.fl_str_mv https://repositorio.ufmg.br/bitstream/1843/RVMR-7AAQD2/1/rodrigogeraldoribeiro.pdf
https://repositorio.ufmg.br/bitstream/1843/RVMR-7AAQD2/2/rodrigogeraldoribeiro.pdf.txt
bitstream.checksum.fl_str_mv 90cad4f7270dece8e00a49fc6d1ffba1
2424bbd218da44830a674d988540b67c
bitstream.checksumAlgorithm.fl_str_mv MD5
MD5
repository.name.fl_str_mv Repositório Institucional da UFMG - Universidade Federal de Minas Gerais (UFMG)
repository.mail.fl_str_mv
_version_ 1803589490061606912