Search
Write a publication
Pull to refresh

Comments 9

Как упоминал выше, функция диспетчеризации получается размером примерно с файл generated_cases.c.h — 5700 строк. Уверен, что компилятор даже не попытается её оптимизировать.

Вот этого не понял - по идее, при оптимизации одного большого куска возможностей больше, можно проанализировать всё целиком.

Верно, только такой большой контекст либо не помещается в память, либо там дерево возможных оптимизаций настолько большое, что компиляция будет отнимать какое-то невероятно большое количество времени.

Чтобы в наше время с гигагерцами на процессоре и сотнями гигабайт оперативки на трансформацию каких то тысяч строк ресусрсов не хватило?

30 лет понадобилось чтобы в питоне "изобрели" шитый код

в форте это было из коробки в 71 году

Вот меня это тоже удивляет, что до сих пор куча компиляторов разворачивают switch в кучу if-else!

Обычно всё таки делают несколько проверок и один косвенный переход. Сomputed goto в конце каждой ветки эффективнее, но такое вроде автоматом никто не генерирует (надо распознать, что у нас switch завёрнут в цикл без промежуточного кода - по идее должно быть реально).

Даже gcc научился делать эту оптимизацию меньше 10 лет назад. В CPython в целом выбрано направление от простого к сложному: не так давно Гвидо заменил синтакстический анализатор, сейчас эта оптимизация... Насколько оно инженерно-верное - не уверен; но это позволило завоевать определённую популярность.

Тут слишком простой случай, когда бранчи для выбора case вообще не нужны.

Sign up to leave a comment.