HHVM 4.79 is released! This release marks the end of support for 4.73; HHVM 4.74–4.78 remain supported, as do the 4.32 and 4.56 LTS releases.

Highlights

  • Introducing new function reference syntax. See updated guide. For example:
    • fun('foo') becomes foo<>
    • class_meth(Foo::class, 'bar') becomes Foo::bar<>

Breaking Changes

  • HHVM now raises a notice when a method is called with incorrect case (e.g. $obj->Foo() instead of $obj->foo()). The typechecker had already been raising errors in all such cases. In the future, we expect these notices to become runtime errors.
    • the notices can be temporarily disabled using the INI option hhvm.raise_on_case_insensitive_lookup_v2=false
  • The typechecker now raises an error if new self(...) or new parent(...) is used inside a class with reified generic type parameters.
  • The typechecker now raises an error when trying to pass a dynamic-typed value where an enforceable reified generic type is expected.
  • Some typechecker errors were moved to a more appropriate location. This doesn’t introduce any new errors, but may require HH_FIXMEs to be moved. This includes:
    • calling a function with the wrong number of arguments (now an error at the point of the call, instead of the function declaration)
    • passing a non-reified generic type parameter where a reified one is expected

Future Changes

  • The built-in functions fun and class_meth will be removed in a future HHVM release, in favor of the new function reference syntax.
  • We expect method names to become case sensitive soon (currently a typechecker error but only a notice at runtime, see above).