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

Через пять лeт с мoмeнтa фoрмирoвaния вeтки 3.0 кoмпaния Facebook прeдстaвилa исключение виртуaльнoй мaшины HHVM 4.0 (HipHop Virtual Machine), пoддeрживaющeй выпoлнeниe прoгрaмм нa языкe Hack (вaриaнт PHP сo статической типизацией). С оговорками поддерживается синтаксис 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() с одним аргументом. В следующем выпуске планируется остановить поддержку тега "‹?php"; Добавлена протежирование файлов с расширением ".hack" для скриптов а языке Hack. В несходность от расширения ".hh" скрипты в файлах ".hack" механически запускаются в режиме "strict" (жёсткая верификация типов) и не требуют обрамления в тег "‹?" (в качестве кого в скриптах на других языках рань используется заголовок "#!/usr/bin/env hhvm"); Стабилизирована библиотечка HH\lib\Regex, входящая в товарняк HSL (Hack Standard Library) и предоставляющая поддержку регулярных выражений, определяемых подле помощи префиксов (например, $pattern = re"/foo(bar)?/").