Выпуск виртуальной машины HHVM 4.0 с прекращением поддержки PHP

Спустя пять лет с момента формирования ветки 3.0 компания Facebook представила выпуск виртуальной машины HHVM 4.0 (HipHop Virtual Machine), поддерживающей выполнение программ на языке Hack (вариант PHP со статической типизацией). С оговорками поддерживается синтаксис PHP 5 и большинство возможностей PHP 7. Код проекта написан на C++ и распространяется под открытыми лицензиями PHP и Zend.

Отличительной чертой HHVM является применение JIT-компиляции и динамических оптимизаций, учитывающих особенности выполнения скрипта. В процессе выполнения кода производится определение типов данных и генерация на лету эффективных наборов машинных инструкций, оптимизированных специально для используемых типов. Перед выполнением PHP-скрипты преобразуются в специальное промежуточное абстрактное представление AST (Abstract Syntax Tree), которое затем транслируется в байткод HHBC (HipHop bytecode), который выполняется внутри высокоуровневой виртуальной машины.

Проект активно используется в инфраструктуре Facebook. Ранее HHVM использовался проектами WordPress и Wikipedia. После намерений Facebook отказаться от полной поддержки PHP данные проекты перешли на ветку PHP 7, которая начиная с PHP 7.2 в некоторые тестах опережает по производительности HHVM.

Ключевые изменения:

  • HHVM отныне не нацелен на обеспечение полной совместимости с PHP. Начиная с HHVM 4.0 прекращена поддержка некоторых специфичных для PHP особенностей, без которых будет нарушена совместимость с большинством PHP-проектов. Например, больше не поддерживаются особенности обработки массивов, не свойственные массивам и коллекциям языка Hack, прекращена поддержка ссылок на переменные, удалены функции, требующие доступа к памяти вызывающего, такие как compact (), extract (), get_declared_variables (), func_get_args () и parse_str () с одним аргументом. Прекращена поддержка менеджер зависимостей Composer. В следующем выпуске планируется прекратить поддержку тега »‹? php»;
  • Добавлена поддержка файлов с расширением ».hack» для скриптов, а языке Hack. В отличие от расширения ».hh» скрипты в файлах ».hack» автоматически запускаются в режиме «strict» (жёсткая проверка типов) и не требуют обрамления в тег »‹?» (как в скриптах на других языках теперь используется заголовок »#!/usr/bin/env hhvm»);
  • Стабилизирована библиотека HH\lib\Regex, входящая в состав HSL (Hack Standard Library) и предоставляющая поддержку регулярных выражений, определяемых при помощи префиксов (например, $pattern = re»/foo (bar)?/»).

© OpenNet