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 thenullornonnullsubtypes 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
__LSBor__MemoizeLSBattributes are used in a final class. If this is raised, fix by removing the__LSBattribute, and replacing__MemoizeLSBwith__Memoize. - Switch statements now throw if no case or default matches.
forloop 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: