HHVM 4.78
HHVM 4.78 is released! This release marks the end of support for 4.72; HHVM 4.73–4.77 remain supported, as do the 4.32 and 4.56 LTS releases.
Highlights
- The
(class|function|interface|trait)_existsfunctions are now more optimized in repo-authoritative mode. This takes advantage of the fact that all HHBBC definitions are now unique and persistent. - Improved the typechecker error for invalid
(string)casts. var_dump()now distinguishes betweenvarrays anddarrays by default, instead of reporting both asarray.
Breaking Changes
is shape(...)requires adarray, andis tuple(...)requires avarray;ischecks with reified generics are now consistent with this when the generic is a shape or tuple. Previously, reified generics were more permissive.require()and related functions no longer support URIs, e.g.file://foo.hack.- All special-casing for
arrayhas been removed from the parser. It is now parsed as anametoken, like user-defined types.
Future Changes
- calling
array_fill_keys()will require that$keysis aContainer<Tk as arraykey>; this will allow specifying adarray<Tk, Tv>return type. Currently, it will returnnullif$keysis not aContainer.