Оптимизация компилятора детерминированных функций - PullRequest
3 голосов
/ 27 мая 2011

Я читал о детерминированном выполнении, то есть для одного и того же входа у вас одинаковый вывод. Мне было интересно, задумывался ли кто-нибудь из авторов компилятора об оптимизации детерминированных функций во время выполнения. Например, возьмите факторную функцию. Если во время выполнения обнаруживается, что он непрерывно вызывается с одним и тем же входным значением, компилятор может кэшировать выходное значение и вместо выполнения функции факториала может напрямую использовать это выходное значение. Похоже, хорошая тема исследования. Есть ли какие-либо статьи или работы на эту тему?

Ответы [ 4 ]

4 голосов
/ 27 мая 2011

Обычно это называется памятка , и это довольно распространенная оптимизация в функциональных языках.

1 голос
/ 27 мая 2011

Вы говорите о ссылочной прозрачности. И это большая часть функционального программирования.

http://en.wikipedia.org/wiki/Referential_transparency_(computer_science)

1 голос
/ 27 мая 2011

http://blogs.msdn.com/b/vcblog/archive/2008/11/12/pogo.aspx говорит о профильной оптимизации.

не отвечает на ваши вопросы как таковые, но в целом говорит об использовании поведения времени выполнения для оптимизации сборки

1 голос
/ 27 мая 2011

Это можно сделать, но, насколько я знаю, это не характерно для компиляторов.Проблема в том, что пользователи могут определять столько типов, сколько им нравится, и равенство любым способом, который им нравится, а с распределением кучи и тому подобным очень трудно доказать такую ​​вещь.По сути, это можно сделать, но только в том случае, если ваша функция включает в себя прямые численные вычисления, что является редкостью и поэтому обычно не имеет большого значения.

...