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/