总结
将某些项目加载到ghci时,对的第一个调用主要的
在a之后:l
或a:r
需要几秒钟的时间主要的
实际执行。
这使得IHP中的实时重新加载速度非常慢。例如,当用户更改IHP项目中的某些haskell代码时,IHP开发服务器将停止ghci中的当前应用程序并触发:r
。IHP开发服务器监视以下消息好的,加载了199个模块。
然后触发:主要
。此呼叫:主要
现在执行需要几秒钟,尽管ghci已经告诉我们它已经重新加载了所有必要的文件。
以下视频显示了该问题:
Bildschirmaufnahme_2023-05-18_um_16.39.04
这个主输入
消息按预期显示,但在我进入之前有很长的延迟主要的
以及消息出现时。这个putStrLn“主输入”
是该模块中的第一个操作:
主要的 :: IO(输入输出) ()
主要的 = 做
输入StrLn “主输入”
国际水文计划.服务器.运行 配置
复制步骤
IHP回购本身也会出现这个问题,所以我们可以用它来重现。
要将IHP加载到ghci中,您需要先安装nix和devenv.sh.
一次开发.sh
已安装,请运行数字诱导的仙人掌使用
启用二进制缓存以缩短构建时间。
现在,您可以通过运行以下命令来复制它:
#克隆回购
git克隆https://github.com/digitallyinduced/ihp.git
光盘国际卫生组织
#这将进入一个具有所有依赖项的shell
尼克斯显影--不纯的
#运行ghci
全球温室气体排放指数
:l测试/Main.hs
#=>好的,加载了152个模块。
主要的
# ... 现在需要几秒钟的时间才能启动应用程序
预期行为
打电话主要的
应该直接启动应用程序,没有几秒钟的延迟。
环境
- 使用的GHC版本:9.4.4+9.6.2
- 操作系统:macOS(这个问题可能是mac特有的,我在linux计算机上没有看到类似的行为)
- 系统架构:x86_64
- 项目大小:这个问题似乎只出现在包含多个模块的项目中。在一个包含20个模块的全新IHP项目中
:主要
通常是即时的。