Cirru Project in 2015

看到 Vue 總結過去, 因而也想梳理下 Cirru 過去一年的進展
相對來講, Cirru 幾乎是無人問津的項目, 只有我在堅守
然而不管怎樣, 我都以爲 Cirru 依然是很是有趣的項目
2015 年相對從前收穫的也算是更多, 由於終於投入實踐當中了
細節能夠看 Twitter 上的記錄, 我正文發散梳理一下
https://twitter.com/cirrulanggit

Logo

Cirru 的 Logo 通過了從新設計, 更簡單了, 聯想一下 Cr
辨識度也許未必高, 但我想這個 Logo 是更加明確的github


編輯器

編輯器支持有了一些增長, 一個是 Vim, 另外一個是 LightTable
另外因爲 Atom 基於 Webkit, 我嘗試了一次很是誇張的主題
讓語法高亮從文字顏色移開, 而是高亮背景, 瞬間風格就不一樣了後端

Parser

Parser 擴展到了更多的語言, 雖然沒有本質的變化
如今大概有十種語言了, 基本都是函數式語言和腳本語言
目前的 Parser 是須要遞歸支持的, 因此底層語言實現起來有壓力
另外一方面我嘗試了 Parser Combinators 方案解析
雖然目前沒有完美, 但進展也還不錯, 至少簡單縮進是能運行的編輯器

Sepal

Sepal 是編譯 Cirru 語法樹到已有語言 AST 的方案
目前支持的是一些動態語言, 主要是 JavaScript, Clojure
另外 Elixir, Ruby, Lua 我僅僅是作了簡單的嘗試, 驗證可行性
其實精力足夠的話, 更多有定義 AST 的語言都能跟上
而編譯到 LLVM 的方案失敗了, WebAssembly 還在進行中函數

CirruScript

http://script.cirru.org/工具

CirruScript 本來是手寫的, 生成了 Source Maps
後來以爲效果不佳, 後端改爲用 Babel 生成 ES5 代碼
中間一段時間其實很是順手, AST 的效果也不錯
相應的生態, CLI, Gulp, Webpack, 算是都支持了
直到 Babel 6 發佈的一次, 發生了較大的更改, AST 改變了
我糾結了挺久最後還好完成了兼容, 只是性能有些損失
整體看來 CirruScript 仍是可靠的, 能夠在我的項目繼續用性能

Sepal.clj

https://github.com/Cirru/sepal.clj/atom

下半年上手了 Clojure 和 lein 環境, 因而嘗試 Cirru 語法
幸運的是, Clojure 版本得益於 Macro 的強大, 很容易就完成了
只是 Sepal.clj 不支持生成 Macro, 由於本分經過 Macro 實現
即使這樣, 使用 Sepal.clj 已經能夠書寫經常使用的代碼, 實踐下來也舒服
另外相關的編譯, REPL 工具鏈也初步實現, 玩得起來了spa

WebAssembly

Cirru 中期目標是編譯到 WebAssembly, 做爲其中活躍的語言
我在觀察 WebAssembly 的 AST 後發現 Cirru 很是合適
這裏還只是用 Cirru 語法手寫 WebAssembly 文本格式而已
因而我實現了基本的 Cirru 語法生成 S 表達式的方案
另外借助 indutny 的 wasm-jit 實現, 還能用 Cirru 運行最簡單的代碼
https://github.com/Cirru/cirru-wasm-cli設計

結尾

其餘比較有意思的進展是 Twitter 上引發了一些人的注意
我也在 Medium 上放了簡單的文章介紹 Cirru 的細節
https://medium.com/cirru-project/如今 Cirru 的首頁天天都會有一兩個訪問量, 總比沒有要好期待隨着 WebAssembly 進展, 我能進一步推廣 Cirru

相關文章
相關標籤/搜索