【发布时间】:2010-10-05 08:52:42
【问题描述】:
我正在从 Java 背景学习 Haskell。当我编写 Java 时,我觉得我对对象在内存中的布局方式以及由此产生的后果有了深刻的理解。例如,我确切地知道java.lang.String 和java.util.LinkedList 是如何工作的,因此我知道应该如何使用它们。有了 Haskell,我有点迷路了。例如,(:) 是如何工作的?我应该关心吗?是在某处指定的吗?
【问题讨论】:
-
这是一个很好的问题,因为我看到人们用 !正是因为这个原因。
-
一般来说,您也不需要了解 Java 类的内部结构(解耦、信息隐藏、封装......)。
-
@musiKk 我同意您不需要阅读源代码,但我认为从广义上了解某些东西是如何实现的会有所帮助。例如,LinkedList 和 ArrayList 之间的区别很容易理解,因为名称强烈暗示了实现,我不必查阅文档来发现方法是 O(1) 还是 O(n) 或其他。如果你只是给我一个List,不看文档我不知道操作会如何执行。
-
Haskell 中的所有数据都被定义为向外展开的树......所以对于如何实现一个简单的列表确实有一个显而易见的选择:单链表。如果您在各种类似的 monad 中工作,您可以使用可变数组来做事,但这是一个相当高级的话题。
标签: java data-structures compiler-construction haskell heap-memory