Лучшие практики использования константы в Perl - PullRequest
2 голосов
/ 02 мая 2019

Я только начал изучать Perl, я узнал, что константы рассматриваются как подпрограммы в Perl. Интересно, почему использование констант может быть хорошей практикой, если каждый раз, когда он выполняет вызов подпрограммы, а ЦПУ необходимо использовать инструкцию стек / переход?

1 Ответ

5 голосов
/ 02 мая 2019

Это разумная проблема, но на самом деле нет затрат на вызов функции.

Давайте сначала посмотрим на постоянную прагму документы

Когда в выражении используется константа, Perl заменяет ее значением во время компиляции, а затем может дополнительно оптимизировать выражение. В частности, любой код в блоке if (CONSTANT) будет оптимизирован, если константа имеет значение false.

То есть вы не платите за вызов функции во время выполнения.

Далее, под Technical Notes написано

В текущей реализации скалярные константы фактически являются встроенными подпрограммами. Начиная с версии 5.004 Perl, соответствующая скалярная константа вставляется непосредственно вместо некоторых вызовов подпрограммы, тем самым сохраняя издержки вызова подпрограммы. Увидеть Постоянные функции в perlsub для получения подробной информации о том, как и когда это происходит.

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

Пожалуйста, прочитайте оставшуюся часть этого раздела и обязательно посмотрите Предупреждения .

Упомянутые Постоянные функции в perlsub описывает

Функции с прототипом () являются потенциальными кандидатами для встраивания. Если результат после оптимизации и сложения констант является скаляром с постоянной или лексической областью, который не имеет других ссылок, он будет использоваться вместо вызовов функций, сделанных без &. Звонки с использованием & никогда не являются встроенными. (См. constant.pm для простого определения большинства констант.)

Это подтверждает, что, как правило, все в порядке с точки зрения эффективности.

С другой стороны, обратите внимание, что использование прагмы constant может вызвать вопросы о том, имеет ли значение использование голых слов в вашем коде (что может быть, а может и не быть).

«Хорошая практика» относится к преимуществам программирования использования константных (только для чтения) объявлений для переменных, которые не должны изменяться. Такая практика обычно существенно улучшает код.

...