我非常喜欢Haskell,尤其是它的强类型系统。当我将Haskell程序编译成功后,它们通常没有bug,或者至少非常接近没有bug。
然而,Haskell的主要问题是其未知的空间使用情况。至少在C++中,你可以比较确定程序的空间使用情况。当你构建和释放对象时这一点是很清晰的。
在Haskell中,即使是像折叠这样简单的操作,如果不正确编写,也会在thunks (类似于一个表达式还未被求值的占位符) 中使用大量的空间。由于缺乏内存而导致程序崩溃并不比其他错误好到哪里去,有人甚至认为这种错误更糟糕。
我知道有方法可以避免这些内存泄漏,但我正在寻找安全类型的方法来避免这些空间泄漏。也就是说,如果我做错了,我会得到某种编译错误,而不仅仅是希望我的程序在生产中由于内存不足而崩溃。例如,我可以替换标准库函数(比如,如果累加器不是严格的话,可能会出现编译错误的折叠函数)
在Haskell中是否存在这样的东西呢?