看到 Vue 总结过去, 于是也想梳理下 Cirru 过去一年的进展
相对来说, Cirru 几乎是无人问津的项目, 只有我在坚守
然而无论怎样, 我都觉得 Cirru 依然是非常有趣的项目
2015 年相对从前收获的也算是更多, 因为终于投入实践当中了
细节可以看 Twitter 上的记录, 我正文发散梳理一下
https://twitter.com/cirrulang
Logo
Cirru 的 Logo 经过了重新设计, 更简单了, 联想一下 Cr
辨识度也许未必高, 但我想这个 Logo 是更加明确的
编辑器
编辑器支持有了一些增加, 一个是 Vim, 另一个是 LightTable
另外由于 Atom 基于 Webkit, 我尝试了一次非常夸张的主题
让语法高亮从文字颜色移开, 而是高亮背景, 瞬间风格就不同了
Parser
Parser 扩展到了更多的语言, 虽然没有本质的变化
现在大概有十种语言了, 基本都是函数式语言和脚本语言
目前的 Parser 是需要递归支持的, 所以底层语言实现起来有压力
另一方面我尝试了 Parser Combinators 方案解析
虽然目前没有完美, 但进展也还不错, 至少简单缩进是能运行的
Sepal
Sepal 是编译 Cirru 语法树到已有语言 AST 的方案
目前支持的是一些动态语言, 主要是 JavaScript, Clojure
另外 Elixir, Ruby, Lua 我仅仅是做了简单的尝试, 验证可行性
其实精力足够的话, 更多有定义 AST 的语言都能跟上
而编译到 LLVM 的方案失败了, WebAssembly 还在进行中
CirruScript
CirruScript 原本是手写的, 生成了 Source Maps
后来觉得效果不佳, 后端改成用 Babel 生成 ES5 代码
中间一段时间其实非常顺手, AST 的效果也不错
相应的生态, CLI, Gulp, Webpack, 算是都支持了
直到 Babel 6 发布的一次, 发生了较大的更改, AST 改变了
我纠结了挺久最后还好完成了兼容, 只是性能有些损失
总体看来 CirruScript 还是可靠的, 可以在个人项目继续用
Sepal.clj
https://github.com/Cirru/sepal.clj/
下半年上手了 Clojure 和 lein 环境, 于是尝试 Cirru 语法
幸运的是, Clojure 版本得益于 Macro 的强大, 很容易就完成了
只是 Sepal.clj 不支持生成 Macro, 因为本分通过 Macro 实现
即便这样, 使用 Sepal.clj 已经可以书写常用的代码, 实践下来也舒服
另外相关的编译, REPL 工具链也初步实现, 玩得起来了
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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。