Компілятор Elm працює вічно, комп'ютер просто нагрівається


100

Я не впевнений, що викликає цю проблему, але в проекті, який я будую, компілятор займає години, щоб скласти модуль. Загальний розмір моєї кодової бази становить 352 Кб, але жоден з модулів не перевищує 10 КБ. Я використовую Native порт, але це дуже банально; Я просто добираюся Date.now()з цим.

Чи є щось відоме, що могло б змусити компілятора в'язів вічно брати компіляцію? У мене не так багато залежностей, але я багато використовую Html. Я дуже вдячний за будь-які підказки щодо того, що це спричинить.

Редагувати

Тож виявляється, що великі вирази регістру змусять оптимізатора тривати довго, як 0,16. Ось дискусія про Elm-Discuss, яка порушує проблему, і суть неприємного матчу справи .

Я думаю, що він є багатослівним і зберігає моркву там, чому б компілятор в'язів взяв цей маршрут для відповідності регістру? Що за основна техніка відбувається тут? Чому для компілятора потрібно оптимізувати відповідність шаблону 60+ у заяві справи?


4
Мені цікаво. Яку оптимізацію виконує компілятор Elm, що для складання виразу випадку потрібні години? Вираз у вашому випадку не здається занадто великим (принаймні, недостатньо великим для комп'ютера). Це означає, що у компілятора Elm є дійсно дійсно дуже-дуже-справді-дуже-справді-дуже-дуже-справді-дуже-дуже-справді-дуже-справді-дуже-справді-дуже-справді-дуже-справді-дуже-дуже-дуже-дуже-дуже-дуже поганому алгоритмі оптимізації. Наприклад, уявіть, скільки часу знадобиться, щоб скласти вираз з усіма 721 покемонами.
Аадіт М Шах

4
Я думаю, що відповідь лежить тут , можливо, ви повинні спробувати додати haskellтег і подивитися, чи зможуть люди haskell щось розкрити нам.
півзебра

5
Я думаю, вам слід задати нове запитання на кращому місці щодо виправлення матеріалів справи, а відповісти на власні, просто пояснивши, що справи справи відомі повільно. Щодо того, схожий код виглядає тут: github.com/elm-lang/elm-compiler/blob/master/src/Optimize Цитований документ Скотта та Рамзі описує, як евристичний “малий розгалужувальний фактор” катастрофічно повільний. У наведеному вище коді евристика використовується як переривчастий зв'язок, коли невеликі за замовчуванням пов'язані. Отже, я ставлю на ваші погані приклади, малі зв'язки за замовчуванням багато, і ми потрапили в жахливий випадок. Моя думка: Elm не повинен використовувати SBF як фактор, повна зупинка.
sclv

24
Чи можете ви, будь ласка, самостійно відповісти на це запитання, щоб воно більше не відображалось у списку без відповіді?
Джуліан Левістон

5
Чи коли-небудь насправді закінчував складання?
Достойний7

Відповіді:


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.