5

由于无法访问 64 位 VM,我目前无法构建 hhvm,因此我无法使用他们拥有的类型检查器。他们的文档似乎没有详细描述类型检查器(hh_server 和 hh_client?)的操作。

对于任何使用过它的人,我想知道的是类型检查器是否可以在这种情况下使用:

假设有人无法将他们的 PHP 代码库转换为 Hack,所以他们改为使用 hacklang 类型注释形式的注释编写 PHP,并在构建时使用工具去除注释,创建一个 hh 文件,运行类型检查器并报告错误。

例如原始PHP:

<?php
function lar(/* int */ $x)/* : int */
{
    return $x;
}

复制上述内容,去掉注释,将 ?php 更改为 ?hh :

<?hh
function lar(int $x): int
{
    return $x;
}

通过类型检查器运行它,看看它是否产生错误。

这样你就可以使用普通的 PHP 进行合法的类型检查,而无需在 HHVM 上运行它。类型检查器是否以适合此设置的方式运行?

4

2 回答 2

6

我是 Facebook 的一名工程师,从事 Hack。你绝对可以做到这一点,我不会说这是一件坏事,但你会错过很多很棒的功能。Hack 类型检查器可以在构建时运行 ( hh_server --check /path/to/www),但运行类型检查器的最佳方式是作为守护进程。由于守护程序在后台逐步检查您的代码,因此它可以在被询问时非常快速地报告错误。这使您可以在编写代码时而不是在完成之后获得反馈。这种快速反馈循环确实有助于加快开发速度。

您可能会错过的其他一些事情:

  • 许多语言特性,如集合、lambda 表达式、类型注释的运行时强制和尾随逗号(Paul Tarjan个人最喜欢的)
  • HHVM 的巨大性能提升。

因此,如果您绝对不能使用 HHVM,那么这可能值得考虑,但如果可以,那么我强烈推荐 HHVM,以便获得 Hack 的全部好处。

于 2014-03-22T17:50:04.433 回答
0

这正是我们在开发部门内部所做的。

我们制作了一个脚本来在 hacklang 和 php 之间转换代码,因为我们希望能够在不将生产服务器转换为 hhvm 的情况下进行类型检查(我们正计划这样做)

您可以在我的 github 页面上找到该脚本
https://gist.github.com/Chipcius/d3dd4052b07a152870bd#file-hacklang-php-juggler-php

您可以通过传入目录和标志来确定转换级别(decl、partial、strict)来转换文件

转换后,您可以像编写 hacklang 一样运行 hh_client

当您想返回时,您可以使用 php 标志在您的代码上运行相同的脚本,并注释掉需要注释的注释。


工作流示例

php hacklang-php-juggler.php <myDir> hack
hh_client
php hacklang-php-juggler.php <myDir> php
于 2014-08-27T19:49:41.630 回答