本当は怖いHPC

HPC屋の趣味&実益ブログ

project.cljに:mainを書くとrefreshがコケる問題の解決法

clojure.tools.namespace.replという便利なライブラリがある。どのように便利かについては、他の方のブログ記事やスライドを参照。

REPLライフをもっと快適に

[Clojure] tools.namespaceを利用したREPL上でのソースコードリロード - /home/matstani/weblog

clojure.tools.namespace.replを使うとき、project.cljに:main指定があるとrefresh関数がコケるという問題があった。

これは、c.t.n.rの問題ではなく、Clojure本体の問題で、AOT(Ahead of time)コンパイルされたコードをリロードできないと言うことだそうだ。そして、:mainで名前空間が指定されると、その名前空間(ファイル)は自動的にAOTコンパイルの対象となる。なお、AOTは、HerokuとうのPaaSでコードを走らせる際も問題となることがあるようだ。

この問題を解決するためには名前空間のAOT化を抑止すれば良い。

How to use ^:skip-aot to avoid problems when using ...

このように、名前空間の指定の前に :^skip-aot というmetadataを付加すればよいようだ(実験するときはlein cleanを忘れずに)。

これでSublimeREPLからショートカットキーひとつでリロード・ユニットテストが走るぞーわーい

【広告】