HHVM 4.20 is released! This release marks the end of support for 4.14; 4.15-4.19 remain supported, as do the LTS releases 3.30 and 4.8.
HHVM 4.20.1 was released to fix a build issue related to the new Rust parser on Mac OS X. All Linux builds for 4.20.1 are identical to 4.20.0.
- We are rewriting parts of our code from OCaml to Rust. This should not cause
any user-facing changes. The 4.20 release adds a new parser written in Rust,
which you can test by adding
hhvm.ini. If you see any differences in behavior or other issues, please open a GitHub issue.
- A new command
hh_client --rewrite-return-type <filename>is now available to help with migration from partial to strict mode. It adds
<<__Soft>>type annotations based on inferred return types.
- Invalid method calls on reified generic types now throw a
BadMethodCallExceptioninstead of causing a fatal error.
- A new function
fb_intercept2()was added as a replacement for
- A new function
HH_FIXMEhas been replaced with several new, more specific error codes. HHAST 4.15.2 provides an automated migration:
hhast-migrate --migrate-fixme-4110 <path>(this migration adds the new
FIXMEs without removing the old ones - after upgrading to HHVM 4.20, the old
FIXMEs can be removed with
hh_client --remove-dead-fixmes). The Hack Standard Library and other Hack libraries all provide a new release that works on both HHVM 4.20 and previous HHVM versions.
- Using attributes on variadic arguments (
<<Attrib>> ...$arg) is now a parser error.
- We are no longer building packages for Ubuntu 14.04 (Trusty Tahr).
- In HHVM 4.21, the new Rust parser will be enabled by default (with the option to opt-out).
- In HHVM 4.22, the old parser will be removed and the Rust parser will become the only one available.
unset()on a class constant will soon be a parser error (previously, such calls did nothing). You can enable this behavior now by adding
class_meth()with arguments that are not string literals will soon trigger a runtime warning (it is already a typechecker error). You can enable this behavior now by running HHVM with
-vEval.EmitFuncPointers=1 -vEval.EmitClsMethPointers=1 -vEval.WarnOnNonLiteralClsMeth=1