Elm Compiler läuft für immer, der Computer wird immer heißer

100

Ich bin nicht sicher, was dieses Problem verursacht, aber in einem Projekt, das ich erstelle, benötigt der Compiler Stunden, um ein Modul zu kompilieren. Die Gesamtgröße meiner Codebasis beträgt 352 KB, aber keines der Module ist größer als 10 KB. Ich verwende einen nativen Port, aber er ist sehr trivial. Ich hole nur Date.now()damit.

Gibt es irgendetwas Bekanntes, das dazu führen würde, dass das Kompilieren des Ulmen-Compilers ewig dauert? Ich habe nicht viele Abhängigkeiten, aber ich benutze viel HTML. Ich würde mich sehr über Hinweise freuen, was dies verursachen würde.

Bearbeiten

Es stellt sich also heraus, dass große Fallausdrücke dazu führen, dass der Optimierer ab 0,16 eine lange Zeit benötigt. Hier ist die Diskussion über Elm-Discuss , in der das Problem angesprochen wird , und ein Kern des bösen Fallmatches .

Ich denke, um wortreich zu sein und eine Karotte da draußen zu halten, warum sollte Elms Compiler diesen Weg für die Fallübereinstimmung einschlagen? Was ist die zugrunde liegende Maschinerie hier los? Warum sollte der Compiler länger als eine Stunde brauchen, um mehr als 60 Musterübereinstimmungen für eine case-Anweisung zu optimieren?

Athan Clark
quelle
4
Ich bin neugierig. Welche Art von Optimierung führt der Elm-Compiler durch, bei der das Kompilieren eines Fallausdrucks Stunden dauert? Ihr Fallausdruck scheint nicht zu groß zu sein (zumindest nicht groß genug für einen Computer). Dies bedeutet, dass der Elm-Compiler einen wirklich, wirklich, wirklich, wirklich, wirklich, wirklich, wirklich, wirklich, wirklich, wirklich, wirklich, wirklich, wirklich, wirklich, wirklich, wirklich, wirklich, wirklich, wirklich, wirklich, wirklich, wirklich, wirklich, wirklich, wirklich, wirklich, wirklich, wirklich, wirklich, wirklich schlechten Optimierungsalgorithmus. Stellen Sie sich zum Beispiel vor, wie lange es dauern würde, einen Fallausdruck mit allen 721 Pokémon zu kompilieren.
Aadit M Shah
4
Ich denke, die Antwort liegt hier . Vielleicht sollten Sie versuchen, ein haskellTag hinzuzufügen und zu sehen, ob Haskell-Leute uns etwas verraten können.
Halfzebra
5
Ich denke, Sie sollten eine neue Frage an einem besseren Ort stellen, um das Fallmaterial zu reparieren, und Ihre eigene Frage beantworten, indem Sie nur erklären, dass das Fallmaterial langsam bekannt ist. Der relevante Code scheint hier zu sein: github.com/elm-lang/elm-compiler/blob/master/src/Optimize Das zitierte Papier von Scott & Ramsey beschreibt, wie katastrophal die Heuristik des "kleinen Verzweigungsfaktors" katastrophal langsam ist. Im obigen Code wird diese Heuristik als Tiebreaker verwendet, wenn kleine Standardwerte gebunden sind. Also, ich wette in Ihren schlechten Beispielen, kleine Standardbindungen viel und wir treffen den schrecklichen Fall. Meine Meinung: Elm sollte SBF nicht als Faktor verwenden, Punkt.
sclv
24
Können Sie diese Frage bitte selbst beantworten, damit sie nicht mehr in der unbeantworteten Liste erscheint?
Julian Leviston
5
Hat es jemals das Kompilieren beendet?
Worthy7

Antworten: