介绍
Cirru 是我在探索的玩具, 希望让编程语言的编写更有趣
最初我准备的是做结构化的编辑器, 但是效果不够理想
www.tudou.com/programs/view/lehLxTKfc5w/?phd=1
然后备用方案是模仿 Lisp 写法, 但是基于缩进, 方便阅读跟书写, 的一套语法
http://repo.cirru.org/parser/
关于细节可以看相关社交网站上贴出来的想法, 比较凌乱的:
https://github.com/Cirru/
https://twitter.com/CirruLang
http://weibo.com/jiyinyiyong/profile?&key_word=cirru
目前我探索了一下, 写了若干种语言的 Parser 的实现
https://github.com/Cirru/?utf8=%E2%9C%93&query=parser
我是从 CoffeeScript 版本手工转到这么几个语言的...
另一个是执行代码方面, 之前尝试写解释器, 不理想, 我太弱了
所以干脆, 不做后端, 尽量把语法树编译到现成的语言的 AST 之类的
比如编译到 ES6 的 AST, 然后在浏览器端以 JavaScript 运行
http://v2ex.com/t/181804
现在做了支持, Grunt, Gulp(要等 4.x), Webpack 都能用 CirruScript 运行
https://github.com/tkellen/js-interpret/blob/master/index.js#L3
关于 Sepal 项目
之前想做编译 LLVM IR.. 我太弱了.. 后来想到用 Julia, Julia 后端是 LLVM
于是就引出来 Sepal 命名的项目, 就是把 Cirru 语法转到各种 AST
除了 ES6 能用, 我尝试了 Julia, Ruby, Racket, 原理上确定能走通了:
https://github.com/Cirru/?utf8=%E2%9C%93&query=sepal
当然, 这个距离真的用 Cirru 写代码还很远很远, 我写写 ES6 已经够玩了
发这个帖子主要想看下有没有同学对 Cirru 这个想法感兴趣
而且, 杂七杂八的想法, 已经远远超乎我的技能范围了...
比如说, 基于已有的 Cirru Parser 开发玩具, 或者做真的使用的项目出来
比如说, 编写更多语言的 Parser 实现, 主要用来装逼...
比如说, 找个支持 AST 元编程的语言, 比如 Python 跟 Nim, 尝实现 Sepal
比如说, 把 Cirru 编译到 Lua bytecode, LLVM IR 或者类似, 太牛逼了有没有 >_<
比如说, Cirru 代码就是语法树, 那么 Diff 的时候对树进行 Diff, 好像挺有意思
比如说, 语法树可以用来演示解释器, 做成交互动画版的 Demo 会很好玩
比如说, 万一真的做出来个很好用的结构化编辑器了怎么办
自定义编程语言我觉得是很装逼的事情, 相信会有很多同学对设计编程语言感兴趣
Cirru 用了很奇葩的方案, 而不是正规 lex, parse, optimize, generate 流程...
但是作为玩具, 我觉得比起写 BNF 或者 PEG 搞复杂的语法要好多了
而且现在 CirruScript 的实现项目 Sirpus 已经勉强自举, 至少能玩了...
https://github.com/Cirru/scirpus/blob/master/src/operations.cirru
希望有人喜欢玩我造的这个玩具 : )
有好点子可以在微博 @题叶 或者微信 jiyinyiyong 交流下