HHVM 4.80
HHVM 4.80 is released! This release has long term support, so:
- this release will be supported for approximately 48 weeks
- the next LTS will be released in approximately 24 weeks
- HHVM 4.56 (LTS) and HHVM 4.75–4.79 remain supported.
- support has ended for HHVM 4.32 (LTS)
Highlights
- The bytecode cache can now store SystemLib units; this can lead to a better experience if HHVM is executed multiple times.
- Clearer error messages for unresolved subtypes of
mixed
; prior versions can refer to thenull
ornonnull
subtypes ofmixed
, which are more specific, but can be confusing. - Clearer error messages for variance mismatches: errors now say a type argument “only allows supertypes (it is contravariant”) or “must match exactly (it is invariant)”.
- Fixed a caching bug when a source file appears to be modified, but the content
(or bytecode) is unchanged, for example, by using
touch
; in prior versions, this leads to immediately exiting earlier, however the metadata should be updated to reflect the new modification time.
Breaking Changes
- A typechecker error is now raised if the
__LSB
or__MemoizeLSB
attributes are used in a final class. If this is raised, fix by removing the__LSB
attribute, and replacing__MemoizeLSB
with__Memoize
. - Switch statements now throw if no case or default matches.
for
loop conditions no longer permit comma-separated expressions. In prior versions, the behavior could be surprising - for example, infor(;foo(), bar();) {}
, the return value offoo()
is ignored. Commas are still permitted in other positions other positions, e.g.for ($i = 0, $j = 0; some_func($i, $j); ++$i, $++j)
.
Future Changes
- The following runtime type warnings will be changed to raise errors in a
future release. Initially, this will be done by changing the INI setting from
1
(warn) to2
(error), and we then expect to remove the options entirely. Attempting to recover from these errors may lead to additional irrecoverable errors.- Upper bounds of generics:
hhvm.enforce_generics_ub
- Property type hints:
hhvm.check_prop_type_hints
- Upper bounds of generics: