1. Hack 是什么?
Hack 是一种基于HHVM(HipHop VM 是Facebook推出的用来执行PHP代码的虚拟机,它是一个PHP的JIT编译器,同时具有产生快速代码和即时编译的优点。)的新型编程语言,可以实现与PHP的无缝互操作。Hack通过静态编辑确保了PHP的快速开发周期,与此同时又添加其它主流语言的很多通用功能,使其相比于PHP更具优势。
Hack通过检索本地服务器的文件系统表提供即时的类型校验,校验耗时通常小于200毫秒,因此它很容易集成到你的开发流程中而不引入明显的延时。
下面是Hack语言一些非常重要的特性:
- Type Annotations (类型注释): 可以是PHP代码显式类型参数,类成员变量和返回值:
1 <?hh 2 class MyClass { 3 const int MyConst = 0; 4 private string $x = ''; 5 public function increment(int $x): int { 6 $y = $x + 1; 7 return $y; 8 } 9 }
- Generic(泛型):允许类和方法参数化(例如,当类实例化或方法调用时的一个类型关联),同静态类型语言如C和Java一样:
1 <?hh 2 class Box<T> { 3 protected T $data; 4 5 public function __construct(T $data) { 6 $this->data = $data; 7 } 8 9 public function getData(): T { 10 return $this->data; 11 } 12 }
- Nullable Types(可空类型): Hack 通过使用符号“?”实现对可空类型的支持,这就引入了一种更安全的方式来处理空值,尤其对值不能取null的原始类型非常有用,例如bool 和int(用法:?bool 和 ?int),可空操作符可以用于任何类型或类
- Collections: 通过提供一流的,内置的参数化类型,如Vecctor(一个有序的,基于索引的列表),Map(一个有序的字典),Set(一个无重值列表), 和Pari(基于索引的只有两个元素的集合)来增强使用PHP 数组的体验。
- Lambadas 提供和PHP closures相类似的功能,但它通过隐式的封闭的函数体捕获变量并且更加简洁
<?hh function foo(): (function(string): string) { $x = 'bar'; return $y ==> $x . $y; } function test(): void { $fn = foo(); echo $fn('baz'); // barbaz }
Other significant features of Hack include Shapes, Type Aliasing, Async support, and much more.
Hack其他一些重要特性包括Shapes, Type Aliasing, Async support等。
更多详细信息请查阅:http://hacklang.org/