-
Notifications
You must be signed in to change notification settings - Fork 35
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Оптимизация: переписаны функции, имеющие полиномиальную сложность (#194)
Глобальная оптимизация (#255) выявила участки кода, имеющие сверхлинейную зависимость по времени от входных данных. Если при компиляции отдельных небольших файлов проблемы заметны не были, то теперь, на конкатенации всех деревьев они встали в полный рост. Часть кода удалось оптимизировать, заменив Map на MapAccum, и соответственно, передавать константное значение не как параметр, а через аккумулятор: • FilterDeclaration в Desugaring.ref, • GenCommand-Globals в Generator-RASL.ref А некоторые функции пришлось переписать явно в линейные. Или, вернее, «прямоугольные» O(m×n) вместо «квадратных» O(max(m,n)²): • Переписана борьба с дублированием новых функций в прогонщике. Вместо DistinctFuncs, которая содержала две открытые переменные, делается два прохода по синтаксическому дереву: на первом все новые функции извлекаются (тут же исключается их дублирование), на втором удаляются те, которые в дереве уже присутствуют. • Переписан проход Pass-RemoveRedundantDriveInline в рассахаривателе. В нём ранее при помощи двойной открытой переменной обнаруживались парные (избыточные) метки Drive/Inline, функция вызывалась до тех пор, пока все избыточные пары не будут разрешены. Теперь делается два прохода по дереву: сначала все метки извлекаются, а потом они фильтруются. Преобразование является точным рефакторингом — позиции оставленных меток сохраняются. Формальных замеров я не делал, но цикл самоприменения с ключами -X-ODGS ускорился примерно в два раза (если не больше).
- Loading branch information
Showing
3 changed files
with
109 additions
and
62 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters