上帝写Haskell
上帝 famously 不与宇宙玩骰子,但他似乎很享受写Haskell:
考虑量子力学中的波粒二象性。每个粒子都表现为波,只要您没有与之交互。得益于Haskell的惰性求值,值也只有在被访问时(与粒子交互)才会被求值,在此期间保持为未求值的thunk(波)。
两个粒子可以量子纠缠,使它们的状态相互依赖,即使粒子被任意距离分开。在Haskell中,一个值(无论是否已求值)也可以被共享,然后在程序的完全不同的位置使用,而无需复制它。该值甚至是不可变的,因此您无法从一个位置更改它从而影响另一个位置。类似地,对于纠缠粒子,您无法操纵一个粒子来改变另一个粒子的状态,后者可能很远,从而违反信息传递的最大速度。
由于值是不可变的,在Haskell中它们必须比通常在命令式语言中更频繁地被清理。GHC(最常用的Haskell编译器)在特殊区域分配新数据。只有在超新星爆发后,仍然相关的数据才会被喷射到更大的宇宙中。
Haskell初学者经常使用列表而不是数组。您无法在链表中进行随机访问,只能访问第一个元素,然后是列表的其余部分。现实世界也不允许您随机访问,您受到光速的限制,必须从一个位置移动到下一个位置。
时间似乎也是一个链表,甚至不是双向链表,因为在访问当前元素后您无法返回。似乎是一个尴尬的错误。
由于Haskell的类型系统在捕获错误方面非常出色,您经常感觉甚至不需要编写测试。不幸的是,这是不真实的,正如我们宇宙的奇怪物理错误所证明的那样:光速恰好保持不变,无论您以什么速度移动。
Haskell中似乎存在长期内存泄漏,这很容易发生,因为只要未求值的thunk仍然可达,它们的大小就会增长。不幸的是,这种内存泄漏将持续增长,直到消耗整个宇宙,然后宇宙将因热寂而死亡。