类型检查器的 HHVM 非确定性行为
HHVM non-deterministic behaviour of the typechecker
我注意到调用 hh_client 并不总是返回正确的结果。例如:我有以下代码:
backend\ConvertMessage.hh:
<?hh // strict
namespace ApiBackend\ConvertMessage {
enum Status: int {
success = 0;
// ... error codes
};
// ... some other classes
};
项目中的其他地方:
throw new \SoapFault(
'Server',
\ApiBackend\ConvertMessage\Status::getNames()[$result->status]
);
有时,在对项目进行一些更改后,我会收到以下错误消息:Could not find static method getNames in type ApiBackend\ConvertMessage\Status (Typing[4090])
当我删除其中一个右花括号后的分号时,hh_client 停止显示错误。但是当我将分号重新插入原位时,typechecker 仍然给我 No errors!
消息。
这不是导致此问题的唯一文件 - 所有枚举都会发生。
在我看来,hh_client 或 hh_server 的某些缓存有问题。
在此先感谢您帮助我解决这个问题(如果我的英语不太好,请见谅)。
您使用的 HHVM 版本可能已过时。这个问题听起来很像 this race condition,它在 HHVM 3.5.0 和更新版本中得到修复(并被反向移植到 3.3.3 LTS 版本中)。值得注意的是,3.4.x 仍然存在错误。
您使用的是什么版本的 HHVM?
我注意到调用 hh_client 并不总是返回正确的结果。例如:我有以下代码:
backend\ConvertMessage.hh:
<?hh // strict
namespace ApiBackend\ConvertMessage {
enum Status: int {
success = 0;
// ... error codes
};
// ... some other classes
};
项目中的其他地方:
throw new \SoapFault(
'Server',
\ApiBackend\ConvertMessage\Status::getNames()[$result->status]
);
有时,在对项目进行一些更改后,我会收到以下错误消息:Could not find static method getNames in type ApiBackend\ConvertMessage\Status (Typing[4090])
当我删除其中一个右花括号后的分号时,hh_client 停止显示错误。但是当我将分号重新插入原位时,typechecker 仍然给我 No errors!
消息。
这不是导致此问题的唯一文件 - 所有枚举都会发生。
在我看来,hh_client 或 hh_server 的某些缓存有问题。
在此先感谢您帮助我解决这个问题(如果我的英语不太好,请见谅)。
您使用的 HHVM 版本可能已过时。这个问题听起来很像 this race condition,它在 HHVM 3.5.0 和更新版本中得到修复(并被反向移植到 3.3.3 LTS 版本中)。值得注意的是,3.4.x 仍然存在错误。
您使用的是什么版本的 HHVM?