OnionGrief / Chipollino

преобразования регулярных выражений и конечных автоматов
Other
19 stars 4 forks source link

Оптимизация счётчика картинок #228

Closed TonitaN closed 1 year ago

TonitaN commented 1 year ago

В настоящее время диаграммы порождаются прямо по ходу логгирования, поэтому если строится длинная функциональная последовательность преобразований автомат -> автомат, то все промежуточные диаграммы дублируются. Сейчас самой дорогой по времени является операция dot2tex в рендеринге, и такое дублирование не очень хорошо сказывается на скорости. Предлагаю делать привязку картинки к шагу, и если на входе следующего шага вычислений тот же автомат, что и был на выходе, хотя бы его не дублировать в генераторе. Лучше не дублировать их и между функциональными последовательностями, а привязывать к переменной, если она типа автомат, соответствующую диаграмму, и при переиспользовании этой переменной включать тот же исходник. Аналогично - если преобразование ничего не сделало. Потому что сейчас такая последовательность:

R = {(a|b)(ba|aab|ab)*(ab|ab)(aa|aab|ba)*(a|)} !!
A4 = Antimirov R !!
A5 = MergeBisim A4 !!
A6 = Reverse A4 !!
A7 = Determinize A4 !!

порождает 7 диаграмм, а по существу тут только три (что видит тайпчекер, но не видит логгер). Заодно такой рефакторинг решит проблему повторного рендеринга при доставании из кеша.