rec*_*nja 27 debugging haskell compilation ghc haskell-platform
我写了一个Haskell程序,它在列表上执行二进制搜索.至少这就是我的想法.当我用程序编译程序ghc v7.6.3并运行程序时,我得到了以下输出:
progname: <<loop>>
Run Code Online (Sandbox Code Playgroud)
这个输出究竟意味着什么?这是否意味着我有一个无限循环ghc优化了?我该怎么调试呢?
Mat*_*hid 28
正如一些评论所说,这是Haskell RTS在运行时检测到无限循环.它不能总是检测到这样的循环,但在简单的情况下它可以.
例如,
x = x + 1
Run Code Online (Sandbox Code Playgroud)
编译得很好,但在运行时会引发异常.(顺便说一下,这是一个例外 - 特别是,如果你愿意,你可以抓住它.但你可能不"想要".)
那么为什么GHC甚至让这个编译?好吧,因为如果我替换+,比方说:,那么表达式现在终止就好了.(它表示一个1元素的循环列表.)编译器无法在编译时告诉什么是合理的递归而不是合理的递归.RTS不能总是在运行时告诉; 但是当它可以告诉什么是错的,它会让你通过你抛出异常知道.
| 归档时间: |
|
| 查看次数: |
5358 次 |
| 最近记录: |