Elm Compiler rodando para sempre, o computador esquentando

100

Não tenho certeza do que está causando esse problema, mas em um projeto, estou construindo, o compilador está levando horas apenas para compilar um módulo. O tamanho total da minha base de código é 352 KB, mas nenhum dos módulos tem mais de 10 KB. Estou usando uma porta nativa, mas é muito trivial; Estou apenas buscando Date.now()com isso.

Existe algo conhecido que faria com que o compilador do elm demorasse uma eternidade para compilar? Não tenho muitas dependências, mas estou usando muito o Html. Eu realmente apreciaria quaisquer dicas sobre o que poderia causar isso.

Editar

Portanto, as expressões case grandes farão com que o otimizador demore muito, a partir de 0,16. Aqui está a discussão em Elm-Discuss trazendo o problema, e uma essência da combinação de caso desagradável .

Eu acho que para ser prolixo e manter uma cenoura lá fora, por que o compilador de Elm seguiria este caminho para correspondência de maiúsculas e minúsculas? Qual é a máquina subjacente acontecendo aqui? Por que o compilador demoraria mais de uma hora para otimizar mais de 60 correspondências de padrão em uma instrução case?

Athan Clark
fonte
4
Estou curioso. Que tipo de otimização o compilador Elm está realizando que leva horas para compilar uma expressão case? A expressão do seu case não parece muito grande (pelo menos não grande o suficiente para um computador). Isso significa que o compilador Elm tem um algoritmo de otimização 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 ruim ruim. Por exemplo, imagine quanto tempo levaria para compilar uma expressão case com todos os 721 pokémon.
Aadit M Shah
4
Eu acho que a resposta está aqui , talvez você deva tentar adicionar haskelltag e ver se as pessoas haskell podem revelar algo para nós.
halfzebra de
5
Acho que você deveria fazer uma nova pergunta em um local melhor para consertar o caso e responder a sua própria, apenas explicando que o caso é conhecido como lento. Quanto ao motivo, o código relevante parece estar aqui: github.com/elm-lang/elm-compiler/blob/master/src/Optimize O artigo de Scott & Ramsey citado descreve como a heurística do "fator de ramificação pequeno" é desastrosamente lenta. No código acima, essa heurística é usada como critério de desempate quando pequenos padrões empatam. Então, eu aposto nos seus maus exemplos, pequenos empates default e acertamos o caso horrível. Minha opinião: Elm não deveria usar SBF como fator, ponto final.
sclv
24
Você pode responder a esta pergunta para que ela não apareça mais na lista de respostas não respondidas?
Julian Leviston
5
A compilação realmente terminou?
Worthy7 de

Respostas: