| Nome: | Descrição: | Tamanho: | Formato: | |
|---|---|---|---|---|
| 3.42 MB | Adobe PDF |
Autores
Orientador(es)
Resumo(s)
Generics are a key ingredient of modular program design in modern programming lan-
guages. This feature, which is absent from the Go programming language, has consis-
tently been the most requested among Go developers. The Go Team has been examining
how to add generics to the language for years, and recently approved a language change
proposal that includes support for generics. The proposal suggests a design based on type
parameters, backed by the foundational work on Featherweight (Generic) Go. However,
the proposal’s design further includes some features which were not investigated in a
formal setting, opening the door to unforeseen interactions between features that might
only be acknowledged too late into the design process.
In particular, the features to be considered are primitive types and operations, type
lists in interfaces and inference of type parameters. Primitive types present some chal-
lenges related to the heterogeneity they exhibit and the distinction Go makes between
values of primitive type and untyped constants; type lists in interfaces arise as a solution
to allow primitive operations between values of (generic) variable type, but introduce
some intricacies since they represent both a union of types and an intersection of opera-
tors; type parameter inference doesn’t add any functionality to the formal design, but its
interference with the type system must still be accounted for.
We have designed and developed an implementation of the above features in the
theoretically driven implementation of Featherweight (Generic) Go, which includes a
type checker, an interpreter and a monomorphiser. We show how the system can be
formally extended to account for this extended feature set. The implementation includes
run time validation of type preservation, which supports the correctness of our formal
design.
Os genéricos são um ingrediente chave para um desenho modular de programas em lin- guagens de programação modernas. Esta feature, ausente da linguagem de programação Go, tem sido consistentemente a mais pedida entre os programadores de Go. A Go Team tem vindo a examinar como adicionar genéricos à linguagem há anos, e recentemente aprovou uma language change proposal que inclui suporte para genéricos. A proposta su- gere um desenho baseado em parâmetros de tipo, apoiada pelo trabalho fundamental no Featherweight (Generic) Go. Contudo, o desenho da proposal inclui ainda features que não foram investigadas num contexto formal, abrindo espaço para interações imprevistas entre features, que poderão só ser descobertas demasiado tarde no processo de desenho. Em particular, as features visadas são: tipos e operadores primitivos, listas de tipos em interfaces e inferência de parâmetros de tipo. Os tipos primitivos levantam desafios relacionados com a heterogeneidade que exibem, além da distinção que há em Go entre valores de tipo primitivo e untyped constants; as listas de tipos em interfaces surgem como uma solução para permitir operações primitivas entre valores de tipos genéricos, mas introduzem algumas dificuldades já que representam tanto uma união de tipos como uma interseção de operadores; a inferência de parâmetros de tipo não adiciona funcionalidade ao desenho formal, porém deve ter-se em conta a sua interferência com o sistema de tipos. Desenhou-se e desenvolveu-se uma implementação destas features no protótipo gui- ado pela teoria do Featherweight (Generic) Go, que inclui um type checker, um interpre- tador e um monomorfizador. Neste documento mostra-se como se pode estender formal- mente o sistema de forma a considerar este conjunto alargado de features. A implementa- ção inclui uma verificação em run time da preservação de tipos, o que suporta a correção deste desenho formal.
Os genéricos são um ingrediente chave para um desenho modular de programas em lin- guagens de programação modernas. Esta feature, ausente da linguagem de programação Go, tem sido consistentemente a mais pedida entre os programadores de Go. A Go Team tem vindo a examinar como adicionar genéricos à linguagem há anos, e recentemente aprovou uma language change proposal que inclui suporte para genéricos. A proposta su- gere um desenho baseado em parâmetros de tipo, apoiada pelo trabalho fundamental no Featherweight (Generic) Go. Contudo, o desenho da proposal inclui ainda features que não foram investigadas num contexto formal, abrindo espaço para interações imprevistas entre features, que poderão só ser descobertas demasiado tarde no processo de desenho. Em particular, as features visadas são: tipos e operadores primitivos, listas de tipos em interfaces e inferência de parâmetros de tipo. Os tipos primitivos levantam desafios relacionados com a heterogeneidade que exibem, além da distinção que há em Go entre valores de tipo primitivo e untyped constants; as listas de tipos em interfaces surgem como uma solução para permitir operações primitivas entre valores de tipos genéricos, mas introduzem algumas dificuldades já que representam tanto uma união de tipos como uma interseção de operadores; a inferência de parâmetros de tipo não adiciona funcionalidade ao desenho formal, porém deve ter-se em conta a sua interferência com o sistema de tipos. Desenhou-se e desenvolveu-se uma implementação destas features no protótipo gui- ado pela teoria do Featherweight (Generic) Go, que inclui um type checker, um interpre- tador e um monomorfizador. Neste documento mostra-se como se pode estender formal- mente o sistema de forma a considerar este conjunto alargado de features. A implementa- ção inclui uma verificação em run time da preservação de tipos, o que suporta a correção deste desenho formal.
Descrição
Palavras-chave
Golang Programming language theory Type systems eatherweight languages Type lists Bidirectional typing
