HHVM类型检查器的非确定性行为

时间:2015-02-02 14:56:35

标签: hhvm hacklang

我注意到调用hh_client并不总是返回正确的结果。例如:我有以下代码:

后端\ 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的某些缓存存在问题。

先谢谢你帮我解决这个问题(对不起,如果我的英语不太好)。

1 个答案:

答案 0 :(得分:3)

您可能正在使用过时的HHVM版本。这个问题听起来很像this race condition,它已在HHVM 3.5.0和更新版本中修复(并被反向移植到3.3.3 LTS版本中)。值得注意的是,3.4.x仍有错误。

您使用的是什么版本的HHVM?