“Learn You a Haskell”展示了以下数据类型,然后给出了一系列使用它来操作树的算法。
data Crumb a = LeftCrumb a (Tree a) | Right Crumb a (Tree a) deriving (Show)
与命令式语言不同,像二进制搜索这样的东西会用向下指针来解释。这里没有提到指针。但是像二进制搜索这样的算法是如何在 Haskll 中编译下来的呢?它们是否编译成同样有效的向下指针?
Haskell 语言:只要符合规范,编译器就可以对代码做任何他们想做的事情。这意味着可以像您在 C 中所期望的那样存在指针行走,或者可能没有。语言规范并不真正关心事物是如何实现的,只要它们按预期工作即可。
GHC 编译器:如果你真的想知道 GHC 到底是如何编译你的代码的,我建议学习阅读 C--(读作“C-minus-minus”)或汇编。你可以让 GHC-ddump-cmm
用-ddump-asm
. 除非您打算开始优化编译器,否则我认为这不是一个非常有用的练习。
作为一般规则,GHC 编写的命令式代码看起来与人类编写的非常不同。所以可能没有你正在考虑的指针。(而且很酷的是它最终还是有效地发挥了作用!)