Clojure China

Lumo 的基本玩法

#1

感觉这东西怎么用都是一点点问作者问出来的, 连文档都没好好写… https://github.com/anmonteiro/lumo
虽然博客是写了点, 但是太敷衍了 https://anmonteiro.com/2016/11/the-fastest-clojure-repl-in-the-world/
跟 Planck 没得比… 我大致写点:

用法

Lumo 是打包了一个 V8 的 self-hosted ClojureScript 解释器, 当然内部是先编译再解释的. 因为打包了一个 V8, 所以安装挺费事的. 可以通过 npm 安装 lumo-cljs 也可以用 Brew 或者其他操作系统或者发行版的包管理工具装.

安装后, 直接运行 lumo 可以启动 REPL, 其实也对应一个 -r 的参数:

=>> lumo
Lumo 1.2.0
ClojureScript 1.9.482
 Docs: (doc function-name-here)
 Exit: Control+D or :cljs/quit or exit

cljs.user=>

运行脚本可以用 -i 参数:

=>> lumo -i tasks/render.cljs

参数

具体的参数有很多, 可以列一下常用的几个:

  • lumo -c src/ -i a.cljs 当中 -c 表示 classpath, 可以用 Bash 语法指定静态的 classpath
  • lumo -K -c src/ -i a.cljs 其中 -K 表示开启缓存, 默认的位置是 .lumo_cache/, classpath 中的文件的编译结果会被缓存
  • lumo -Kv -c src/ -i a.cljs 当中 -v 是 verbose
  • lumo -n 6000 -r 其中 -n 表示启动一个 REPL Server
  • lumo -h 可以查看具体所有参数

性能

V8 跟 Planck 用的 JavaScriptCore 比起来似乎还要慢一点, 一般在缓存正常使用的情况下还能接受, 不然依赖多点编译花个一分钟也不奇怪. 另外缓存目前没有处理, 需要手动设置过期.

其他

Lumo 用了 V8 所以可以直接跑 Node.js 模块, 直接用 js/require 引用 npm 模块… 不过坏处是的 V8 是内置的, 不能用来 debug. Node.js 有个 node --inspect 的调试功能, 用不了.

最新的 Lumo 1.2 可以用来编译 ClojureScript 到 js 了, 无 JVM. 然而遇到大项目直接 bug, 郁闷死我了.

#2

这是 tutorial, 这是吐槽