繁体   English   中英

混合编译和解释代码时,Haskell程序会挂起

[英]Haskell program hangs when mixing compiled and interpreted code

考虑以下琐碎的模块:

module Fail1 where
identity x = x

module Main where
import Fail1
main = print (identity 7)

我将它们保存为Fail1.hsFail2.hs 如果我尝试运行这个程序,一切都很好:

> runhaskell Fail2
7

但看看这个:

> ghc -O2 --make Fail1
[1 of 1] Compiling Fail1     ( Fail1.hs, Fail1.o )

> runhaskell Fail2
_

该程序现在永远挂起, ghc.exe消耗100%的一个CPU核心。 有没有搞错?

它变得更好了:

> ghc -O2 --make Fail2
[2 of 2] Compiling Main     ( Fail2.hs, Fail2.o )

> runhaskell Fail2

Access violation in generated code when reading 0xffffffffffffffff

 Attempting to reconstruct a stack trace...

   Frame        Code address
 * 0x71fdd90    0x3d7ce28 C:\Program Files\Haskell Platform\8.6.3\bin\ghc.exe+0x397ce28

呃......扫管笏?

具有讽刺意味的是,如果我只运行Fail2.exe本身,它可以完美地运行:

> Fail2
7

到底是怎么回事? 我疯了吗? 这真的,真的看起来像某种GHC bug。 任何人都可以复制这个,还是仅仅是我的系统?

> ghc --version
The Glorious Glasgow Haskell Compilation System, version 8.6.3

(哇,好的。这真的没有显示太多信息。我正在运行Windows 7 Pro 64位,我相信我已经安装了64位GHC版本。)

这是GHC中的一个错误,已在GHC 8.6.4中修复。

我用GHC 8.6.3,GHC 8.6.4和GHC 8.6.5进行了测试,后两个版本按预期工作。

我使用了x64 Windows haskell堆栈 ,我运行的是安装了所有更新的Windows 10(截至2019-05-25)。

(对于所有GHC版本:我写runhaskell Fail2runhaskell Fail2.hs没有任何区别。)

GHC 8.6.3

这工作:

stack --resolver lts-13.11 runhaskell Fail2

然后我编译Fail1:

stack --resolver lts-13.11 ghc -- -O2 --make Fail1

然后运行Fail2时原始的runhaskell命令挂起。

然后我编译Fail2:

stack --resolver lts-13.11 ghc -- -O2 --make Fail2

然后原始的runhaskell命令崩溃,就像问题描述它一样。

GHC 8.6.4

使用--resolver lts-13.19 (使用GHC 8.6.4),命令全部按预期工作。

GHC 8.6.5

对于--resolver lts-13.23 (使用GHC 8.6.5)也是如此。

只需更新到最新的GHC版本,或至少更新到ghc 8.6.4。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM