stringtranslate.com

HHVM

HipHop Virtual Machine ( HHVM ) — это виртуальная машина с открытым исходным кодом , основанная на компиляции just-in-time (JIT) , которая служит в качестве движка выполнения для языка программирования Hack . Используя принцип JIT-компиляции, код Hack сначала преобразуется в промежуточный байт-код HipHop ( HHBC ), который затем динамически транслируется в машинный код x86-64 , оптимизируется и выполняется в исходном коде. [7] [8] Это контрастирует с обычным интерпретируемым выполнением PHP , при котором Zend Engine преобразует исходный код PHP в коды операций , которые служат формой байт-кода , и выполняет коды операций непосредственно на виртуальном процессоре Zend Engine . [9]

HHVM разработан компанией Meta , исходный код проекта размещен на GitHub ; [10] он лицензирован в соответствии с условиями PHP License и Zend License . [1] [6]

Обзор

HHVM был создан как преемник PHP-движка исполнения HipHop for PHP (HPHPc), который является транспилятором PHP-to- C++, также созданным Facebook. [11] [12] Основываясь на полученном опыте и стремясь решить проблемы, представленные HPHPc, Meta решила в начале 2010 года создать виртуальную машину PHP на основе JIT . Проблемы, связанные с HPHPc, включали достижение плато для дальнейшего улучшения производительности, фундаментальную неспособность поддерживать все функции языка PHP и трудности, возникающие из-за определенных затрат времени и ресурсов на разработку и развертывание. [11] В первом квартале 2013 года производственная версия веб-сайта facebook.com прекратила использовать HPHPc и перешла на HHVM.

Следуя принципу JIT-компиляции, HHVM сначала преобразует исполняемый код в промежуточный язык , высокоуровневый байт-код HHBC. HHBC — это формат байт-кода, созданный специально для HHVM, подходящий для использования как интерпретаторами , так и компиляторами just-in-time. Затем HHVM динамически («just-in-time») транслирует HHBC в машинный код x86-64, оптимизированный посредством динамического анализа транслированного байт-кода. Наконец, он выполняет машинный код x86-64. [1] [11] [13] В результате HHVM имеет определенные сходства с виртуальными машинами, используемыми другими языками программирования, включая Common Language Runtime (CLR, для языка C# ) и виртуальную машину Java (JVM, для языка Java ).

HHVM имеет много преимуществ по сравнению с HPHPc. HHVM использует один и тот же механизм выполнения при развертывании как в производственной среде, так и в среде разработки, поддерживая при этом интеграцию между механизмом выполнения и отладчиком HPHPd в обоих типах среды; в результате поддержка HPHPi (интерпретатора HipHop) отдельно как утилиты разработки больше не требуется, как это было в случае с HPHPc. HHVM также устраняет длительные сборки, необходимые HPHPc для запуска программ, что приводит к гораздо более простым процессам разработки и развертывания, чем это было в случае с HPHPc. [1] Наконец, версии HHVM до 4.0 имеют почти полную поддержку всего языка PHP (как определено официальной реализацией PHP версии 5.4), включая поддержку конструкций и , что было невозможно в HPHPc. [14] [15]create_function()eval()

Вместе с HHVM 3.0 [16] Meta также выпустила Hack , производную от PHP [17] [18] , которая позволяет программистам использовать как динамическую , так и статическую типизацию (концепция, также известная как постепенная типизация ), и позволяет указывать типы для аргументов функций , возвращаемых значений функций и свойств классов . Однако Hack не обеспечивает полной обратной совместимости , поскольку удаляет несколько функций PHP, таких как оператор и динамические имена переменных . [19] [20] [21] [22]goto

В сентябре 2017 года было объявлено, что версия 3.30 станет последней версией HHVM, официально поддерживающей PHP, и что в дальнейшем HHVM будет поддерживать только Hack. [23] Это было связано с различиями и несовместимостями в PHP 7. [24] HHVM 4.0, выпущенная в феврале 2019 года, стала первой версией без поддержки PHP. [25]

Производительность

Как виртуальная машина процесса, которая обеспечивает среду выполнения, HHVM имеет возможность использовать информацию о типах в реальном времени для создания более эффективного собственного кода , что приводит к более высокой пропускной способности веб-сервера и меньшей задержке . В четвертом квартале 2012 года выполнение исходного кода facebook.com на HHVM достигло паритета производительности с HPHPc, [11] а в декабре 2013 года HPHPc был даже превзойден примерно на 15%. [26]

Смотрите также

Примечания

  1. ^ Только утилиты командной строки и демоны Hack для проверки типов ( hh_server и hh_client ) и форматирования кода ( hh_format ), входящие в комплект виртуальной машины HipHop, написаны на OCaml .

Ссылки

  1. ^ abcd Джейсон Эванс (9 декабря 2011 г.). "Виртуальная машина хип-хопа". Meta Platforms . Получено 2 августа 2014 г. .
  2. ^ "Release 3.15.0". 28 сентября 2016 г. Получено 13 марта 2018 г.
  3. ^ "Сборка и установка HHVM на CentOS 7.x". github.com . Meta Platforms . 26 мая 2015 г. . Получено 12 июня 2015 г. .
  4. ^ "Building the Hack typechecker". github.com . Meta. 10 сентября 2014 г. Получено 12 июня 2015 г.
  5. ^ "HHVM от Facebook начинает видеть переписывание Rust - Phoronix" . Получено 29 августа 2019 г. .
  6. ^ ab "facebook/hhvm: License". github.com . Facebook, Inc. Получено 2 августа 2014 г. .
  7. ^ Оттони, Гильерме (20 июня 2018 г.). «HHVM JIT: профильно-ориентированный компилятор на основе регионов для PHP и Hack». Труды 39-й конференции ACM SIGPLAN по проектированию и реализации языков программирования (PLDI) . ACM . С. 151–165.
  8. ^ "facebook/hhvm". github.com . Meta Platforms . Получено 2 августа 2014 г. .
  9. ^ Каушик Пал (28 апреля 2014 г.). "PHP и Zend Engine Internals". phpbuilder.com . Архивировано из оригинала 15 сентября 2014 г. . Получено 23 сентября 2014 г. .
  10. ^ Исходный код HHVM на GitHub
  11. ^ abcd Дрю Пароски (29 ноября 2012 г.). "Ускорение разработки на основе PHP с помощью HHVM". Meta Platforms . Получено 2 августа 2014 г. .
  12. ^ "Объявление о прекращении поддержки HPHPc на GitHub". github.com . Meta Platforms . 19 февраля 2013 г. Получено 24 мая 2013 г.
  13. ^ "HipHop Bytecode v1 revision 18". github.com . Meta Platforms . 31 июля 2014 г. . Получено 24 мая 2013 г. .
  14. ^ "facebook/hhvm: Об обновлении до движка PHP 5.4". github.com . Май 2013 . Получено 2 августа 2014 .
  15. ^ "facebook/hhvm: Home". github.com . Meta Platforms . 8 мая 2014 г. . Получено 2 августа 2014 г. .
  16. Пол Тарьян (28 марта 2014 г.). "HHVM 3.0.0". Facebook . Получено 26 декабря 2022 г. .
  17. Cade Metz (20 марта 2014 г.). «Facebook представляет „Hack“ — язык программирования будущего». Wired . Получено 15 апреля 2014 г.
  18. Жюльен Верлаге; Алок Менграджани (апрель 2014 г.). «Hack: новый язык программирования для HHVM». code.facebook.com . Facebook . Получено 23 марта 2014 г. .
  19. Джош Локхарт (3 апреля 2014 г.). «Взлом Facebook, HHVM и будущее PHP». O'Reilly Media . Получено 2 августа 2014 г.
  20. ^ "Hack and HHVM: Type Annotations (Hack Manual)". docs.hhvm.com . Получено 25 марта 2014 г. .
  21. ^ "Hack and HHVM: Type Inference (Hack Manual)". docs.hhvm.com . Архивировано из оригинала 26 марта 2014 г. Получено 25 марта 2014 г.
  22. ^ "Hack and HHVM: Unsupported PHP Features in Hack (Hack Manual)". docs.hhvm.com . Архивировано из оригинала 4 ноября 2015 г. Получено 2 апреля 2014 г.
  23. ^ Фред Эммотт (12 сентября 2018 г.). «Прекращение поддержки PHP и будущее хакерства» . Получено 26 декабря 2022 г.
  24. ^ Крилл, Пол (20 сентября 2017 г.). «Забудьте о PHP! Движок HHVM от Facebook переключается на Hack». InfoWorld . Получено 6 февраля 2019 г. .
  25. Фред Эммотт (11 февраля 2019 г.). "HHVM 4.0.0" . Получено 26 декабря 2022 г.
  26. ^ "Мы — 98,5% (и 16%)". hhvm.com . 19 декабря 2013 г. . Получено 2 августа 2014 г. .

Внешние ссылки