Origens históricas de Scala implícitas

14

Scala foi chamado de complexo com seu rico conjunto de recursos por muitos de meus colegas e alguns até culparam todos esses novos recursos. Embora a maioria dos programadores esteja ciente dos recursos de OO, e pelo menos os decentes também conheçam a programação funcional, há um recurso em particular no Scala para o qual não conheço suas origens históricas.

Dado que um dos principais mantras de nossa profissão é não reinventar a roda, estou bastante confiante de que Scala não possui nenhum recurso real inédito, mas devo ser corrigido nesse caso, se necessário.

Para chegar à pergunta real, enquanto estou ciente das origens da maioria dos recursos de Scala, nunca vi algo parecido com suas implicitdeclarações antes. Existem outros idiomas (mais antigos!) Por aí que também oferecem esse recurso?

Faz sentido distinguir os diferentes casos de implícitos (como eles podem se originar de diferentes fontes), nomeadamente conversões implícitas e parâmetros implícitos?

Frank
fonte
Talvez uma duplicata ?: stackoverflow.com/questions/3069432/...
gerferra
@gerferra Não é uma duplicata exata e não existe a noção de uma duplicata entre sites. Se desejar, você pode escrever uma resposta referenciando a pergunta SO e suas respostas e suas referências, isso é perfeitamente aceitável.
yannis

Respostas:

9

Eu discordo da resposta de Brian nessa outra pergunta.

Até onde eu sei, não há implícito conceito em nenhuma outra linguagem. O histórico de alterações do Scala implica que implícitos eram uma generalização dos limites de exibição, e um limite de exibição é, por si só, uma generalização da conversão automática de tipo, o que é realmente muito comum.

Os implícitos ativavam as classes de tipo, mas eu ficaria muito surpreso se essa fosse a intenção original.

Editar

As notas de versão do Scala 2.0 (2006) dizem:

As visualizações no Scala 1.0 foram substituídas pelo conceito mais geral de parâmetros implícitos

Isso não significa, é claro, que parâmetros implícitos foram introduzidos com o objetivo de substituir visualizações.

No entanto, Odersky claramente gosta quando o conceito pode substituir vários. Nesse sentido, pode muito bem ser que Odersky desejasse classes de tipo, mas não quisesse introduzir um mecanismo para lidar com isso exclusivamente e, portanto, surgiu com outra coisa que lhe permitiu remover um conceito (Views) e substituí-lo com um conceito mais genérico que lida com visualizações e classes de tipo.

Caso alguém esteja interessado, as Classes de tipo de pobre homem, mencionadas por Brian no Stack Overflow, também são de 2006. Claramente, Odersky estava ciente do vínculo entre implícitos e classes de tipos quando os apresentou.

No entanto, eu mantenho minha reivindicação. :-)

Daniel C. Sobral
fonte
E a resposta de Norman Ramsey? stackoverflow.com/a/3071461/63489 . Ele refere-se a uma aplicação prévia de conversões implícitos em Haskell
gerferra
@gerferra Parece razoável - observe que Odersky é mencionado nesse documento. O mecanismo é diferente, mas pode muito bem fazer a bola rolar. O artigo de Odersky discute as classes de tipos, e implícitos foram introduzidos em 2006, a data da apresentação "Classes de tipos de homens pobres" citada por Brian - claramente, há um link. Ainda assim, as notas de versão do Scala 2.0 (2006) dizem que "as visualizações no Scala 1.0 foram substituídas pelo conceito mais geral de parâmetros implícitos" . Pelo que sei de Odersky, um mecanismo que resolve vários problemas teria grande atração por ele.
Daniel C. Sobral
justo o suficiente :-)
gerferra
4

Implicit em Scala significa duas coisas diferentes

  1. Parâmetros implícitos. Eles apareceram em Haskell, e talvez em outros idiomas primeiro. Evidência de apoio: Este trabalho entre 2000 e GHC 5.04.1 documentação (setembro-2002, antes de haver foi um Scala)
  2. Conversões implícitas. Eu não sei o primeiro idioma a ter esses, mas eles estavam em C # 1.0 (usando a implictpalavra - chave) que antecede a primeira versão do Scala por cerca de um ano.
Philip JF
fonte
+1, eu não sabia que conversões implícitas estão disponíveis em C #. Obrigado pelo ponteiro.
Frank