2016-05-03 13 views
91

Non sono sicuro di cosa stia causando questo problema, ma in un progetto, sto costruendo, il compilatore impiega ore solo per compilare un modulo. La dimensione totale della mia base di codice è 352 KB, ma nessuno dei moduli ha dimensioni superiori a 10 KB. Sto usando una porta nativa, ma è molto banale; Sto solo recuperando Date.now() con esso.Elm Compiler per sempre, il computer si scalda appena

C'è qualcosa di noto che farebbe compilare il compilatore per l'eternità? Non ho molte dipendenze, ma sto usando molto l'Html. Gradirei davvero qualche suggerimento su cosa potrebbe causare questo.

Modifica

Così si scopre grandi espressioni case farà sì che l'ottimizzatore di prendere un lungo periodo di tempo, a partire da 0,16. Ecco il discussion on Elm-Discuss che porta il problema e uno gist of the nasty case match.

Immagino di essere prolisso e di tenere una carota là fuori, perché il compilatore di elm dovrebbe prendere questa strada per l'abbinamento case? Qual è il meccanismo sottostante in corso qui? Perché il compilatore impiega più di un'ora a ottimizzare le oltre 60 corrispondenze di pattern nell'istruzione di un caso?

+3

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

+4

Suppongo che la risposta sia [qui] (https://github.com/elm-lang/elm-compiler/blob/master/src/Optimize/Case.hs), forse dovresti provare ad aggiungere il tag 'haskell' e vedere se le persone di Haskell possono rivelarci qualcosa. – halfzebra

+0

@halfzebra, non ho idea di cosa stia facendo quel codice, ma sono profondamente sospettoso di qualsiasi codice che usi 'Data.Map' con le chiavi' Int'. 'Data.IntMap' di solito è molto più veloce. – dfeuer

risposta