HHVM 4.29 is released! This release marks the end of support for 4.23; 4.24–4.28 remain supported, as do the LTS releases 3.30 and 4.8.
Highlights
- Error messages now strip
HH\from names that are automatically imported into every namespace - Fixed
.hackfiles not being correctly indexed by some IDE features - Shape key autocomplete now detects pre-existing quotes, avoiding completions
such as
$someshape['somekey'']with two apostrophes; this was most common with IDEs configured to automatically insert matching quotation marks. - Added
RuntimeOption::CheckIntOverflowoption:- if 0 (the default), overflows will silently wrap; this setting has the best performance
- if 1, overflows will wrap and warn
- if 2, overflows will throw an exception
- Autocomplete now downranks magic methods and functions/methods with
DO_NOT_USEin the name
Breaking Changes
$c->toVector(),$c->toSet(),$c->toMap()have been removed from Hack collections; usenew Vector($c)etc or Hack Arrays instead; this is because they are not type-safe, as variance checks were added for generics- auto-imported reserved names (e.g. ‘self’) are now case-sensitive at runtime
Set::zip()now returnsSet<nothing>, as pairs can not be stored in Sets; this could lead to new type errors in code that would previously fail at runtime. Similar changes have been made toImmSetand other related classesunserialize()no longer creates references; if old serialized data containing references is used, the referenced value will be copied instead- references are no longer supported by the parser
- the runtime and typechecker now agree that
Awaitable’s fully-qualified name isHH\Awaitable; it remains autoimported. In previous releases, the runtime considered it to beHH\Awaitable, but the typechecker considered it to be\Awaitable - it is now an error to pass a superglobal as
inout array(without generics) is now considered to be the union ofarray<_>(a.k.avarray) andarray<_, _>(a.k.a.darray); this can lead to stricter handling of key (example 1, example 2)