美文网首页
clojure惯用法静态分析器

clojure惯用法静态分析器

作者: 随便写点 | 来源:发表于2013-11-20 20:51 被阅读237次

    今天说点clojure的东西。大家可能都听说过kickstarter上的一个IDE项目叫LightTable的吧,这款最开始主打clojure编程的IDE筹到了一大笔钱,现在已经放出来好几个试用版了。最新的一个版本支持一个叫做custom expression的功能,允许用户选中任意块代码,将代码替换为这段代码的执行结果。

    clojure里现在有一个lib叫做kitbit,它是一个clojure的静态代码解析和替换工具,具体就是可以分析你的一部分clojure代码块,然后看这段代码有没有对应的惯用实现,如果有的话可以选择将自己的代码替换为惯用实现。这有点像intellij里面的功能,可以把有些用法例如? :三元运算符替换为if else。比如:

    At src/overtone/examples/compositions/jazz.clj:114:
    Consider using:
      (inc beat)
    instead of:
      (+ beat 1)
    

    kitbit有emacs的插件,也就是说在emacs里面配置好了以后也可以实现一键代码分析和重构了。至于这些惯用法,我们是可以自定义的,看了一下它的默认设置,默认的内容挺简单的:

    (defrules rules
      [(if ?x ?y nil) (when ?x ?y)]
      [(if ?x nil ?y) (when-not ?x ?y)]
      [(if ?x (do . ?y)) (when ?x . ?y)]
      [(if (not ?x) ?y ?z) (if-not ?x ?y ?z)]
      [(when (not ?x) . ?y) (when-not ?x . ?y)]
      [(do ?x) ?x]
      [(if-let ?binding ?expr nil) (when-let ?binding ?expr)]
      [(when ?x (do . ?y)) (when ?x . ?y)]
      [(when-not ?x (do . ?y)) (when-not ?x . ?y)]
    
      ;; suggest `while` for bindingless loop-recur
      [(loop [] (when ?test . ?exprs (recur)))
       (while ?test . ?exprs)]
      [(let ?binding (do . ?exprs)) (let ?binding . ?exprs)]
    

    最后看看这个能贴在纸上的电路,有各种传感器,还可以编程。

    相关文章

      网友评论

          本文标题:clojure惯用法静态分析器

          本文链接:https://www.haomeiwen.com/subject/ijbqtttx.html