IntelliJとWSLでOCaml
前提
- OCamlのことはあんまりよく分かってません
- JetBrainsによる公式サポートではない部分を含みます
登場人物
- IntelliJ IDEA Ultimate
- Community Editionでも大丈夫そう
-
reasonml-idea-plugin
- Reason MLのプラグインがOCamlもサポートしてるようです
- Ubuntu on WSL(とbash)
- OCamlのツール各種
概要
- IntelliJ IDEA Ultimate
- Community Editionでも大丈夫そう
-
reasonml-idea-plugin
- Reason MLのプラグインがOCamlもサポートしてるようです
- Ubuntu on WSL(とbash)
- OCamlのツール各種
概要
Windows側にある
IntelliJとプラグインが
Windows側にある
プロジェクトに対して
WSL側にある
bashとOCamlのツール各種を使って色々やります12
WSLのbashをIntelliJのターミナルとして開く設定
File | Settings | Tools | Terminal
で
Shell Path に C:\Windows\System32\wsl.exe
を設定します。
プロジェクト単位で設定しておけるので大変便利です
中略
WSLのbashからWindowsのファイルは基本的には問題無く使えます。
(どういうエッジケースがあるかなどは把握していませんが、
改行コードおよびgitで悲しい感じになる場合があります)
以下、コマンド実行はすべてWSLのbashで行います。
OPAM
OCamlのパッケージマネージャであるOPAMを
WSLのUbuntuにインストールします
https://opam.ocaml.org/doc/Install.html#Ubuntu
add-apt-repository ppa:avsm/ppa
apt update
apt install opam
OCamlコンパイラ
OPAMでOCamlコンパイラをインストールします
https://ocaml.org/docs/install.html#OPAM
# environment setup
opam init
eval `opam env`
# install given version of the compiler
opam switch create 4.10.0
eval `opam env`
# check you got what you want
which ocaml
ocaml -version
エラー
opam switch create 4.10.0
opam switch create 4.10.0
あたりでエラーに気づきます。
### output ###
# bwrap: Creating new namespace failed, likely because the kernel does not support user namespaces. bwrap must be installed setuid on such systems.
bwrap & sandbox
https://github.com/ocaml/opam/issues/3747#issuecomment-462339452
https://github.com/ocaml/opam-repository/issues/12050#issuecomment-393478072
- サンドボックス機能のために
bwrap
というものが必要で、WSLではそれがサポートされていないようなので、サンドボックスを無効化します。- 一度も初期化してない状態であれば、
opam init --disable-sandboxing
でできそうですが、未確認
- 一度も初期化してない状態であれば、
-
一度以上(?)初期化済みであれば
~/.opam/config
にあるwrap-*-command
な設定を削除します- https://opam.ocaml.org/doc/Manual.html#configfield-wrap-build-commands
- 空でも良いらしいのですが、サンドボックス用の設定らしきものしか無かったので項目ごと削除しました
- 空にする際はたぶん
[]
を残します。wrap-build-commands: []
みたいに。たぶん。
wrap-build-commands: [ [ <term> { <filter> } ... ] { <filter> } ... ] wrap-install-commands: [ [ <term> { <filter> } ... ] { <filter> } ... ] wrap-remove-commands: [ [ <term> { <filter> } ... ] { <filter> } ... ]
その後、opam init
からやり直します。
SDKの設定
- プラグイン公式の通りSDKを設定しますが、WSL側にあるディレクトリを選びます。
-
\\wsl$\Ubuntu\home\ユーザ\.opam\4.10.0
のような感じ
-
- OCamlのソースはWSL側に
git clone
しましたが、どっちでも良さそう?
補完が効いて嬉しい!
ただし、私はOCamlのことをあんまり分かってないので、何ができてどれだけ嬉しいかよく分かってません。
ocamlbuild
でHello World
ついに、Hello Worldです
https://ocaml.org/learn/tutorials/basics.html
To compile an OCaml program named my_prog.ml to a native executable, use ocamlbuild my_prog.native:
ネイティブのバイナリを出力するためにはocamlbuild
というのが必要なようですが、まだ入っていません。
opam search ocamlbuild
で探すとやっぱり存在してたので
opam install ocamlbuild
します。
あとは上記のチュートリアル通りにビルドして実行してください。
Author And Source
この問題について(IntelliJとWSLでOCaml), 我々は、より多くの情報をここで見つけました https://qiita.com/guignol/items/d6967a0847103d866b95著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .