Hack语言中文网

<?hh
echo "Hello, HackLang.org.cn!";

整洁! 安全! 可重构! 兼容php! 运行于HHVM中!
Hack是由facebook公司推出的一种编程语言。
简写为hh,可以使用hhlang.org.cn来访问本站。

新手旅程 HHVM安装

《Hack与HHVM权威指南》已公开发售

今天我们发行了Hack,一门能够在HHVM上与PHP无缝交互的编程语言。Hack的静态类型兼顾及协调了PHP的快速开发周期。同时增加了在其他现代编程语言中常见的许多功能。 我们已经在Facebook上部署了Hack,并且取得了巨大的成功。在过去的几年里,借助自家开发的一些重构工具,我们几乎将有的PHP代码迁移到了Hack上。 我们也很自豪地向外发布一个开源版本的Hack,作为我们的 HHVM runtime 平台的一部分,它现在同时支持Hack和PHP。

Hack通过本地服务器监控文件系统来提供瞬时的类型检查。它通常运行在不到200毫秒,因此很容易集成到您的开发工作流程,而不会引入明显的延迟。

Hack的目标为开发人员提供了一个方式来写干净,安全和可重构代码,同时要保持与当前的PHP代码库一定程度的兼容性。实现这一目标的主要途径是向开发人员提供一种方式来检查PHP函数和类的类型信息,因而提供了类型检查工具。此外,还提供了特定的语言功能:

  • 类型标注 这个特性将允许php代码来标注参数,类成员变量和返回值的类型。(原本的PHP是对参数的类型不敏感的。比如字符串型和整形。)
    <?hh
    class MyClass {
      const int MyConst = 0;
      private string $x = '';
      public function increment(int $x): int {
        $y = $x + 1;
        return $y;
      }
    }
  • 泛型,PHP(在同样的静态类型语言如C语言、Java、C#)。泛型允许类和方法是参数化(即,当一个类被实例化或方法调用,进行类型相关联)。这里有一个例子:
    <?hh
    class Box<T> {
      protected T $data;
    
      public function __construct(T $data) {
        $this->data = $data;
      }
    
      public function getData(): T {
        return $this->data;
      }
    }
  • Nullable Types Hack增加了一种更安全的方式通过被称为“可为空”型(有时也被称为“可能”或“选项”)的观念来处理空值。可为空值允许空值已分配并检查其上的任何类型。可为空值是原始类型通常不允许null作为它们的值,如BOOL和INT,但它也可以是用户自定义的类。下面是一个例子。注意?操作符用来表示可为空。
  • Hack增加了容器类型和接口到PHP。建立在Hack对泛型的支持,Hack 增加了内置的参数化集合,如vectors和maps。集合是专门用于数据存储和检索。集合实现许多相同的接口,并扩展到创造更多的专门集合。目前,Hack 可以实现以下具体的集合类型:
  • 拉姆达表达式 offer similar functionality to PHP closures, but they capture variables from the enclosing function body implicitly and are less verbose:
    <?hh
    function foo(): (function(string): string) {
      $x = 'bar';
      return $y ==> $x . $y;
    }
    function test(): void {
      $fn = foo();
      echo $fn('baz'); // barbaz
    }

Hack语言的更多特性还包括 Shapes, Type Aliasing, Async support, and 更多.

您可以用在您自己的代码库上,有很多开源的Hack及其转化工具 可以使用。 我们将继续在未来的道路上前行: 期待您的意见反馈,同时也欢迎您参与到HHVM和Hack的大家庭中来。


当然还有许多其它特性,可以到官方上详阅。

[项目官网]: http://hacklang.org.cn/
[下载地址]: http://hhvm.org.cn/install.php
[许可协议]: GNU General Public License (GPL)