Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

Обзор [ править ]

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

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

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

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

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

Производительность [ править ]

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

См. Также [ править ]

  • LLVM
  • Виртуальная машина Parrot
  • Фалангер

Заметки [ править ]

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

Ссылки [ править ]

  1. ^ a b c d Джейсон Эванс (9 декабря 2011 г.). «Виртуальная машина HipHop» . Facebook . Проверено 2 августа 2014 года .
  2. ^ "Релизы · facebook / hhvm" . Facebook. 15 августа 2018 . Проверено 19 ноября 2019 года .
  3. ^ «Сборка и установка HHVM на CentOS 7.x» . github.com . Facebook . 26 мая 2015 года . Проверено 12 июня 2015 года .
  4. ^ "Построение взлома проверки типов" . github.com . Facebook. 10 сентября 2014 . Проверено 12 июня 2015 года .
  5. ^ "Facebook HHVM начинает видеть Rust Rewrite - Phoronix" . Проверено 29 августа 2019 года .
  6. ^ a b "facebook / hhvm: Лицензия" . github.com . Facebook, Inc. Retrieved августа 2, 2014 .
  7. ^ https://hhvm.com/blog/2019/02/11/hhvm-4.0.0.html
  8. ^ Ottoni, Гильерме (20 июня 2018). «HHVM JIT: компилятор на основе профиля и регионов для PHP и взлома» . Труды 39-й конференции ACM SIGPLAN по проектированию и реализации языков программирования (PLDI) . ACM . С. 151–165.
  9. ^ "facebook / hhvm" . github.com . Facebook . Проверено 2 августа 2014 года .
  10. ^ Кошик Pal (28 апреля 2014). «Внутреннее устройство PHP и Zend Engine» . phpbuilder.com . Архивировано из оригинального 15 сентября 2014 года . Проверено 23 сентября 2014 года .
  11. ^ Исходный код HHVM на GitHub
  12. ^ a b c d Дрю Пароски (29 ноября 2012 г.). «Ускорение разработки на основе PHP с помощью HHVM» . Facebook . Проверено 2 августа 2014 года .
  13. ^ "Объявление на GitHub об отказе от поддержки HPHPc" . github.com . Facebook . 19 февраля 2013 . Проверено 24 мая 2013 года .
  14. ^ "HipHop Bytecode v1, редакция 18" . github.com . Facebook . 31 июля 2014 . Проверено 24 мая 2013 года .
  15. ^ "facebook / hhvm: Об обновлении до PHP 5.4" . github.com . Май 2013 . Проверено 2 августа 2014 года .
  16. ^ "facebook / hhvm: Home" . github.com . Facebook . 8 мая 2014 года . Проверено 2 августа 2014 года .
  17. Cade Metz (20 марта 2014 г.). «Facebook представляет« Hack », язык программирования будущего» . Проводной . Проверено 15 апреля 2014 года .
  18. ^ Жюльен Верлаге; Алок Менграджани (апрель 2014 г.). «Хак: новый язык программирования для HHVM» . code.facebook.com . Facebook . Проверено 23 марта 2014 года .
  19. Джош Локхарт (3 апреля 2014 г.). «Взлом Facebook, HHVM и будущее PHP» . O'Reilly Media . Проверено 2 августа 2014 года .
  20. ^ «Взлом и HHVM: Типовые аннотации (Руководство по взлому)» . docs.hhvm.com . Проверено 25 марта 2014 года .
  21. ^ «Взлом и HHVM: определение типа (руководство по взлому)» . docs.hhvm.com . Архивировано из оригинального 26 марта 2014 года . Проверено 25 марта 2014 года .
  22. ^ «Взлом и HHVM: Неподдерживаемые функции PHP во взломе (Руководство по взлому)» . docs.hhvm.com . Проверено 2 апреля 2014 года .
  23. ^ Криль, Пол (20 сентября 2017). «Забудьте о PHP! Вместо этого движок Facebook HHVM переключается на Hack» . InfoWorld . Проверено 6 февраля 2019 года .
  24. ^ «Мы 98,5% (и 16%)» . hhvm.com . 19 декабря 2013 . Проверено 2 августа 2014 года .

Внешние ссылки [ править ]

  • Официальный веб-сайт