开发工具 继续更新 Cirru 文法的进展

jiyinyiyong · 2014年02月04日 · 最后由 jiyinyiyong 回复于 2014年02月05日 · 3647 次阅读

先给我学长做个广告,他在开发编程语言 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 平台

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 都没设计好呢,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 应该仅仅一套文法,加各种解释器设计和实现.. 毕竟我设计了灵活的语法可不是为了搞个僵化的语言来...

[org]: https://github.com/Cirru/cirru.org/issues

不明觉厉

不明觉厉。看不懂。

#2 楼 @cisolarix 我是在做玩具编程语言,前面有个帖子 http://ruby-china.org/topics/14806 这里讲的是和那个项目相关的各种项目..

需要 登录 后方可回复, 如果你还没有账号请 注册新账号