The next version of HHVM is hot off the press. After a few delays, we finally tracked down the segfault. We fixed it in master, but turning off the optimizations was safer for the release. Thanks for your patience.

This release bisected our semi-annual lockdown. If you remember last time we focused on framework unit tests, performance, and growing beards. This time, our frameworks were in good shape thanks to Fred and our Open Academy students, but our github story was not as pretty. At the start of lockdown we had 60 pull requests and nearly 450 issues. So our focus this time was github health and of course as always, perf.

Our final results from lockdown were, drumroll … 251 closed issues and 16% more efficient on large workloads. The 3.1.0 release timing was a bit unfortunate by bisecting our lockdown, so only 1/3 of the fixes and perf is in there. The few weeks after lockdown are always a little unstable and we didn’t want to push the release out any longer, so you get some of the awesomeness this time and the other bunch in the next release.

Some of the highlights:

  •  Support for PHP 5.6 variadic ...$args syntax for func declarations. We’re closing in on all the PHP 5.6 features. We just have splat left to build, and we’re working on it. Go ahead and bug Eugene on IRC so we can bump our PHP_VERSION up.

  • There is now over 400 ini settings you can use to configure various things. Most of them aren’t important but anything you were using a .hdf file for, you should be able to port over. We’ll work on the documentation (you can too, just click edit).

  • The Zend extension compatibility layer is getting much better thanks to tons of work by Tim Starling. Try it on your PHP5 extension and open an issue if it doesn’t work.

Security Fixes:

Full HipHop Changelog:

House of PHPainInsane PoetryJay-ZKanye West

Kayne West

  • Backport fix for CVE-2011-2202
  • Interfaces {Keyed}Container match arrays and collections, not iterables
  • Added ** and **= operators to HHVM and more compatibility fixes with PHP5.6
  • Fixes and improvements to collections
  • Replace json decoder with json-c library
  • Document VMRegAnchor and isVMFrame()
  • Improvements to array iterator code
  • Improvements to the type checker
  • Allow parser to be generated with bison 3
  • Improvements and speed up to reflection code

Jay-Z 9-May-2014

  • Make handling of code.hot overflows more robust
  • Catch server errors sooner
  • Fix segfault and infinite recursion in fileinfo extension
  • Resolve systemlib constants at compile time
  • Resume resumables natively
  • Import round() table optimizations from php-src
  • Delete bytecode Peephole optimizer
  • Remove most of annotation.cpp, and some other code gated on !UsedHHBBC
  • Create phis for locals
  • Fix free of “” in rfc1867PostHandler
  • Add firstValue(), firstKey(), lastValue(), lastKey() to collections
  • Add concat() to collections
  • Clarify Hack license
  • Add CakePHP3 to test runner
  • Better error when TC is full
  • Add hash_equals() from PHP 5.6

Insane Poetry 24-Apr-2014

  • Support for PHP 5.6 variadic …$args syntax for func declarations
  • Open source HHMeasure, a simple and extensible microbenchmarking tool
  • Added a new time-based sampling profiler (Project Xenon)
  • Fix PCRE unicode handling
  • Convert Zend compatibility layer and various extensions to HNI
  • Encode execution mode (eager or resumed) into SrcKey
  • Merge eager and resumed parts of async functions
  • Rework various async / continuation bytecode instructions

House of PHPain 1-Apr-2014

  • Allow direct arg passing with up to 15 params (7 if at least one is a double)

Comments


  • Ben Finn: Great update! The INI fixes are fantastic. :) In terms of major bugs, the issue (https://github.com/facebook/hhvm/issues/2589) with no timestamps in the error logs and buggy escaped characters is fairly major for any sort of serious development. Just tossing in my two cents, in terms of something that seems to need signal amplification.
  • HHVM 3.1.0 Released: […] HHVM team just released version […]
  • Paul Tarjan: Awesome, thanks for the pointer. I marked it hi-pri for the team. The reason I haven't done it yet is I'm scare facebook got addicted to the old behavior and weaning it off will be tricky. We'll do it though.
  • Ben Finn: Awesome, thank you!
  • Christopher Svanefalk: Quick question - are there going to be any more updated builds for the Ubuntu 13.10 repo, or are you only targeting 14.04? Amazing work :)
  • Paul Tarjan: No 13.10 is done for us.
  • Wikimedia engineering report, May 2014 — Wikimedia blog: […] in our production cluster. Most of Tim Starling’s work on the Zend compatibility layer have landed in HHVM 3.1. Most jobs are working, but bugfixing continues on […]
  • How we made editing Wikipedia twice as fast « Wikimedia blog: […] More generally, we are confident in having found a strong, capable upstream partner in Facebook, who is sensitive to our needs as reusers, and is committed to maintaining and improving HHVM for years to come. In turn, we started to contributed back upstream. The most substantial contribution made by a Wikimedia developer is the above mentioned major rewrite of the Zend Compatibility Layer, which allows Zend PHP extensions to be used with HHVM. These improvements by WMF Lead Platform Architect Tim Starling have been highlighted in the release notes for HHVM 3.1.0. […]
  • How Wikipedia Transitioned to HHVM | CloudBackupCheap.com: […] More generally, we are confident in having found a strong, capable upstream partner in Facebook, which is sensitive to our needs as reusers, and is committed to maintaining and improving HHVM for years to come. In turn, we started to contribute back upstream. The most substantial contribution made by a Wikimedia developer is the major rewrite of the Zend Compatibility Layer, which allows Zend PHP extensions to be used with HHVM. These improvements by WMF Lead Platform Architect Tim Starling have been highlighted in the release notes for HHVM 3.1.0. […]