HHVM 4.153 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.128 (LTS) and HHVM 4.147–151 remain supported
- support has ended for 4.102 (LTS) and 4.146
A final release of 4.102 – 4.102.7 – has been made to fix compatibility issues on MacOS.
Changing Our Release Cycle
We moved from monthly to to weekly releases in 2019 due to the large rate of breaking changes, and the difficulty in keeping up with them; we believe that the severity of the breaking changes has decreased over time, and that the improved tooling and increased soundness of the language has changed this situation over the last few years.
We aim for 4.156 to be the last weekly release, and will then be moving to a two-week release schedule; we hope that this is a stepping stone on the way to a monthly release cycle, with an eventual goal of it being practical for the community to primarily target our LTS releases. We actively welcome feedback, and are open to reverting back to weekly releases if it is best for the commuinty.
We hope that this move will reduce work for community maintainers, and make standard approaches such as semantic versioning more practical.
Highlights
- Added function/method name to typechecker error messages for access to global variables in contexts without the necessary capabilities.
- Added
\HH\Lib\OS\posix_spawnp
and\HH\Lib\OS\posix_spawn
, which supports a subset functionality of the corresponding POSIX C API. - Added
getopt_with_optind
native function to support simple subparsers. - When an untyped lambda is passed as
nonnull
, the body is now typechecked as if the untyped parameters weremixed
instead ofnonnull
, which is consistent with passing an untyped lambda asmixed
ordynamic
(where parameters are assumed to bemixed
ordynamic
, respectively). Previously, passing an untyped lambda asnonnull
would always raise error 4224: “Cannot determine types of lambda parameters in strict mode”. - crc32q instructions are now used for improved performance when HHVM is built on for a compatible target.
- refactored typechecker errors for missing interface methods to flow more naturally and clarify the relationship between the various parts of the error and source filenames and line numbers.
- improved readability of typechecker errors when subclass members are incompatible with a supertype.
- LSP-compatible IDEs will now offer a quickfix to remove
async
from interface methods.async
interface methods and abstract methods are already an error, as it is an implementation detail – theAwaitable<T>
return type specifies how it is called. - Added a quickfix for nonexistent type name in params
- Added a quickfix for missing
new
- added IDE hover information for built-in types
inout
parameters can now bedynamic
.pcntl_waitpid()
andpcntl_wait()
now work correctly in server modes – proxygen, fastcgi, and CLI-server- added
File\leaky_temporary_file()
which requires manual closing and deletion.File\temporary_file()
remains strongly encouraged where possible. resource
s can now be passed asdynamic
.resource
remains strongly discouraged in cases where alternatives exist.
Breaking Changes
- Fix unsoundness with closure properties in readonly check. For example
($this->f)()
now requires readonly check if the return type off
is readonly. - Fix missing bound on
Set
keys;(Set {})->add($non_arraykey)
now properly raises a type error. <<__ProvenanceSkipFrame>>
has been removed from the HSL; this was an unsupported annotation that was previously intended for PHP array to vec/dict/keyset migration.unset
statement parameters can no longer contain function calls.- The proxygen server no longer supports TLS v1.0 or v1.1. Plain HTTP and TLS v1.2 or above are still supported.