軽快に動くNimのREPLを作った


Nim Advent Calendar の枠が空いてたのでストックを投下します。

実は既にnrplというのがあるのですが、私の環境(Nim0.19.0)だとnimbleでインストールした時にこける(開発が止まったままバージョンが上がって互換性がなくなったと思われます)のと、一回ずつ愚直にコンパイルしているようであんまり速そうではありません。そこでちょっと工夫して、PythonのREPL並みにサクサク動くものを作りました。

動作原理

実はNimにはNimScriptというバーチャルマシン上で動くサブセットが標準でついてきます。最初これはパッケージマネージャのnimble上で動く簡易的なやつかと思ってたんですが、Nimのコンパイル時計算はどうもこいつがやっているそうで、それならREPL的なやつが作れるんじゃないかと思ったわけです。

DEMO

これで等倍速です。かなりいい感じじゃないですか?

成果物

ここにおいてあります。
https://github.com/gmshiba/replim

あるいは

nimble install replim

でインストール出来ます。

注意

NimScriptの仕様というか限界でimpure(nimのみで書かれていない)なライブラリはimport出来ないようです。例えばnreとかhttpserverとかをimportするとエラー吐かれます。あしからず...