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
之前想做编译 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 交流下
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.