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