MetaOCaml で merlin を使う方法について。(TL;DR) やり方は最後にあります。
スクリーンショット
こんな感じで MetaOCaml を使ってもモダンな感じで開発できるようになります。
Merlin: OCaml のための IDE基盤
Merlin (ocamlmerlin) は OCaml にモダンな IDE 機能を追加するインフラで、Emacs, Vim, Visual Studio Code など多くのエディタに対応しています。
エディタ上で型チェックしたり、コード補完、定義へのジャンプなど、ストレスなく OCaml でモダンに開発するための機能がひととおり揃っています。
MetaOCaml
MetaOCaml は多段階計算のための OCaml の拡張で、簡単にいえば OCaml でマクロを安全に(型付きかつ清潔に(hygiene)) 扱えるようになるような感じです。
インストール方法やイントロダクションはこちらの記事で詳しく解説されています:
また、Qiita などで 日本の技術者界隈でも度々取り上げられている(?)ほか、プログラミング言語系の学会でも面白そうなお話が度々出てきています:
- 高レベルLLVMマクロとしてのMetaOCaml (pdf) 高島, キセリョーヴ, 亀山, JSSST 2014
- MetaOCaml を使った自己反映言語のコンパイル 浅井, PPL 2014
- MetaOCamlによるGPGPUプログラミング 廣原, キセリョーヴ, PPL 2017 ポスター
研究のお話としては、ほかにトップレベルカンファレンス POPL 2017 で Strymonas Streams: stream fusion, to completeness という多段階計算を使った高速なインメモリストリーム処理が MetaOCaml や Scala のライブラリとして実装されています。
MetaOCaml が OCaml 本体に取り込まれる流れ (リンク) もあるようで、今後が注目される OCaml 処理系のひとつです。
MetaOCaml + Merlin のインストール
こちらの記事 で紹介されているように OPAM で MetaOCaml の環境に切り替えて、さらに
opam install merlin
で Merlin をインストールできます。しかし、そのままでは .< ... >.
や ~.( ... )
などの MetaOCaml 構文が構文エラーになってしまい、使えません。
Unbound value >.
Syntax error after unclosed struct, expecting expr
Merlin で MetaOCaml 拡張を有効化
幸い、Merlin には MetaOCaml 拡張があます。 現時点で最新の 4.07.1+BER
の場合、 .merlin ファイルに
EXT meta
FLG -open Trx
を書いておけば普通に使えるようになります (他のバージョンだと FLG は要らないかもしれません)。 やった!
また、Dune で使えるようにする方法は ここ で議論されている方法でいけるのではないでしょうか。
それでは、ハッピー MetaOCaml ライフを!
(以上)