Elm Compiler se ejecuta para siempre, la computadora se calienta

100

No estoy seguro de qué está causando este problema, pero en un proyecto que estoy construyendo, el compilador tarda horas en compilar un módulo. El tamaño total de mi base de código es 352KB, pero ninguno de los módulos tiene más de 10KB. Estoy usando un puerto nativo, pero es muy trivial; Solo estoy jugando Date.now()con eso.

¿Hay algo bien conocido que haría que el compilador elm tardara una eternidad en compilarse? No tengo muchas dependencias, pero uso mucho Html. Realmente agradecería cualquier sugerencia sobre la causa de esto.

Editar

Entonces, resulta que las expresiones de mayúsculas y minúsculas harán que el optimizador tarde mucho tiempo, a partir de 0.16. Aquí está la discusión sobre Elm-Discuss que trae a colación el tema, y ​​una esencia del desagradable caso coincidente .

Supongo que para ser detallado y mantener una zanahoria, ¿por qué el compilador de elm tomaría esta ruta para la comparación de mayúsculas y minúsculas? ¿Cuál es la maquinaria subyacente que está pasando aquí? ¿Por qué el compilador tardaría más de una hora en optimizar más de 60 coincidencias de patrones en una declaración de caso?

Athan Clark
fuente
4
Soy curioso. ¿Qué tipo de optimización está realizando el compilador de Elm que lleva horas compilar una expresión de caso? La expresión de su caso no parece demasiado grande (al menos no lo suficientemente grande para una computadora). Esto significa que el compilador de Elm tiene un algoritmo de optimización realmente realmente realmente realmente realmente realmente realmente realmente realmente realmente realmente realmente realmente realmente realmente realmente realmente realmente realmente realmente realmente realmente realmente realmente realmente realmente realmente realmente malo. Por ejemplo, imagina cuánto tiempo tardaría en compilar una expresión de caso con todos los 721 pokémon.
Aadit M Shah
4
Supongo que la respuesta está aquí , tal vez debería intentar agregar una haskelletiqueta y ver si la gente de Haskell puede revelarnos algo.
Halfzebra
5
Creo que debería hacer una nueva pregunta en un mejor lugar sobre cómo arreglar el asunto del caso, y responder la suya propia simplemente explicando que el asunto del caso es lento. En cuanto a por qué, el código relevante parece estar aquí: github.com/elm-lang/elm-compiler/blob/master/src/Optimize El citado artículo de Scott & Ramsey describe cómo la heurística del "factor de ramificación pequeño" es desastrosamente lenta. En el código anterior, esa heurística se usa como un desempate cuando hay empates pequeños por defecto. Entonces, apuesto a que en tus malos ejemplos, pequeños empates predeterminados mucho y damos con el caso horrible. Mi opinión: Elm no debería usar SBF como factor, punto.
sclv
24
¿Puede responder usted mismo a esta pregunta para que ya no aparezca en la lista sin respuesta?
Julian Leviston
5
¿Alguna vez terminó de compilarse?
Worthy7

Respuestas: