Elm编译器永远运行,计算机越来越热


100

我不确定是什么引起了这个问题,但是在一个正在构建的项目中,编译器仅花费几个小时就可以编译模块。我的代码库的总大小为352KB,但是没有一个模块的大小超过10KB。我正在使用本机端口,但这非常琐碎。我只是拿它Date.now()

有什么众所周知的东西会导致elm编译器永久编译吗?我没有很多依赖关系,但是我经常使用HTML。我真的很感谢任何提示会导致这种情况。

编辑

因此,事实证明,大写表达式会导致优化器花费很长时间,从0.16开始。这是有关Elm-Discuss提出问题的讨论,以及令人讨厌的案例比赛要点

我猜是很冗长的,要保留一个胡萝卜,为什么榆木的编译器会采用这种方式进行大小写匹配?这里发生的底层机制是什么?为什么在case语句上优化60多个模式匹配,编译器会花费一个多小时?


4
我很好奇。Elm编译器执行哪种优化需要花费数小时才能编译case表达式?您的case表达式似乎不太大(至少对于计算机而言还不够大)。这意味着Elm编译器具有一个真的真的真的真的真的真的真的真的非常真的非常非常差的优化算法。例如,想象一下用全部721个神奇宝贝编译一个case表达式要花多长时间。
Aadit M Shah

4
我想答案就在这里,也许您应该尝试添加haskell标签,看看haskell的人是否可以向我们透露一些内容。
Halfzebra '16

5
我认为您应该在更合适的位置提出一个新问题来修复案件,并通过解释案件缓慢而回答您自己的问题。至于为什么,相关的代码看起来在这里:github.com/elm-lang/elm-compiler/blob/master/src/Optimize 引用的Scott&Ramsey论文描述了“小分支因子”启发式方法是多么灾难性地缓慢。在上面的代码中,当小的默认值发生联系时,启发式方法将用作决胜局。因此,我敢打赌,在您的错误示例中,很多小的违约关系很多,我们遇到了可怕的情况。我的看法:榆树不应该使用SBF作为句号。
sclv

24
您能否自我回答这个问题,使它不再出现在未回答的列表中?
朱利安·莱维斯顿

5
它真的完成编译了吗?
Worthy7

Answers:


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.