Origines historiques des implications de Scala


14

Scala a été qualifié de complexe avec ses riches fonctionnalités définies par beaucoup de mes collègues et certains ont même blâmé toutes ces nouvelles fonctionnalités. Alors que la plupart des programmeurs connaissent les fonctionnalités OO, et au moins les décents connaissent également la programmation fonctionnelle, il y a une fonctionnalité en particulier dans Scala pour laquelle je ne connais pas ses origines historiques.

Étant donné qu'un mantra majeur de notre profession est de ne pas réinventer la roue, je suis plutôt confiant, que Scala n'a pas des inouïes-avant caractéristiques réelles, mais je me tiens à corriger sur celui - ci si nécessaire.

Pour arriver à la vraie question, alors que je suis conscient de l'origine de la plupart des fonctionnalités de Scala, je n'ai jamais vu quelque chose comme ses implicitdéclarations auparavant. Existe-t-il d'autres langues (plus anciennes!) Qui offrent également cette fonctionnalité?

Est-il judicieux de distinguer les différents cas d'implicits (car ils peuvent provenir de différentes sources), à savoir les conversions implicites et les paramètres implicites?



@gerferra Pas un doublon exact, et il n'y a pas de notion de doublon intersite. Si vous le souhaitez, vous pouvez composer une réponse référençant la question SO et ses réponses et leurs références, c'est parfaitement acceptable.
yannis

Réponses:


9

Je ne suis pas d'accord avec la réponse de Brian sur cette autre question.

Pour autant que je sache, il n'y a pas de concept implicite sur une autre langue. L'historique des changements pour Scala implique que les implications étaient une généralisation des limites de vue, et une limite de vue est, en soi, une généralisation de la conversion automatique de type, ce qui est en effet très courant.

Les implicits ont ensuite activé les classes de types, mais je serais très surpris si c'était l'intention initiale.

Éditer

Les notes de publication de Scala 2.0 (2006) disent:

Les vues dans Scala 1.0 ont été remplacées par le concept plus général de paramètres implicites

Cela ne signifie pas, bien sûr, que des paramètres implicites ont été introduits dans le but de remplacer les vues.

Cependant, Odersky aime clairement quand une fois le concept peut remplacer plusieurs. En ce sens, il se pourrait bien qu'Odersky veuille des classes de type, mais ne voulait pas introduire un mécanisme pour gérer cela exclusivement, et, par conséquent, a proposé autre chose qui lui a permis de supprimer un concept (Vues) et de le remplacer avec un concept plus générique qui gère à la fois les vues et les classes de type.

Au cas où quelqu'un serait intéressé, les classes de types de Poor Man, mentionnées par Brian à Stack Overflow, datent également de 2006. Clairement, Odersky était conscient du lien entre les implicits et les classes de types lorsqu'il les a introduits.

Pourtant, je maintiens ma revendication. :-)


Qu'en est-il de la réponse de Norman Ramsey? stackoverflow.com/a/3071461/63489 . Il fait référence à une implémentation précédente de conversions implicites dans Haskell
gerferra

@gerferra Semble raisonnable - notez que Odersky est mentionné dans cet article. Le mécanisme est différent, mais il pourrait bien faire rouler la balle. L'article référé d'Odersky traite des classes de types, et les implications ont été introduites en 2006, la date de la présentation des "classes de types de pauvres" citée par Brian - clairement, il y a un lien. Pourtant, les notes de publication de Scala 2.0 (2006) indiquent que "Les vues dans Scala 1.0 ont été remplacées par le concept plus général de paramètres implicites" . D'après ce que je sais d'Odersky, un mécanisme qui résout plusieurs problèmes l'attirerait beaucoup.
Daniel C.Sobral

assez juste :-)
gerferra

4

Implicit en scala signifie deux choses différentes

  1. Paramètres implicites. Ceux-ci sont apparus en Haskell, et peut-être dans d'autres langues en premier. Preuves à l' appui: Le présent document de 2000 et la documentation GHC 5.04.1 (Sept-2002, avant qu'il y avait une Scala)
  2. Conversions implicites. Je ne connais pas la première langue à avoir ces derniers, mais ils étaient en C # 1.0 (en utilisant le implictmot - clé) qui précède la première version de Scala d'environ un an.

+1, je ne savais pas que les conversions implicites étaient disponibles en C #. Merci pour le pointeur.
Frank

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.