特徴
OCamlは、型推論機構とパターンマッチング機構、ガベージコレクタ、多相ヴァリアント型を備えた関数型言語です。もともとCamlという言語だったものにクラスや継承などといったオブジェクト指向の機能が追加され、ObjectiveCamlという名前になり、略称だった名称が正式名称になり、OCamlとなったそうです。公式ドキュメントで少しヤンチャな印象を受ける面白い言語です。REPL(Read Evaluate Print Loop)があり、Lisp、Python、Ruby、Haskellなどのように対話的にプログラムを試すことができます。REPLは、以下のようなコマンドで開きます。すると、
#
の記号が現れます。これがOCamlのプロンプトになります。$ ocaml
# "Hello, world!!";;
- : string = "Hello, world!!"
# #quit;;
上記のように、式の最後は;;
で終わらなくてはなりません。REPLを抜ける時は、#quit;;
と打ちます。また上記のコードで注目していただきたいのが、string
です。これは型推論機構が推論した結果です。ただし、このREPLだけの状態だと、扱いにくさを感じることがあると思います。そのためutop
を使ったり、rlwrap
をインストールして、$ rlwrap ocaml
として起動することで、より快適に使うことができるようになります。
OCamlの開発環境づくり
インストール
OCamlのインストールは、公式ドキュメントで推奨されているようにOPAMを使います。OPAMを使うことで、バージョンの切り替えを行うことができます。他の方法も、公式ドキュメントには記載されていますので、ご参考にしてください。
OPAMはまず$ opam init
をしてから使用を開始します。
OPAMをインストールした後、merlin
dune
なども入れると良いと思います。
merlin
はコード補完、dune
はプロジェクト管理を行うものです。
$ opam install merlin dune
エディタ
皆様それぞれお好みのエディタがあるので、使いやすいものをご使用ください。
個人的には、Emacsが良いのではないかと思っています。
merlin
がインストールされていれば、
$ opam user-setup install
とすることで、VimとEmacsの設定ファイルにmerlin
のための設定を追記してくれます。そして各エディタの設定はmerlin
のリポジトリのwikiに詳しく書かれています。
私はEmacsを使いますので、Emacsの方でもcompany
tuareg
をインストールして使います。これらの設定に関しても上記のwikiに書かれています。
tuareg
をインストールするとEmacs上で、片方のウィンドウはファイルを開きコードを書き、もう片方ではOCamlのREPLを開くことができ、コードを確認・実行しながら書いていくことができます。
まずEmacsにてOCamlファイルを開きます。そしてM-x run-ocaml
とすると、OCamlのREPLが立ち上がります。そして、ファイルのコードにカーソルを合わせてC-c C-e
とすると、REPLのほうにそのコードが転写?されて、実行することができます。
Hello, world!!
REPL上ではなく、hello.ml
ファイルを作成してやってみます。(* File hello.ml *)
print_string "Hello, world!\n"
OCamlでは、コメントは(* comment *)
のようにして書きます。また、コメントはネスト可能であり、以下のように書くことも可能です。(* comment
(* comment *)
*)
複数行の場合は、(* comment
* comment
*)
ではhello.ml
をコンパイルしてみます。$ ocamlc -o hello hello.ml
または$ ocamlopt -o hello hello.ml
ocamlc
はバイトコードに、ocamlopt
はネイティブコードにコンパイルします。実行速度はネイティブコードのほうが速いです。$ ./hello
Hello, world!
また、REPLで呼び出したい場合は、以下のようにします。$ ocaml
# #use "hello.ml";;
Hello, world!
- : unit = ()
#
unit
型というのは、()
という値だけを持つ型で、C言語のvoid
に似ていますが、void
は値を持っていませんので少し違います。OCamlでは、特に型を指定する必要がありませんが、OCamlでは、以下のような型が存在します。
- int
- float
- string
- char
- bool
- unit
ただし、int
型は符号あり整数なので、基本型ではないですがnativeint
型という符号なし整数型もあります。またint
型は32bitCPUなら31bit、64bitCPUなら63bitの整数になっています。1bit少ない理由は、ガベージコレクションのために内部で使っているからだそうです。
使用感
個人的にはLispとRustの中間ぐらいに位置する言語という存在で、情報が少ないものの、勉強のしがいのある言語ではないかと感じています。vimやemacsではmerlinを導入すれば、より快適に使うことができます。詳しくはmerlinのリポジトリのwikiに各エディタごとの設定方法がかかれていますので、そちらを参考にされると良いかと思います。
インストールに関してはOPAMを使うと、様々なバージョンを使うことができるので、OPAM経由でインストールすると良いようです。また、プロジェクト管理にはduneを使うと良いようです。
OCamlのマニュアルはPDFファイルを公式ドキュメントからダウンロードできます。すべて英語で結構な量ですが、持っていると便利です。