我所说的讨论是指博客条目、书籍(最好)或类似的内容。
背景
我正在第二次阅读Martin,Lex和Bill的Scala编程,我很惊讶地读到了一些关于协方差和反方差的文章。
我发布这个问题的原因是--作者从构建类队列开始,讨论如何、在哪里、可以和不能使用协方差。每个步骤都是前一步的逻辑结果,但是最后一步是向队列中添加元素(在前面):
(elem : Apple) :: (queue[Orange])然而,在Scala中,它的工作方式是这样的,结果是带有果树类型的队列。
在我看来,这是错误的--如果有人想要排队的水果,首先应该是这样的排队。动态更改类型对我来说太动态了(也就是说,它就像添加ints和字符串,只是为了获得object类型)。
由于提到的书是关于Scala的,类型的变化只是其中的一部分,所以我正在寻找更实质性的东西。
问题是
因此,问题 --关于语言设计,我应该读些什么,重点是类型差异?这可能是本杰明·皮尔斯的“类型和编程语言”(它在我的购买清单上)吗?
发布于 2012-03-07 00:49:47
维基百科的协方差和反方差有一定的帮助。一般来说,协方差和反方差是很酷的因素,对理解编程语言有一些深刻的影响,但我不确定了解它们作为程序员的内部工作情况有多大帮助。这一领域的开创性工作是由Liskov (以Liskov替代原则闻名)完成的。约翰·库克( John 你能读懂的! )也有一篇很好的文章--你可能会读到一些很酷的学术论文,即“多重继承的语义”(Luca,他还写了一本我还没有完全读过的非常好的书,“对象理论”,涵盖了语义面向对象语言中类似的东西)。我认为,第一次提到编程语言中的协/反方差的论文是Liskov自己的“子类型的行为概念”。虽然我已经有一段时间没有读过这篇文章了,但本文描述的不仅仅是函数类型,还有类型谓词(这给出了关于类型系统如何与这些一般原则一起工作的更一般的描述)。最后,如果幻灯片是你的事情,杰夫福斯特(和我,作为助教)这学期在UMD教授编译器课程,他有一些伟大的类型系统上的幻灯片!。
要发表一点小小的评论,编程语言设计是一个比你发现的差异大得多的领域。如果你开始阅读本·皮尔斯的“TAPL”,你会很容易被书中的其他主题分心,这也是很好的。Co和逆向变量是很酷的,但是我认为在编程语言理论中还有许多同样酷的东西,这让我感到非常吃惊:-)
https://stackoverflow.com/questions/9532425
复制相似问题