Elm Compiler работает вечно, компьютер просто нагревается

100

Я не уверен, что вызывает эту проблему, но в проекте, который я создаю, компилятор тратит часы на компиляцию модуля. Общий размер моей кодовой базы составляет 352 КБ, но ни один из модулей не превышает 10 КБ. Я использую собственный порт, но это очень тривиально; Я просто увлекаюсь Date.now()этим.

Есть ли что-нибудь хорошо известное, что заставило бы компилятор elm компилировать вечно? У меня не так много зависимостей, но я много использую Html. Я был бы очень признателен за любые подсказки относительно того, что может вызвать это.

редактировать

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

Я предполагаю, чтобы быть многословным и держать пряник там, почему компилятор elm выбрал этот путь для сопоставления регистра? Что здесь происходит за основной механизм? Почему компилятору требуется больше часа на оптимизацию 60+ совпадений с образцом в операторе case?

Атан Кларк
источник
4
Мне любопытно. Какую оптимизацию выполняет компилятор Elm, чтобы на компиляцию выражения case ушли часы? Ваше выражение case не кажется слишком большим (по крайней мере, недостаточно большим для компьютера). Это означает, что у компилятора Elm есть действительно очень действительно очень действительно очень действительно очень действительно действительно действительно действительно действительно действительно действительно действительно действительно действительно действительно действительно действительно действительно действительно действительно действительно действительно действительно очень действительно очень плохой алгоритм оптимизации. Например, представьте, сколько времени потребуется, чтобы скомпилировать выражение case со всеми 721 покемоном.
Aadit M Shah
4
Думаю, ответ здесь , может быть, вам стоит попробовать добавить haskellтег и посмотреть, могут ли люди haskell что-то нам рассказать.
Halfzebra
5
Я думаю, вам следует задать новый вопрос в лучшем месте об исправлении материала кейса и ответить на свой собственный, просто объяснив, что этот кейс известен медленно. Относительно того, почему, соответствующий код выглядит здесь: github.com/elm-lang/elm-compiler/blob/master/src/Optimize В цитируемой статье Скотта и Рэмси описывается, как эвристика «малого фактора ветвления» работает катастрофически медленно. В приведенном выше коде эта эвристика используется как средство разрешения конфликтов, когда небольшие значения по умолчанию совпадают. Итак, я держу пари, что в ваших плохих примерах мелкие дефолтные связи много, и мы попали в ужасный случай. Мое мнение: Элму не следует использовать SBF как фактор, точку.
sclv
24
Не могли бы вы ответить на этот вопрос самостоятельно, чтобы он больше не появлялся в списке неотвеченных?
Джулиан Левистон
5
Он когда-нибудь действительно компилировал?
Worthy7

Ответы: