HHVM 4.96
HHVM 4.96 is released! This release marks the end of support for 4.88; HHVM 4.91–4.95 remain supported, as do the 4.56 and 4.80 LTS releases.
(Note: HHVM 4.89 and 4.90 were skipped.)
Highlights
- Improved automatic inference of lambda parameter types when dealing with
mixedordynamic(examples).
Breaking Changes
- The built-in functions
assertandassert_optionswere removed. Using them had already been a typechecker error, but previously wouldn’t fail at runtime. - Using an arithmetic operator (
+,*, etc.) on an array now throws anInvalidOperationException(which can be caught) instead of a fatal error. - Fixed a bug that would allow a context constant with the same name to be declared twice. This may reveal new type errors.
- The INI option
hhvm.forbid_dynamic_calls_to_meth_callerwas renamed tohhvm.dynamic_meth_caller_level.- Its behavior is unchanged, it will raise a warning (if set to
1) or throw (2) whendynamic_meth_calleris called on a static method or a method not marked as<<__DynamicallyCallable>>.
- Its behavior is unchanged, it will raise a warning (if set to
Future Changes
- Using
meth_callerwith arguments that are not string/::classliterals will become a fatal error at runtime (it is already a typechecker error).- The future behavior can be enabled now using the INI option
hhvm.hack.lang.disallow_dynamic_meth_caller_args. dynamic_meth_callercan be used with non-literal arguments, but it can only invoke methods annotated with<<__DynamicallyCallable>>(currently might not be enforced based on the value ofhhvm.dynamic_meth_caller_level, as described above).
- The future behavior can be enabled now using the INI option