Выпуск виртуальной машины 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