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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.