Piszę optymalizator dla języka podobnego do JavaScript i muszę wybrać reprezentację kodu pośredniego. Oczywistym / typowym wyborem w dzisiejszych czasach jest Static Single Assignment (SSA).
Jednak implementacja nowoczesnego kompilatora w C omawia również funkcjonalną formę pośrednią, co w zasadzie oznacza przejście na czystą funkcjonalność dla reprezentacji pośredniej (czysto pod względem tylko zmiennych lokalnych, dane sterty są nadal zmienne, a nie CPS, tylko proste let
bloki i wywołania ogona) i ma pewne zalety, ponieważ jest łatwiejszy do uzasadnienia.
Przypuszczalnie nie jest to oczywiste lub wszyscy już używaliby takiej reprezentacji, więc moje pytanie brzmi: jakie wady ma funkcjonalna forma pośrednia w porównaniu do SSA?
functional-programming
compiler
ssa
rwallace
źródło
źródło
Odpowiedzi:
SSA doskonale nadaje się do eliminacji martwego kodu, ciągłej propagacji, częściowej specjalizacji i tym podobnych. Jeśli tego rodzaju rzeczy nie ma w twoim menu, możesz pominąć SSA i użyć bardziej zrelaksowanej reprezentacji dla łatwiejszych przebiegów analizy
źródło