Programação genérica usando o sistema CT

AUTOR(ES)
DATA DE PUBLICAÇÃO

2007

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 similar a 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.

ASSUNTO(S)

computação teses. programação (computadores) teses. linguagem de programação (computadores) teses.

Documentos Relacionados