先给我学长做个广告,他在开发编程语言 Tea https://github.com/xuld/Tea/wiki 号称接近 C++ 的执行效率,超过 Java 的开发效率.. 我还想直接说 C# 不得了.. 可他的功底扎实,我怎么也说不过他... 后面我就在他的影响下对 Cirru 继续做一些更新... 距离上次发贴 3 个月
Cirru 的主页粗略做了下 http://cirru.org 目前没有完全确定方向,所以只是罗列了子项目...
相关项目转移到了单独的团队账户 https://github.com/Cirru 专门搞了一个 Twitter 帐号发布更新 https://twitter.com/cirrulang
Cirru 名字来源于 "Cirrus Clouds", 因为半图形化编辑器想有种未来感像是卷云
读音硬生生从 Cirrus 掐断了,叫做 /ˈsɪɹə/
... 刚好和下边的单词读音一样 - -!
https://www.google.com/#q=sirrah
专门搞了一个 Logo, 形状不大好,以后有机会再改进下..
就想弄一个云的图腾,勉强凑成 Cr
两个字母,,
为了半透明阴影还给 Snap.svg 提 Issue, 维护者好心给我加了
Go 语言尝试了下,学得不怎么样,还好 CoffeeScript 的功能他都有.. 先是手动把 Cirru Parser 代码转到了 Go, 然后做了一个粗糙的解释器 代码在这里:https://github.com/Cirru/cirru-interpreter.go 我本地开发时能用命令编译出一个可执行文件,然后通过传入文件名来启动
# go get ...
➤➤ go build bin/cli.go
➤➤ mv cli go-cirru # 默认编译到文件名
➤➤ ./go-cirru cirru/map.cirru
在 [cirru/
][cirru-dir] 下可以看到我当初设计的一些代码...
只是做了基本的数据结构和格式化,函数的实现比较囧,其他复杂功能没做
[cirru-dir]: https://github.com/Cirru/cirru-interpreter.go/tree/master/cirru
不过 .cr
在 GitHub 上被 Crystal 占用了.. 我原先的代码被识别错了
我决定抢一下先机,就 fork 了 Pygments, 在里边添加了 Cirru 的高亮
又搞了下 Ace Editor 的高亮支持,后来也顺利合并到仓库..
最后提交了 PR 给 GitHub 的语言识别仓库,让 GitHub 识别我的代码
只不过 Ace 和 Pygments 都没发布新版本,目前 GitHub 上不高亮
另外还有些语法高亮,Rainbow, Brackets, 以及一个手写的高亮工具 LightTable 水太深,没搞定,, 另外几个大型的 IDE 没想过, 再就是我没用过的编辑器也没做过... 那个真心有点难 虽然知道不会有什么人来用,但是先做一些事情来铺路好了 写高亮顺便也做了一些学习笔记在 SegmentFault 那
春节假期主要是把 Cirru Editor, 借鉴了 Backbone 一些思想,重构了一下 Chrome 的同学可以戳这里体验下 http://repo.tiye.me/cirru-editor/
其实 Cirru Editor 上的样子才是 Cirru 文法的真实形态,就是嵌套的树形结构 为了一致,我增加了一个逗号语法来追加表达式,
以后 (a (b c) d e (f))
可以写成下面这样,通过 ,
来消除括号:
a
b c
, d e
f
然后又做了一个 [Cirru Writer][writer] 用来把 JSON 格式反向转化到 Cirru 文法...
[writer]: https://github.com/Cirru/cirru-writer.coffee
我学长老是问我说,这语言怎么样,别人能用了没,, 搞得我好紧张 我现在能想到 Cirru 的用途,仅仅是作为配置语言,语法很灵活嘛 但为了人们能用,我得提供各平台的 parser 和 writer 才行 后面要做的事情,比如用 Ruby 写写啦.. 加个 Lua 的模块啦,难度不高 貌似会浪费很多时间,这个想法已经被他吐槽惨了
考虑接下来要专心工作,打算多做 HTML 相关的部分,主要是文档 总是觉得 Sphinx 和 Golumn 不顺眼,一直没能力写,打算搞一个 这方面主要是 MVC 图形界面,毕竟大半年工作在上边,多少有点进展了 这样 Cirru 的文档到时候可以做一个炫一些的...
然后被我学长吐槽了,问这有人用么... 花了那么多时间,Cirru 能跑了么? 我.. Cirru 都没设计好呢,Cirru 的文法具备同像性,要做代码即数据, 函数在实现中分成两部分,一是原生代码,一是上下文,做个简化的调用:
set f $ block (a b c)
print a b c
call f (int 1) (int 2) (int 3)
f (int 1) (int 2) (int 3)
不过这也不够啊.. 代码需要的是抽象的能力,而单单这样远远不够 我设计了这样的语言,实现什么样的功能?需要哪些基本的抽象的手段? 那么调试方案呢?包管理和可维护性呢?基本的错误提示要有吧? 另外编译到 JS 或者 LLVM 代码呢?性能可是比语法高亮更重要的是啊...
表示后面要工作要专心对付 JS 平台了,会暂停 Cirru 文法相关的项目 有时间会做做文档工具,接着把 Cirru 的文档整理一遍,录录视频什么的.. 我恐怕要好多年才能知道我究竟应该在设计怎样的功能来用呢? Cirru 的文法是够灵活够我折腾了,结果后边更难...
目前文法定下来了,具体的解析结果可以看这个目录下对应的 JSON 结果 https://github.com/Cirru/cirru-parser.coffee/tree/master/cirru 因为一直都是当学习和装逼做的,没有专心往细节做 具体到语言执行特别是编译的细节我也不懂,目前直接打算搁置
有没有同学要接下来玩下吗,比如写 parser/writer 或者讨论语言特性之类的? 暂定 [cirru.org 的 Issue][org] 作为讨论的地方,欢迎来讨论. 虽然我觉得 Cirru 应该仅仅一套文法,加各种解释器设计和实现.. 毕竟我设计了灵活的语法可不是为了搞个僵化的语言来...