Facebook 開源 Skip,面向對象+函數式程式語言

Facebook 開源 Skip,面向對象+函數式編程語言

關注開源中國OSC頭條號,獲取最新技術資訊

近日,Facebook 開源了全新語言 Skip,這是 Facebook 內部開發的一個實驗性質編程語言,Facebook 表示,Skip 項目於 2018 年完成,今後將不再積極開發。

Facebook 開源 Skip,面向對象+函數式編程語言

Skip 的官方一句話介紹是“跳過那些你已經做過計算的”(skip the things you have already computed),這也就是它作為一個研究項目的主要目標,它要探索編程語言和運行時可以怎樣去支持準確、高效的基於記憶的緩存和緩存失效。而通過靜態類型系統追蹤可變性,Skip 完成了這個目標,同時它也支持現代編程語言特徵,例如 trait、泛型與子類型。

Skip 是一種通用編程語言,它跟蹤副作用,提供反應失效的緩存、ergonomics 和安全的並行化以及高效的 GC。Skip 是靜態類型的,它使用 LLVM 提前編譯,生成高度優化的可執行文件。具體特點如下:

反應失效的緩存

Skip 主要的新特性是精準跟蹤副作用,包括值的可變性和非確定性數據源與能夠提供反應失效的數據源之間的區別。Skip 的類型系統能夠證明給定函數邊界沒有副作用,這樣開發人員可以選擇安全地記憶該計算,並在運行時確保底層數據發生變化時,之前緩存的值是無效的。

Skip 支持兩種互補的併發編程,由於它跟蹤副作用,這兩種編程都避免了常見的線程安全問題。首先,Skip 支持使用 async/await 語法進行 ergonomic 異步計算。由於 Skip 跟蹤副作用,異步計算不能引用可變狀態,因此可以安全地並行執行。其次,Skip 有可用於直接並行計算的 API,同樣利用其追蹤副作用的特型來避免線程安全問題,如共享對可變狀態的訪問。

高效和可預測的 GC

Skip 使用一種新方法進行內存管理,結合了典型的垃圾回收特性和更直接的線性分配模式。由於 Skip 追蹤副作用,垃圾回收器僅需要掃描從底層計算處可訪問的內存,在實踐中這意味著開發者能夠使用可預測 GC 寫代碼。

混合函數式與面嚮對象語言的特點

Skip 的一大特點是混合了函數式與面向對象編程語言的特點,將兩者有機整合成了一種緊密結合的語言。與函數式語言類似,Skip 表達能力強,支持抽象的數據類型、模式匹配、簡單的 lambda 和高階函數等;另一方面,與命令式面向對象的語言相似,Skip 支持可繼承的類、可變對象、循環和提前返回。Skip 還結合了“系統”語言的思想,以支持低開銷抽象、通過值類的緊湊內存佈局,以及確保利用靜態方法分派實現代碼特例化的模式。

具體細節請查閱官方:http://www.skiplang.com/

Skip 由經驗豐富的團隊設計,包括 ActionScript、C#、Flow、Hack、HHVM、Prettier、React Native 和 Relay 的高級貢獻者,從 2015 年到 2018 年,Facebook 花了 3 年在這個項目上,該語言的主要設計者是 Facebook 語言團隊負責人 Julien Verlaguet,他維護了該語言、編譯器與庫。如今 Facebook 宣佈不再積極開發,但是通過開源的方式,希望讓 Skip 繼續保持活力,讓編程語言研究社區在語言設計與實現、編譯器和庫的基礎上進行研究和構建。

GitHub:https://github.com/skiplang/skip

開源社區OSC頭條號,每日推送最新優質的技術類文章,涵蓋外文翻譯,軟件更新,技術博客等優質內容。關注開源社區OSC頭條號,每日獲取最新技術資訊,點擊“瞭解更多”閱讀原文章,獲取 Skiplang 的詳細介紹與下載地址。


分享到:


相關文章: