Kompilator Elm działa wiecznie, komputer właśnie się nagrzewa

100

Nie jestem pewien, co powoduje ten problem, ale w projekcie, który tworzę, kompilator zajmuje kilka godzin, aby skompilować moduł. Całkowity rozmiar mojej bazy kodu to 352 KB, ale żaden z modułów nie przekracza 10 KB. Używam portu Native, ale jest to bardzo trywialne; Po prostu Date.now()z tym aportuję .

Czy jest coś dobrze znanego, co spowodowałoby, że kompilacja kompilatora elm trwałaby wieczność? Nie mam wielu zależności, ale często używam HTML. Naprawdę byłbym wdzięczny za wszelkie wskazówki, co mogłoby to spowodować.

Edytować

Okazuje się więc, że wyrażenia z dużymi wielkościami liter spowodują, że optymalizator zajmie dużo czasu, począwszy od wersji 0.16. Oto dyskusja na temat Elm-Omów poruszająca ten problem i podsumowanie paskudnego dopasowania przypadku .

Wydaje mi się, że aby być rozwlekłym i zachować marchewkę, dlaczego kompilator elma miałby wybrać tę drogę do dopasowywania wielkości liter? Co tu się dzieje? Dlaczego kompilator miałby zająć więcej niż godzinę, aby zoptymalizować ponad 60 dopasowań wzorców w instrukcji case?

Athan Clark
źródło
4
Jestem ciekawy. Jaki rodzaj optymalizacji wykonuje kompilator Elm, że kompilacja wyrażenia przypadku zajmuje godziny? Twoje wyrażenie przypadku nie wydaje się zbyt duże (przynajmniej nie wystarczająco duże dla komputera). Oznacza to, że kompilator Elm ma naprawdę, naprawdę, naprawdę, naprawdę, naprawdę, naprawdę, naprawdę, naprawdę, naprawdę, naprawdę, naprawdę, naprawdę, naprawdę, naprawdę, naprawdę, naprawdę, naprawdę, naprawdę, bardzo złego algorytmu optymalizacji. Na przykład, wyobraź sobie, ile czasu zajęłoby skompilowanie wyrażenia przypadku ze wszystkimi 721 pokémonami.
Aadit M Shah
4
Myślę, że odpowiedź leży tutaj , może powinieneś spróbować dodać haskelltag i zobaczyć, czy ludzie z haskell mogą nam coś ujawnić.
halfzebra
5
Myślę, że powinieneś zadać nowe pytanie w lepszym miejscu na temat rozwiązywania problemów ze sprawą i odpowiedzieć na własne, wyjaśniając, że sprawy są znane powoli. Odnośnie tego, wygląda na to, że odpowiedni kod znajduje się tutaj: github.com/elm-lang/elm-compiler/blob/master/src/Optimize W cytowanym artykule Scotta i Ramseya opisano katastrofalnie powolną heurystykę „małego rozgałęzienia”. W powyższym kodzie ta heurystyka jest używana jako rozstrzygnięcie rozstrzygające, gdy występują małe wartości domyślne. Więc stawiam na twoje złe przykłady, dużo małych domyślnych remisów i trafiliśmy w okropną sprawę. Moje zdanie: Elm nie powinien używać SBF jako czynnika, kropka.
sclv
24
Czy możesz odpowiedzieć sobie na to pytanie, aby nie pojawiło się już na liście bez odpowiedzi?
Julian Leviston
5
Czy kiedykolwiek faktycznie zakończyło kompilację?
Worthy 7

Odpowiedzi: