HHVM 4.57 is released! This release marks the end of support for 4.51; HHVM 4.52–4.56 remain supported, as does the 4.32 LTS release.

Highlights

Breaking Changes

  • We no longer build packages for Ubuntu 16.04 (Xenial), Debian 8 (Jessie), and Debian 9 (Stretch). Building from source is also no longer supported on systems with GCC 6 or older, or with OpenSSL older than 1.1.0.
  • Docker images are now based on Ubuntu 20.04 instead of 18.04.
  • Attempting to declare the “magic method” __call is now a parser error. It had already been a typechecker error, but now it is also a fatal error at runtime.
  • The typechecker no longer declares FormatString in the root namespace (\FormatString). Use \HH\Lib\Str\SprintfFormat (compatible with \HH\Lib\Str\format()) or \HH\FormatString (compatible with sprintf()) instead.
  • Fixed a bug where accessing an instance variable of a dynamic value could cause the typechecker to report an error with primary position in a different file. This doesn’t introduce any new errors but may require some HH_FIXMEs to be moved.

Future Changes

  • In a future release, the internal representation of function/method references (i.e., the values returned by fun(), class_meth(), or inst_meth()) may change.
    • Currently, the internal representation is a string (for functions), or an array (for methods). In the future, this will likely change to a native function/method reference type, incompatible with string/array. Any code that relies on the current internal representation (e.g. by passing a function reference where a string is expected) will need to be fixed.
    • It is already a typechecker error to use function/method references in place of string/array values, so the change only affects runtime behavior of code that uses HH_FIXME to squelch the typechecker error.
    • The INI option hhvm.enable_func_string_interop=0 can be used to test the new behavior now.