Elm Compiler in esecuzione per sempre, il computer si sta surriscaldando


100

Non sono sicuro di cosa stia causando questo problema, ma in un progetto che sto costruendo, il compilatore impiega ore solo per compilare un modulo. La dimensione totale del mio codice base è di 352 KB, ma nessuno dei moduli supera i 10 KB. Sto usando una porta nativa, ma è molto banale; Sto solo recuperando Date.now()con esso.

C'è qualcosa di ben noto che potrebbe richiedere un'eternità per la compilazione del compilatore elm? Non ho molte dipendenze, ma utilizzo molto l'Html. Apprezzerei davvero qualsiasi suggerimento su cosa potrebbe causare questo.

modificare

Quindi risulta che le espressioni di maiuscole e minuscole faranno sì che l'ottimizzatore impieghi molto tempo, a partire da 0,16. Ecco la discussione su Elm-Discuss che solleva il problema e una sintesi della brutta corrispondenza del caso .

Immagino di essere prolisso e di mantenere una carota là fuori, perché il compilatore di elm dovrebbe prendere questa strada per la corrispondenza dei casi? Qual è il meccanismo sottostante che sta succedendo qui? Perché il compilatore dovrebbe impiegare più di un'ora per ottimizzare oltre 60 corrispondenze di pattern su un'istruzione case?


4
Sono curioso. Che tipo di ottimizzazione sta eseguendo il compilatore Elm che impiega ore per compilare un'espressione case? L'espressione del tuo caso non sembra troppo grande (almeno non abbastanza grande per un computer). Ciò significa che il compilatore Elm ha un algoritmo di ottimizzazione davvero davvero davvero davvero davvero davvero davvero davvero davvero davvero davvero davvero davvero davvero davvero davvero davvero davvero davvero davvero davvero davvero davvero davvero davvero davvero davvero davvero pessimo algoritmo di ottimizzazione. Ad esempio, immagina quanto tempo impiegherebbe a compilare un'espressione case con tutti i 721 pokémon.
Aadit M Shah

4
Immagino che la risposta si trovi qui , forse dovresti provare ad aggiungere haskelltag e vedere se le persone haskell possono rivelarci qualcosa.
halfzebra

5
Penso che dovresti fare una nuova domanda in un luogo migliore per risolvere il problema del caso e rispondere alla tua spiegando semplicemente che la roba del caso è nota lentamente. Per quanto riguarda il motivo, il codice pertinente sembra essere qui: github.com/elm-lang/elm-compiler/blob/master/src/Optimize Il citato articolo di Scott & Ramsey descrive come l'euristica del "piccolo fattore di ramificazione" sia disastrosamente lenta. Nel codice precedente, l'euristica viene utilizzata come tiebreaker quando i valori predefiniti piccoli sono pari. Quindi, scommetto nei tuoi cattivi esempi, piccoli legami di default molto e abbiamo colpito il caso orribile. La mia opinione: Elm non dovrebbe usare SBF come fattore, punto.
sclv

24
Puoi rispondere da solo a questa domanda in modo che non appaia più nell'elenco senza risposta?
Julian Leviston

5
Ha mai veramente terminato la compilazione?
Worthy7

Risposte:


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.