Scala como idioma para programação genérica

13

No artigo “Um estudo comparativo estendido de suporte a idiomas para programação genérica” de Garcia et al. é apresentada uma comparação interessante dos recursos das linguagens de programação para programação genérica:

insira a descrição da imagem aqui

com a breve explicação da terminologia:

insira a descrição da imagem aqui

Alguém pode testar o suporte da Scala para programação genérica dentro dessa estrutura? Ou seja, adicione uma coluna na primeira tabela com explicações, se possível.

Artem Pelenitsyn
fonte
3
Publicado em Ciência da Computação . Por favor, não faça isso. Se você deseja mover sua pergunta para outro site que julgue mais adequado, sinalize a atenção do moderador e solicite uma migração.
Gilles 'SO- stop be evil'
2
A resposta exata é dada na p. 17 de “ Digite classes como objetos e implícitos ” por Oliveira et al.
Artem Pelenitsyn
A referência vem do Twitter após o link para a pergunta beta do CS.SE. Obrigado a Miles Sabin (@milessabin no Twitter) e Alexey Romanov.
Artem Pelenitsyn
Dê uma olhada nas milhas da biblioteca disforme de Sabins e sua motivação por trás da te lib. Acho referências alguns papéis
AndreasScheinert

Respostas:

7

Conforme mencionado em um dos comentários do OP, esta é a tabela que explica como o Scala se compara ao suporte de programação genérico. Link para o pdf de origem

mesa com Scala listado

Posteriormente, é fornecido o seguinte resumo:

Scala
Usando o padrão CONCEPT, podemos modelar conceitos de vários tipos, várias restrições e dar suporte à modelagem retroativa. Além disso, o suporte do Scala aos implícitos significa que as desvantagens das soluções Java e C # em termos de sobrecarga adicional não se aplicam ao Scala. Assim, Scala obtém boa pontuação tanto na dedução implícita de argumentos quanto nos critérios de modelagem retroativa. A Seção 6 mostra que tipos associados são suportados no Scala por meio de membros de tipo e tipos de métodos dependentes, e os membros de tipo também podem ser usados ​​como aliases de tipo.
Conforme mostrado na Seção 3, o Scala suporta modelos com escopo lexical. Além disso, a verificação de tipo é totalmente modular. Implícitos sobrepostos priorizados fornecem algum suporte para sobrecarga baseada em conceito, conforme ilustrado pelo zipWithNexemplo na Seção 6.5. No entanto, os modelos sobrepostos precisam ser estruturados usando uma hierarquia de subtipagem, o que nem sempre é desejável. Assim, a pontuação para esse recurso é apenas suficiente. Por fim, o Scala tem total suporte para funções de primeira classe e também suporta restrições de igualdade.
Em resumo, Scala acaba sendo uma linguagem com excelente suporte para recursos de programação genéricos, conseguindo se sair no mesmo nível, ou até um pouco melhor, que G (que foi especialmente projetado como uma linguagem para programação genérica em geral) ou Haskell ( que foi reconhecido como tendo muito bom suporte para programação genérica).

E então no resumo:

Membros de tipo e tipos de método dependentes adicionam energia extra ao idioma e uma combinação dos dois mecanismos permite a expressão de tipos associados. Em combinação com implícitos, membros de tipo e tipos de método dependentes tornam o Scala uma linguagem pronta para programação genérica em grandes

Comunidade
fonte