開源的swift編譯器實現:Swallow

jopen 10年前發布 | 34K 次閱讀 Swallow Apple Swift開發

Swallow 是一個開源的swift編譯器實現,不過目前還沒完工,只能當做一個體驗版,好多東西都還需要大量的時間去開發,我只能在業余的時間去開發,加之要照顧懷孕的妻子以及有自身的全職工作,因此我不能保證開發進度能很快。

現在連代碼生成都還沒來得及弄,現在的版本只提供了一個粗糙仿制的REPL,可以看到現在的進展情況。暫時自帶的REPL只能查看一些語法和語義錯誤,以及查看符號的類型推導的結果。

目前語法分析參考的是官方文檔最早的版本(2014年6月2號發布的版本),因此好多新語法尚不被支持,后來幾次的版本,語法改動相對較小,所以我現在的開發重心一直放在語義分析這塊,等做得差不多了,我再來回過頭增加新的語法糖支持。

語義分析這塊目前的版本能處理函數重載,操作符重載,自定義操作符,類型定義(class/struct/protocol),泛型,泛型約束,類 型推導以及變量聲明(包括以元組的方式)等,目前的版本還沒有處理控制流,extension,模式匹配等,這些將在接下來的日子里陸續完工。

代碼生成這塊打算使用LLVM來完成,這樣方便利用LLVM的工具鏈來提供完整的生態系統。

編譯器代碼本身盡量用測試用例覆蓋,但是在做REPL的時候發現好多情況都沒考慮到,那些會引起REPL崩潰的代碼 將會陸續放入到測試用例中的,后期也打算將swift-compiler-crashes的代碼也集成到測試用例中去。

需要注意的是目前的版本為了方便用單元測試,內建類型(比如Builtin.Word)在語法分析里做了簡單的hack來處理,這個錯誤的做法將在整個編譯器能完整的支持標準庫的時候再進行修正。

Build instructions

Clone this repository to your drive:

$ git clone https://github.com/lexchou/swallow/

Build google-test:

$ cd swallow/gtest-1.7.0/
$ ./configure
$ cmake -G 'Unix Makefiles' .
$ make

Build the swallow/repl/test cases:

$ cd ..
$ cmake .
$ make

Start repl:

$ repl/repl

構建過程

先將項目克隆到本地:

$ git clone https://github.com/lexchou/swallow/

然后編譯: google-test:

$ cd swallow/gtest-1.7.0/
$ ./configure
$ cmake -G 'Unix Makefiles' .
$ make

然后編譯 swallow/repl/test cases:

$ cd ..
$ cmake .
$ make

執行 repl:

$ repl/repl

Snapshots

Comparison between official REPL and swallow

開源的swift編譯器實現:Swallow

Type inference

開源的swift編譯器實現:Swallow

Function overloads

開源的swift編譯器實現:Swallow

項目主頁:http://www.baiduhome.net/lib/view/home/1416214818695

 

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!