CirruScript, 又一门编译到 JavaScript 的脚本语言
发布于 10 年前 作者 jiyinyiyong 4986 次浏览 最后一次编辑是 8 年前 来自 分享

CirruScript 是 Cirru(http://cirru.org/) 项目的一部分:

CirruScript 主要的目标是在一些写 CoffeeScript 处理起来不清晰的地方做替代, CoffeeScript 缩进语法过于紧凑, 在函数参数混合多种类型时非常容易混淆. 在 CirruScript 当中所有的语法对应到一棵语法树, 有更强的一致性

整体采用的前缀的语法(写 Lisp 的同学很熟悉), 但是大量使用了缩进(写过 Lisp 的同学大概不喜欢) 编译部分实现了基本的 JavaScript 语法, 从 CoffeeScript 借鉴, 只是一个子集 目前生成代码的质量不如 CoffeeScript, 不过可读性还好, 见下边的例子

项目仓库: https://github.com/Cirru/cirru-script 在线预览(可以粘贴代码例子试试): http://repo.cirru.org/script/ 视频介绍: http://www.tudou.com/programs/view/PZy6gTuLdWc 编译代码请使用 Gulp 插件: https://github.com/Cirru/gulp-cirru-script 具体使用可以看这个例子: https://github.com/Cirru/pudica-schedule/ 编译完成的 JavaScript(带 SourceMap): http://repo.cirru.org/pudica-schedule/

代码的例子:

define $ lambda (require exports module)

  = React $ require :react
  = model $ require :./model
  = App $ require :./view/app

  React.render (App (object)) document.body

  try $ do
    = raw $ localStorage.getItem :pudica
    = data $ or (JSON.parse raw) (array)
    model.reset data

  = window.onbeforeunload $ lambda ()
    = raw $ JSON.stringify (model.get)
    localStorage.setItem :pudica raw

  document.body.addEventListener :keydown $ lambda (event)
    if
      and (is event.keyCode 13) (is event.currentTarget this)
      do $ model.add

之前发过一个截图的帖子, 有同学说不喜欢缩进, 我认为语法是很难调和的事情, 包括在我们团队也有遇到这类问题, 但是欢迎大家自己在工作之外编写自己的 altjs language.

4 回复

感觉比coffee更复杂,我才接触coffee时还能知道它再描述什么, 这个不知道怎么读的xxxScript完全不知道在表达什么。我第一眼看到它居然联想到了lua 。。。

@struCoder 楼上对 Lua 应该不熟悉吧, 我借鉴的语法里有 Scheme, 有 Haskell, 有 Bash, 更多的是 CoffeeScript, 但是 Lua 影响还是非常小的.

这个语言看不懂主要是因为前缀表达式在主流开发语言当中很少见, 我这样说你觉得是么?

@jiyinyiyong 嗯,是的,以前在搞nginx的时候写过一些lua,现在基本差不多忘了。。 :)

实际上,主流的语言里的函数调用,都是前缀式的语法,只要把基本运算符想象成函数调用,就没什么特别的了

回到顶部