|
Posted
about 5 years
ago
by
Fred Emmott
HHVM 4.84 is released! This release marks the end of support for 4.78;
HHVM 4.79–4.82 remain supported, as does the 4.56 LTS release. This
primarily contains internal improvements for performance, maintainability, and
preparation for future work.
We
... [More]
will not be releasing 4.85 next week due to US holidays; we
expect the next release to be 4.86, during the week of 2020-11-30.
Highlights
Fixed propagation of reified generics in class B extends A when A’s
T parameter is reified, but B’s is not.
Future Changes
Indexing into a string with an index that is not an arraykey will throw an
InvalidArgumentException; currently, it emits a
String offset cast occurred notice.
[Less]
|
|
Posted
about 5 years
ago
by
Ján
A security update has been released for all supported HHVM versions. Please
update to one of the following versions to make sure you’re secure:
4.56.2
4.78.1
4.79.1
4.80.1
4.81.1
4.82.1
4.83.1
This security update addresses the
... [More]
following vulnerabilities:
dump-static-strings
(CVE-2019-3555)
and dump-pcre-cache
(CVE-2019-3556)
admin endpoints can write to any file the webserver has access to
out of bounds read in crypt()
light-process.cpp not dropping privileges correctly
integer overflow in gdImageCreate()
null pointer dereference in XMLReader::expand()
buffer overflow in ldap_escape()
(CVE-2020-1916)
[Less]
|
|
Posted
about 5 years
ago
by
Ján
HHVM 4.83 is released! This release marks the end of support for 4.77;
HHVM 4.78–4.82 remain supported, as does the 4.56 LTS release.
Breaking Changes
Attributes used on lambda functions must now be
defined, similarly to attributes used in any
... [More]
other position. To allow an attribute to
be used on lambda functions, its definition must implement the interface
\HH\LambdaAttribute.
The option hhvm.hack.lang.enable_first_class_function_pointers was removed.
The new
function reference
syntax is now always enabled.
The option hhvm.emit_cls_meth_pointers is now enabled by default. It causes
the built-in function class_meth() to return values in the same format as
the new function reference syntax, which should make migrating easier.
For easier migration, the additional option
hhvm.is_compatible_cls_meth_type = 1 can be used to
allow both formats to be considered valid.
Future Changes
The built-in functions fun() and class_meth() will be removed in a future
release. Use the new
function reference
syntax instead.
The INI option hhvm.hack.lang.disallow_fun_and_cls_meth_pseudo_funcs = 1
and .hhconfig option disallow_fun_and_cls_meth_pseudo_funcs = true can
be used to disable these functions in the current HHVM release.
[Less]
|
|
Posted
about 5 years
ago
by
Fred Emmott
HHVM 4.82 is released! This release marks the end of support for 4.76;
HHVM 4.77–4.81 remain supported, as does the 4.56 LTS release.
Highlights
AsyncMysqlQueryResults has the new method
dictRowsTyped(): vec>.
Improved several typechecker
... [More]
error messages for incompatible method overrides,
e.g. when an override has more mandatory arguments.
Breaking Changes
array_fill_keys() will now throw an InvalidArgumentException if the first
argument is not a Container; in previous versions,
HHVM would return false. With this change, array_fill_keys() now only
returns darrays.
improved correctness when type constants are accessed via inferred union or
intersection types. This can both lead to fewer incorrect type checker errors,
but also additional correct type checker errors.
[Less]
|
|
Posted
about 5 years
ago
by
Ján
HHVM 4.81 is released! This release marks the end of support for 4.75;
HHVM 4.76–4.80 remain supported, as does the 4.56 LTS release.
Highlights
A new built-in type AnyArray was added, representing the parent type of all
containers that are
... [More]
values (vec, dict, keyset, varray, darray;
does not include containers with reference semantics like Vector). It is
a subtype of KeyedContainer.
Breaking Changes
The INI option hhvm.hack_arr_dv_arr_var_dump was removed. var_dump will
now always output varray or darray instead of array.
Future Changes
Similarly to var_dump, var_export will also start distinguishing between
varray and darray.
Use the INI option hhvm.hack_arr_dv_arr_var_export=1 to enable this
behavior now.
Support for # comments will be removed in a future release.
Use // or /* instead.
Shebang at the beginning of
a Hack file will stay supported.
[Less]
|
|
Posted
about 5 years
ago
by
Fred Emmott
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
... [More]
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 the null or nonnull subtypes of mixed, 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, in
for(;foo(), bar();) {}, the return value of foo() 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) to 2 (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
[Less]
|
|
Posted
about 5 years
ago
by
Ján
HHVM 4.79 is released! This release marks the end of support for 4.73;
HHVM 4.74–4.78 remain supported, as do the 4.32 and 4.56 LTS releases.
Highlights
Introducing new function reference syntax. See
updated guide.
For example:
... [More]
fun('foo') becomes foo<>
class_meth(Foo::class, 'bar') becomes Foo::bar<>
Breaking Changes
HHVM now raises a notice when a method is called with incorrect case (e.g.
$obj->Foo() instead of $obj->foo()). The typechecker had already been
raising errors in all such cases. In the future, we expect these notices to
become runtime errors.
the notices can be temporarily disabled using the INI option
hhvm.raise_on_case_insensitive_lookup_v2=false
The typechecker now raises an error if new self(...) or new parent(...) is
used inside a class with
reified
generic type parameters.
The typechecker now raises an error when trying to pass a
dynamic-typed
value where an
enforceable
reified generic type is expected.
Some typechecker errors were moved to a more appropriate location. This
doesn’t introduce any new errors, but may require HH_FIXMEs to be moved. This
includes:
calling a function with the wrong number of arguments (now an error at the
point of the call, instead of the function declaration)
passing a non-reified generic type parameter where a reified one is expected
Future Changes
The built-in functions fun and class_meth will be removed in a future HHVM
release, in favor of the new function reference syntax.
We expect method names to become case sensitive soon (currently a
typechecker error but only a notice at runtime, see above).
[Less]
|
|
Posted
about 5 years
ago
by
Fred Emmott
HHVM 4.78 is released! This release marks the end of support for 4.72;
HHVM 4.73–4.77 remain supported, as do the 4.32 and 4.56 LTS releases.
Highlights
The (class|function|interface|trait)_exists functions are now more optimized
in
... [More]
repo-authoritative mode. This takes advantage of the fact that all HHBBC
definitions are now unique and persistent.
Improved the typechecker error for invalid (string) casts.
var_dump() now distinguishes between varrays and darrays by default,
instead of reporting both as array.
Breaking Changes
is shape(...) requires a darray, and is tuple(...) requires a varray;
is checks with reified generics are now consistent with this when the
generic is a shape or tuple. Previously, reified generics were more
permissive.
require() and related functions no longer support URIs,
e.g. file://foo.hack.
All special-casing for array has been removed from the parser. It is now
parsed as a name token, like user-defined types.
Future Changes
calling array_fill_keys() will require that $keys is a
Container; this will allow specifying a
darray return type. Currently, it will return null if $keys
is not a Container.
[Less]
|
|
Posted
about 5 years
ago
by
Ján
HHVM 4.77 is released! This release marks the end of support for 4.71;
HHVM 4.72–4.76 remain supported, as do the 4.32 and 4.56 LTS releases.
Highlights
Removed redundant typechecker error 4164 (“Properties cannot be declared
final”). The same
... [More]
issue is already reported as a parsing error (1002).
Improved IDE support: The “rename” operation now also supports type aliases.
Breaking Changes
The Xbox extension no longer supports inter-process communication (local or
remote). It can still be used for in-process parallelism (xbox_task_*
functions). Removed built-in functions:
xbox_send_message
xbox_post_message
xbox_get_thread_timeout
xbox_set_thread_timeout
xbox_schedule_thread_reset
xbox_get_thread_time
A constant can no longer be used as a shape key if its type is an opaque
type alias (a newtype not from the same file). This makes it more consistent
with how opaque type aliases can be used in other contexts.
[Less]
|
|
Posted
about 5 years
ago
by
Ján
HHVM 4.76 is released! This release marks the end of support for 4.69;
HHVM 4.71–4.75 remain supported
(4.70 was skipped),
as do the 4.32 and 4.56 LTS releases.
Highlights
The typechecker now allows method calls on generic types with multiple
... [More]
upper bounds, as long as the method call is valid for all of them
(example).
Previously, it was an error if the method declarations weren’t identical on
all of the upper bound types.
The typechecker now more accurately tracks the types of all local variables
when dealing with nested try/catch/finally blocks
(examples). This allows some programs to typecheck
that previously would have failed.
Breaking Changes
$GLOBALS was removed. Global variables can still be accessed using the
following functions:
HH\global_get
HH\global_isset
HH\global_key_exists
HH\global_set
HH\global_unset
The typechecker now reports an error if a trait with any final methods is
included multiple times in the same class (this can happen e.g. if the trait
is used from a class as well as its parent class). Previously, this caused a
runtime error but wasn’t caught by the typechecker.
Fixed some loopholes that allowed assigning a value to a variable named
$this. In almost all cases, it had already been banned by both the
typechecker and the runtime, but there were some remaining edge cases:
catch (Exception $this)
calling a function with inout $this as an argument
unset($this)
?enum {...} is no longer a valid XHP attribute type. Use enum {...}
instead, which is equivalent (XHP attributes are nullable unless declared as
@required).
Using $$ (special variable inside a
pipe expression)
as an inout argument now raises a fatal error at runtime. It had already
been a typechecker error.
[Less]
|