HipHop Virtual Machine
|Initial release||December 9, 2011|
|Stable release||3.4.0 / November 14, 2014|
|Written in||C++, C|
|License||PHP License and Zend License|
HipHop Virtual Machine (HHVM) is a process virtual machine based on just-in-time (JIT) compilation, serving as an execution engine for PHP and Hack programming languages. By using the principle of JIT compilation, executed PHP or Hack code is first transformed into intermediate HipHop bytecode (HHBC), which is then dynamically translated into the x86-64 machine code, optimized and natively executed. This contrasts to the PHP's usual interpreted execution, in which the Zend Engine transforms the PHP source code into opcodes as a form of intermediate code, and executes the opcodes directly on the Zend Engine's virtual CPU.
HHVM is created as the successor of the HipHop for PHP (HPHPc) PHP execution engine, which is a PHP-to-C++ transpiler also created by Facebook. Based on the gained experience and aiming to solve issues brought by HPHPc, in early 2010 Facebook decided to create a JIT-based PHP virtual machine. Issues associated with HPHPc included its flattened curve for further performance improvements, lack of full support for the PHP language, and difficulties related to specific time- and resource-consuming development and deployment processes. In Q1 2013, the production version of facebook.com switched from using HPHPc to HHVM.
Following the JIT compilation principle, HHVM converts executed PHP or Hack code into HHBC as a high-level bytecode, which is also known as intermediate language. HHBC is a bytecode format created specifically for HHVM, in a form that is appropriate for consumption by interpreters and just-in-time compilers. HHBC is then dynamically ("just-in-time") translated into the x86-64 machine code and natively executed, with additional optimizations performed through dynamic analysis of the translated bytecode. In these respects, HHVM has certain similarities to the virtual machines used by other programming languages, including the Common Language Runtime (CLR, for the C# language) and Java virtual machine (JVM, for the Java language).
HHVM brings many benefits over HPHPc; one of them is almost complete support for the entire PHP language as defined by its official 5.4 version, including the support for
eval() constructs. Also, with HHVM there is only one execution engine for both production and development environments, meaning that maintaining HPHPi separately is no longer required, and there exists both production and development integration with HPHPd. At the same time, development and deployment processes are much simpler when compared to HPHPc, as the lengthy binary build time is no longer present.
Together with HHVM, Facebook also released Hack, a programming language specifically tailored for HHVM that can be seen as a new version of PHP. Hack allows programmers to use both dynamic typing and static typing (a concept also known as gradual typing), and allows types to be specified for function arguments, function return values, and class properties; however, types of local variables cannot be specified. At the same time, Hack does not carry on some of the PHP features.
Studies of end-user behavior conclude that lack of website speed and even small delays in web server response time, lower than half of a second, can have significant negative impacts on end-user experience and overall web site performance. Some formerly popular websites, such as Friendster, have suffered due to prolonged speed issues.
As a process virtual machine that provides the execution environment, HHVM has the ability to use live type information to produce more efficient native code, leading to higher web server throughput and lower latency. In Q4 2012, the performance of facebook.com code running on HHVM achieved parity with HPHPc, while in December 2013 it was even surpassed by around 15%.
- Jason Evans (December 9, 2011). "The HipHop Virtual Machine". Facebook. Retrieved August 2, 2014.
- "facebook/hhvm: Release HHVM-3.4.0: Remove bad assert from BaseVector::data()". github.com. Facebook. November 14, 2014. Retrieved November 21, 2014.
- "facebook/hhvm: License". github.com. Facebook. Retrieved August 2, 2014.
- "facebook/hhvm". github.com. Facebook. Retrieved August 2, 2014.
- Kaushik Pal (April 28, 2014). "PHP and Zend Engine Internals". phpbuilder.com. Retrieved September 23, 2014.
- Drew Paroski (November 29, 2012). "Speeding up PHP-based development with HHVM". Facebook. Retrieved August 2, 2014.
- "Announcement on GitHub removing HPHPc support". github.com. Facebook. February 19, 2013. Retrieved May 24, 2013.
- Cade Metz (June 10, 2013). "How Three Guys Rebuilt the Foundation of Facebook". Wired. Retrieved September 28, 2014.
- "HipHop Bytecode v1 revision 18". github.com. Facebook. July 31, 2014. Retrieved May 24, 2013.
- "facebook/hhvm: About upgrade to PHP 5.4 engine". github.com. May 2013. Retrieved August 2, 2014.
- "facebook/hhvm: Home". github.com. Facebook. May 8, 2014. Retrieved August 2, 2014.
- Cade Metz (March 20, 2014). "Facebook Introduces 'Hack,' the Programming Language of the Future". Wired. Retrieved April 15, 2014.
- Julien Verlaguet; Alok Menghrajani (April 2014). "Hack: a new programming language for HHVM". code.facebook.com. Facebook. Retrieved March 23, 2014.
- Josh Lockhart (April 3, 2014). "Facebook’s Hack, HHVM, and the future of PHP". O'Reilly Media. Retrieved August 2, 2014.
- "Hack and HHVM: Type Annotations (Hack Manual)". docs.hhvm.com. Retrieved March 25, 2014.
- "Hack and HHVM: Type Inference (Hack Manual)". docs.hhvm.com. Retrieved March 25, 2014.
- "Hack and HHVM: Unsupported PHP Features in Hack (Hack Manual)". docs.hhvm.com. Retrieved April 2, 2014.
- Brady Forrest (June 23, 2009). "Bing and Google Agree: Slow Pages Lose Users". O'Reilly Media. Retrieved September 28, 2014.
- Gary Rivlin (October 5, 2006). "Wallflower at the Web Party". The New York Times. Retrieved September 28, 2014.
- "We are the 98.5% (and the 16%)". hhvm.com. December 19, 2013. Retrieved August 2, 2014.
Find more about
HipHop Virtual Machine
at Wikipedia's sister projects
|Media from Commons|
|Documentation on HHVM from MediaWiki|
- Official website
- HHVM source code on GitHub
- Internals of HHVM – a talk given by a HipHop engineer, Keith Adams, at QCon conference 2012
- HHVM Talk to Wikimedia – a talk given by a HipHop engineer, Andrew Paroski, at Wikimedia in March 2013
- Scaling with HipHop on YouTube – a talk given by a HipHop open source engineer, Sara Goleman, at PHP UK Conference 2013
- Official HHVM blog
- Official Facebook page