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.