Elm Compiler fonctionnant pour toujours, l'ordinateur devient chaud

100

Je ne suis pas sûr de la cause de ce problème, mais dans un projet que je construis, le compilateur prend des heures juste pour compiler un module. La taille totale de ma base de code est de 352 Ko, mais aucun des modules ne dépasse 10 Ko. J'utilise un port natif, mais c'est très simple; Je vais juste chercher Date.now()avec.

Y a-t-il quelque chose de bien connu qui ferait que le compilateur elm prendrait une éternité à se compiler? Je n'ai pas beaucoup de dépendances, mais j'utilise beaucoup Html. J'apprécierais vraiment tout indice sur ce qui causerait cela.

Éditer

Il s'avère donc que les expressions de casse volumineuses feront que l'optimiseur prendra beaucoup de temps, à partir de 0.16. Voici la discussion sur Elm-Discuss soulevant le problème et l' essentiel de la correspondance de cas désagréable .

Je suppose que pour être verbeux et pour garder une carotte là-bas, pourquoi le compilateur elm prendrait-il cette route pour la correspondance de cas? Quelle est la machine sous-jacente qui se passe ici? Pourquoi le compilateur prendrait-il plus d'une heure pour optimiser plus de 60 correspondances de modèles sur une instruction case?

Athan Clark
la source
4
Je suis curieux. Quel type d'optimisation le compilateur Elm effectue-t-il pour que la compilation d'une expression de cas prenne des heures? Votre expression de cas ne semble pas trop grande (du moins pas assez grande pour un ordinateur). Cela signifie que le compilateur Elm a un algorithme d'optimisation vraiment vraiment vraiment vraiment vraiment vraiment vraiment vraiment vraiment vraiment vraiment vraiment vraiment vraiment vraiment vraiment vraiment vraiment vraiment vraiment vraiment vraiment vraiment vraiment vraiment vraiment vraiment vraiment très mauvais. Par exemple, imaginez combien de temps il lui faudrait pour compiler une expression de cas avec tous les 721 pokémon.
Aadit M Shah
4
Je suppose que la réponse se trouve ici , peut-être que vous devriez essayer d'ajouter une haskellbalise et voir si les gens de haskell peuvent nous révéler quelque chose.
halfzebra
5
Je pense que vous devriez poser une nouvelle question dans un meilleur endroit sur la résolution des affaires, et répondre à la vôtre en expliquant simplement que les affaires sont connues lentement. Quant à savoir pourquoi, le code pertinent semble être ici: github.com/elm-lang/elm-compiler/blob/master/src/Optimize L'article cité de Scott & Ramsey décrit comment l'heuristique du "petit facteur de branchement" est désastreusement lente. Dans le code ci-dessus, cette heuristique est utilisée comme un bris d'égalité lorsque les petites valeurs par défaut sont égales. Donc, je parie dans vos mauvais exemples, les petits défauts par défaut beaucoup et nous avons frappé l'horrible affaire. Mon avis: Elm ne devrait pas utiliser SBF comme facteur, point final.
sclv
24
Pouvez-vous s'il vous plaît répondre vous-même à cette question pour qu'elle n'apparaisse plus dans la liste sans réponse?
Julian Leviston
5
A-t-il déjà fini la compilation?
Worthy7

Réponses: