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
mixed
ordynamic
(examples).
Breaking Changes
- The built-in functions
assert
andassert_options
were 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_caller
was renamed tohhvm.dynamic_meth_caller_level
.- Its behavior is unchanged, it will raise a warning (if set to
1
) or throw (2
) whendynamic_meth_caller
is 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_caller
with arguments that are not string/::class
literals 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_caller
can 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