Scala隐式函数的历史渊源


14

我的许多同事都将Scala称为具有复杂功能的复合体,甚至有人指责它具有所有这些功能。尽管大多数程序员都知道OO功能,并且至少一些体面的程序员也了解函数式编程,但是特别是在Scala中有一个功能,我不知道它的历史渊源。

鉴于我们专业的主要口头禅是不重新发明轮子,我相当有信心,Scala没有任何实际的闻所未闻的功能,但是如果有必要,我会对此进行纠正。

为了解决实际问题,虽然我知道Scala的大多数功能的由来,但我从未见过类似其implicit声明的内容。是否有其他(较旧的!)语言也提供此功能?

区分隐式的不同情况(因为它们可能源自不同的来源),即隐式转换和隐式参数,是否有意义?



@gerferra不是精确的重复项,也没有跨站点重复项的概念。如果需要,您可以编写一个引用SO问题及其答案及其引用的答案,这是完全可以接受的。
yannis 2012年

Answers:


9

我不同意Brian在另一个问题上的回答。

据我所知,任何其他语言都没有隐含的概念。Scala的更改历史表明,隐式是视图边界的一般化,而视图边界本身就是自动类型转换的一般化,这的确非常普遍。

然后隐式启用类型类,但是如果这是原始意图,我会感到非常惊讶。

编辑

Scala 2.0(2006)的发行说明说:

Scala 1.0中的视图已由隐式参数的更一般概念取代

当然,这并不意味着引入隐式参数是为了替换视图。

但是,当一个概念可以替代多个概念时,Odersky显然喜欢它。从这个意义上讲,很可能是Odersky想要类型类,但不想引入一种专门处理该类的机制,因此想出了其他方法让他删除一个概念(视图)并替换它。具有处理视图和类型类的更通用的概念。

如果有人感兴趣,Brian在Stack Overflow提到的“穷人类型类”的日期也为2006年。显然,当Odersky引入隐式类和类型类时,他就意识到了它们之间的联系。

但是,我坚持我的主张。:-)


诺曼·拉姆齐(Norman Ramsey)的回应呢?stackoverflow.com/a/3071461/63489。它指的是Haskell
gerferra

@gerferra听起来很合理-请注意,该文件中提到了Odersky。机制不同,但很可能会使球滚动。Odersky的推荐论文讨论了类型类,隐式在2006年引入,这是Brian引用“穷人类型类”演讲的日期-显然,有一个链接。尽管如此,Scala 2.0(2006)的发行说明说“ Scala 1.0中的视图已由更通用的隐式参数概念代替”。据我所知,奥德斯基认为,一种解决多种问题的机制将对他产生极大的吸引力。
Daniel C. Sobral

足够公平:-)
gerferra 2012年

4

Implicit 在scala中意味着两个不同的东西

  1. 隐式参数。这些出现在Haskell中,也许最早出现在其他语言中。佐证:本文从2000年GHC 5.04.1文档(9月- 2002年,之前有一个斯卡拉)
  2. 隐式转换。我不知道拥有这些语言的第一种语言,但是它们使用的是C#1.0(使用implict关键字),它比Scala的第一个版本早一年左右。

+1,我不知道C#中提供隐式转换。感谢您的指导。
Frank

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.