PHP7: функции → опкоды

Как известно, в ПХП7 некоторые функции будут заменены на опкоды для ускорения работы. Вызов функции — дорогая операция в этом интерпретаторе, а опкоды — дёшевы. Я заглянул в исходные коды (см. функцию zend_try_compile_special_func, если интересно) и нашёл там список функций, которые заменяются в текущей версии «семёрки».

Это strlen, все функции is_* (is_float, is_string и прочие), defined, call_user_func_array, call_user_func и assert.

Поделиться
Отправить
6 комментариев
Степан Анчугов

Ага, как раз вот только что написал пулл-реквест, заменяющий dirname(__FILE__) на __DIR__, сравнил опкоды и задумался о том, как в Ruby происходит подобный процесс оптимизации интерпретатора. Там происходят от версии к версии примерно подобные улучшения, которые сводят на нет эффекты микрооптимизаций.

Евгений Степанищев (bolknote.ru)

Комментарий для Степан Анчугов:

Ого, полезно (правда, мы в коде всё это заменили уже), можно посмотреть на пуллреквест?

Alexander

Что такое опкоды в контексте PHP? Вместо вызова функции команды будут встроены непосредственно?

Евгений Степанищев (bolknote.ru)

Комментарий для Alexander:

http://php.net/manual/en/internals2.opcodes.php

q

А какие есть фундаментальные преграды для того, чтобы оптимизировать вызовы функций?

Евгений Степанищев (bolknote.ru)

Комментарий для q:

В PHP7 оптимизированы будут (есть RFC уже, за него проголосовали), но опкоды всё равно дешевле.

Популярное