Комментарии 12
Можно сказать только одно — я хочу с вами работать :))
После стек-ориентированных ассемблеров JVM / .NET внутренности PHP выглядят… ожидаемо, но непривычно. Особенно вскрывают мозг опкоды типа
ECHO
и YIELD
. Интересно, насколько такой формат байт-кода более (менее?) пригоден для оптимизации.Кто нибудь может пояснить практическую пользу этих знаний? Можно ли сказать, что если я знаю как работает виртуалка, я знаю как работает C? Я не тролю, просто не в курсе.
Ну например можно понять почему необычный код работает так необычно. Предлагаю на практике посмотреть какие опкоды генерирует строка:
echo print(5) . print(6) . print(7);
Т.к. без понимания этого — результат выполнения может порушить психику особо восприимчивых :D
Ну тут можно ещё просто помнить что print это не функция и соответственно скобки тут ничего не дают.
Потому будет:
761511
так как выполнение будет справа на лево работать.
так как выполнение будет справа на лево работать.
Ну это довольно очевидно для тех, кто знает, что пых правоассоциативный. Хорошо, а в этом варианте?
$items = [1, 2, 3, 4];
foreach ($items as &$i) {
var_dump($i);
}
foreach ($items as $i) {
var_dump($i);
}
Эту особенность, думаю, как раз через опкоды только можно раздебажить. У меня логических объяснений нет.
Последняя ссылка из первого цикла останется висеть.
Для подобных циклов крайне рекомендуется после цикла писать
Для подобных циклов крайне рекомендуется после цикла писать
unset($i);
Полагаю будет происходить следующее.
Каждый элемент массива будет записываться в последний элемент массива и второй вывод даст последовательность:
1,2,3,3
1,2,3,3
а что даст виртуальная машина для php? теперь код нужно компилировать?
Что значит "даст"? VM в пыхе ещё со время fi версии есть. Тот же опкеш и ускоряет загрузку путём избавления кеширования байткода и выгрузки оного напрямую в VM, ну если грубо.
Кому интересно — вот отличный доклад Дмитрия Стогова, основного разработчика этой самой виртуальной машина PHP, про ее внутреннее устройство и перфоманс:
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Виртуальная Машина PHP 7