近日,Facebook 開源了全新語言 Skip,這是 Facebook 內部開發的一個實驗性質程式語言,Facebook 表示,Skip 專案於 2018 年完成,今後將不再積極開發。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,同樣利用其追蹤副作用的特型來避免執行緒安全問題,如共享對可變狀態的訪問。
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
來源:開源中國
宣告:本網站所提供的資訊僅供參考之用,並不代表本網站贊同其觀點,也不代表本網站對其真實性負責。
更多閱讀:
1、[原創]微軟輕量級系統監控工具sysmon原理與實現完全分析(上篇)
2、[原創]【很有時間系列】講講怎麼列舉MmMapViewInSystemSpace分配的記憶體
3、[原創]死磕python位元組碼-手工還原python原始碼
4、[原創]Windows(x86)頁表與虛擬空間之我見
5、[原創] 《軟體除錯》分頁機制windbg例子分析(各種填坑)