Hacklang的類型系統規格

Hacklang的類型系統規格

來自專欄 關於PL的碎碎念

臉書的大多數代碼使用的是Hack語言(hacklang.org/)寫的

曾經臉書有一句口號叫做

Move fast and break things

(現在這句口號的下半句被刪去了,只剩下了Move fast)

但是Hack語言的官網上寫的是

Programming productivity without breaking things

Hack的一大特性就是給PHP這個<del>全世界最好的</del>語言加上了類型

而最近隨著Hack項目組對於類型系統正規化的努力,類型系統規格在GitHub上發布了!

https://github.com/facebook/hhvm/blob/master/hphp/hack/doc/type_system/hack_typing.ott?

github.com

代碼庫中還帶了一個簡單的flow typing(並不是臉書flow項目)類型系統的例子

facebook/hhvm?

github.com圖標

Flow typing的關鍵在於通過分析變數在不同控制流中的運用,來分析出變數的類型。這樣的一個特點是可以給開發者比起靜態的單一類型的語言帶來更多的靈活性(PHP是世界上最好的語言!)

在typing rule中,每一條statement都有3個continuation: Skip, ContinueBreak。分別代表statement執行之後,回到循環頭和跳出循環的三個環境。根據statement的不同,typing rule會對於continuation和當前的typing environment做出一些限制。在限制給定的情況下,通過迭代可以找出一個滿足所有限制的environment,推導出變數的類型。

在語言特性不斷豐富的情況下,仍然能實行類型系統的正規化,發布類型系統規格,想想也是一件挺有挑戰性的一件事。希望這樣的嘗試能有一個好的結果。


推薦閱讀:

為什麼要學習編程設計
Malt開發實錄(一)不斷改變的設計
關於Vert.x的冷知識
Python 005:循環語句
Python的起源是什麼?

TAG:類型系統 | 編程語言 | Hack |