Orígenes históricos de los problemas de Scala

14

Scala ha sido calificado como complejo con sus numerosas funciones establecidas por muchos de mis colegas y algunos incluso culpan a todas esas nuevas características. Si bien la mayoría de los programadores conocen las características OO, y al menos las decentes también conocen la programación funcional, hay una característica en particular en Scala para la que no conozco sus orígenes históricos.

Dado que un mantra importante de nuestra profesión es no reinventar la rueda, estoy bastante seguro de que Scala no tiene ninguna característica real nunca antes vista, pero tengo que corregirlo si es necesario.

Para llegar a la pregunta real, aunque conozco los orígenes de la mayoría de las características de Scala, nunca antes había visto algo así como sus implicitdeclaraciones. ¿Existen otros idiomas (¡más antiguos!) Que también brinden esta función?

¿Tiene sentido distinguir los diferentes casos de implicidades (ya que pueden originarse de diferentes fuentes), a saber, conversiones implícitas y parámetros implícitos?

Franco
fuente
¿Quizás un duplicado ?: stackoverflow.com/questions/3069432/…
gerferra
@gerferra No es un duplicado exacto, y no existe la noción de un duplicado entre sitios. Si lo desea, puede componer una respuesta que haga referencia a la pregunta SO y sus respuestas y sus referencias, eso es perfectamente aceptable.
Yannis 01 de

Respuestas:

9

No estoy de acuerdo con la respuesta de Brian sobre esa otra pregunta.

Hasta donde yo sé, no hay un concepto implícito en ningún otro idioma. El historial de cambios para Scala implica que las implicaciones eran una generalización de los límites de la vista, y un límite de vista es, en sí mismo, una generalización de la conversión automática de tipos, lo cual es muy común.

Implicits luego habilitó las clases de tipos, pero me sorprendería mucho si esa fuera la intención original.

Editar

Las notas de la versión de Scala 2.0 (2006) dicen:

Las vistas en Scala 1.0 han sido reemplazadas por el concepto más general de parámetros implícitos

Eso no significa, por supuesto, que los parámetros implícitos se introdujeron con el objetivo de reemplazar las vistas.

Sin embargo, a Odersky le gusta claramente cuando una vez que el concepto puede reemplazar a varios. En ese sentido, bien puede ser el caso de que Odersky quisiera clases de tipos, pero no quería introducir un mecanismo para manejar eso exclusivamente y, por lo tanto, se le ocurrió algo más que le permitiera eliminar un concepto (Vistas) y reemplazarlo. con un concepto más genérico que maneja vistas y clases de tipos.

En caso de que alguien esté interesado, las clases de tipo de Poor Man, a las que Brian hizo referencia en Stack Overflow, también tienen fecha de 2006. Claramente, Odersky era consciente del vínculo entre las implicidades y las clases de tipos cuando las presentó.

Sin embargo, mantengo mi reclamo. :-)

Daniel C. Sobral
fuente
¿Qué pasa con la respuesta de Norman Ramsey? stackoverflow.com/a/3071461/63489 . Se refiere a una implementación previa de conversiones implícitas en Haskell
gerferra
@gerferra Suena razonable: tenga en cuenta que se hace referencia a Odersky en ese documento. El mecanismo es diferente, pero bien podría hacer rodar la pelota. El documento referido de Odersky discute las clases de tipos, y las implicidades se introdujeron en 2006, la fecha de la presentación de "Clases de tipos del hombre pobre" citada por Brian, claramente, hay un enlace. Aún así, las notas de la versión de Scala 2.0 (2006) dicen que "Las vistas en Scala 1.0 han sido reemplazadas por el concepto más general de parámetros implícitos" . Por lo que sé de Odersky, un mecanismo que resuelva múltiples problemas le atraería mucho.
Daniel C. Sobral
bastante justo :-)
gerferra
4

Implicit en scala significa dos cosas diferentes

  1. Parámetros implícitos Estos aparecieron en Haskell, y quizás en otros idiomas primero. Evidencia de apoyo: En este trabajo a partir de 2000 y GHC 5.04.1 documentación (Sept-2002, antes de que era un Scala)
  2. Conversiones implícitas. No sé el primer idioma que tiene estos, pero estaban en C # 1.0 (usando la implictpalabra clave) que es anterior a la primera versión de Scala en aproximadamente un año.
Philip JF
fuente
+1, no sabía que las conversiones implícitas están disponibles en C #. Gracias por la anotación.
Frank