php - 混合 PHP/Hacklang : Use the typechecker on regular PHP with commented type annotations

标签 php hacklang

我目前无法构建 hhvm,因为无法访问 64 位 VM,所以我无法使用他们拥有的类型检查器。他们的文档似乎没有详细描述类型检查器(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 上运行它。类型检查器是否以适合此设置的方式运行?

最佳答案

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

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

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

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

关于php - 混合 PHP/Hacklang : Use the typechecker on regular PHP with commented type annotations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22578151/

相关文章:

php - MYSQL SELECT 语句 Where last Date If Trace = 12

php - 使用 PHP 添加新的 mySQL 表行不起作用

php - Ubuntu:PHP 如何读取环境变量

php - 用php删除xml中标签值之间的空格

hacklang - 如何检查混合类型参数是否是 HackLang 中的整数向量?

hacklang - hacklang 中的线性类型 : Statically forcing an order of function calls

hacklang 的框架?

php - 如何在cakephp中连接三个表,其中一个是HABTM表

polymorphism - Hack语言会支持函数重载多态吗?

stateless - Hacklang 是有状态语言还是无状态语言?