OCamlOCamlを使い始める


備考

このセクションでは、ocamlの概要と、なぜ開発者がそれを使いたいのかを概説します。

ocaml内の大きなテーマについても言及し、関連するトピックにリンクする必要があります。 ocamlのドキュメンテーションは新しいので、これらの関連トピックの初期バージョンを作成する必要があります。

Windowsへのインストール(ネイティブ)

前提

これらの手順は、WindowsにネイティブOCamlバイナリをインストールする手順を示しています。あなたの操作システムがWindows 10 (Insider Preview) build 14316 以降の場合は、WindowsのUbuntuにBash経由でOCamlをインストールすることもできます 。この場合、UbuntuにOCamlをインストールする手順に従ってください。

OCamlとOpamをインストールする

OCaml公式ディストリビューションをダウンロードしてください。 OCamlコンパイラとOpamパケットマネージャの両方を含んでいます。 C:/OCaml ソフトウェアをインストールしたとします。確実にOCamlをインストールしたことを確認するには、 cmd.exe を開き、 ocaml と入力してください。

'ocaml' is not recognized as an internal or external command, operable program or batch file というメッセージが表示'ocaml' is not recognized as an internal or external command, operable program or batch file 場合は、パス(環境変数)にC:/OCaml/bin を追加する必要があります。

OCamlバイナリをパスに追加する

Control Panel > System and Security > System > Advanced system settings (on the left) > Environment Variables System Variable タブでPath を選択し、 Edit 選択します。

C:/OCaml/bin; を追加しC:/OCaml/bin; リストに追加します。

Cygwinをインストールする

Cygwinがなければ、Opamを使うことはできません。実際、 cmd.exeopamopam を開くと、次のメッセージが表示されます。 Fatal error: exception Unix.Unix_error(20, "create_process", "cygcheck")

Cygwinをダウンロードし、インストーラを起動します。次のパッケージを確認してください。

  • オートマイク
  • ディブチル
  • libreadline
  • 作る
  • m4
  • mingw64-x86_64-gcc-core
  • mingw64-x86_64-gmp
  • mingw64-x86_64-openssl
  • mingw64-x86_64-pkg-config
  • mingw64-x86_64-sqlite3
  • パッチ
  • ラップラップ
  • 解凍する
  • wget

このソフトウェアをC:/cygwinC:/cygwin64 for 64bit版)にインストールしたとします。 cmd を開き、 wget (またはC:/cygwin/bin にある実行可能ファイルの1つ)を入力して、Cygwin実行可能ファイルを使用できるかどうかを確認します。実行ファイルが開かない場合は、パス(環境変数)にC:/cygwin/bin を追加します。

Opamの設定

cmd.exe を開き、 opam init と入力してopam init を設定します。

次に、 ocamlfind (OCamlコンパイラの一部)を

opam install ocamlfind
opam config env
 

ocamlfind がインストールされていることを確認し、 cmd.exe 入力します。

コマンドopam config env は、 opam の実行可能ファイルディレクトリを環境パスに追加するために使用されます。ログアウト後もocamlfind 場合は、 C:/Users/<your user>/Documents/.opam/system/bin/ 行にパスを追加して手動で追加できC:/Users/<your user>/Documents/.opam/system/bin/

パッケージのインストール

パッケージは、 opam install xyz からコマンドopam install xyz されます。ここで、 xyz はパッケージの名前です。

UTopをインストールする

opam install utop コマンドを実行してみてください。エラーがなければ、 utop と入力すると実行可能ファイルが開きます。

メッセージが表示されたら

[ERROR] The compilation of zed failed at "ocaml setup.ml -build".
 

単一のパッケージを手動でインストールする必要があります。もう一度入力してください:

opam install zed
opam install lambda-term
opam install utop
 

lambda-termutop がインストールされないことがあります。トラブルシューティングの項を参照してください。

コアのインストール

opam install core core パッケージをインストールできます。 Windows 64bit版(および64bit Cygwin)では、次のエラーが表示されます。

[ERROR] core is not available because your system doesn't comply with os != "win32" & ocaml-version = "4.02.3".
 

トラブルシューティング:通常のファイルを作成できません

次のメッセージで、 xyz.10.1 という名前のパッケージがインストールに失敗した場合(xyzはパッケージの名前、10.1はそのバージョン)

install: cannot create regular file '/cygdrive/c/Users/<your user>/Documents/.opam/system/bin/<something>': File exists
 

このディレクトリに移動する必要があります:

C:\Users\<your user>\Documents\.opam\repo\default\packages\<xyz>\<xyz.10.1>\files 
 

xyz.10.1.install ファイルを削除してxyz.10.1.install

トラブルシューティング:共有ライブラリを読み込めません

いくつかのutop のパッケージ(例えば: utop )を開こうとするとこのエラーが表示されます:

Fatal error: cannot load shared library dlllwt-unix_stubs
Reason: The specified module could not be found.
 

opam config env 再度実行し、実行可能ファイルを再度opam config env みてください。

インストールまたはセットアップ

OPAMのインストール

OPAMはOCamlのパッケージマネージャです。コンパイラのバージョンとOCamlライブラリを簡単に構築し、管理します。

オペレーティングシステムにOPAMをインストールする最も簡単な方法は、システムにパッケージマネージャを使用することです。 apt-get、yum、homebrewなどがあります。

Mac OSXのインストール手順

自作式を更新し、OPAMをインストールします。

brew update
brew install opam
 

Ubuntuのインストール手順

add-apt-repository ppa:avsm/ppa
apt-get update
apt-get install ocaml opam
 

ソースからコンパイルする

wget http://caml.inria.fr/pub/distrib/ocaml-4.03/ocaml-4.03.0.tar.gz
tar xf ocaml-4.03.0.tar.gz
cd ocaml-4.03.0
./configure -prefix installation_path
make world.opt
make install
 

OPAMの初期化

OPAMをインストールしたら、 opam init を実行し、指示に従います。

作業が終わったら、シェルからOCamlインタプリタを実行できるはずです。

$ ocaml
        OCaml version 4.03.0

#
 

OCamlでの最初のプログラム

あなたのお気に入りのオペレーティングシステムでOCamlディストリビューションが利用できるようになったので、OCamlで最初のプログラム、Hello World!を作成できます。

私たちはOCamlプログラムを立ち上げるさまざまな方法を持っています。

REPL(トップレベル)

トップレベルインタラクティブにコードを実行することができます。 OCaml トップレベルでは 、OCamlコードをUNIXシェルとして記述して実行することができます。その後、 トップレベルはあなたのコードのタイプを直ちにチェックします。したがって、コンパイルと実行を行わずにコードの一部を迅速かつ簡単にテストすることができます。

ocaml コマンドでトップレベルを起動できます。その後、 ;; 終わったOCaml 文を書くことができます。すぐに評価されます。 トップレベルは式の型と値を直後に表示します:

# "Hello Worlds!";;
- : string = "Hello Worlds!"
 

あなたのファイルにトップレベルを起動することも可能です。あなたはそれについてのこの説明を見ることができます。

トップレベルでの入力を容易にするために、いくつかの機能(入力履歴など)を提供するleditrlwrap ようなツールを使うことができます:

 $ ledit ocaml

 $ rlwrap ocaml
 

バイトコードへのコンパイル

私たちは2つの異なるコンパイラを持っています。一つはバイトコードにコンパイルされ、もう一つはネイティブコードにコンパイルされます。最初のものは、Javaの仮想マシンのバイトコードと同じです。したがって、 バイトコードの効率は低くなりますが、移植性が向上します。

OCamlコンパイラで使用されるいくつかの拡張ファイルがあります:

拡張定義
.ml ソースコード(C言語の.c
.mli インタフェース(Cの.h として)
.cmo ocamlc によってバイトコードでコンパイルされたソースコード
.cmi ocamlc によってコンパイルされたインタフェースコード
.cmx.o ocamlopt がネイティブコードでコンパイルしたソースコード
.cma ライブラリ(いくつかのバケツ*.cmoバイトコード
.cmxa.a ネイティブコードのライブラリ
.cmxs ネイティブコードのライブラリ(ダイナミクスをロードする)

バイトコードコンパイラはocamlc です。

異なる共通のオプションがあります。

  • -c :リンケージプロセスなしでソースファイルをコンパイルする(実行可能ファイルを生成する)。したがって、コマンドocaml -c foo.ml.cmo ファイルを生成します。ヘッダファイルをコンパイルする必要がないCとは異なり、OCamlでは.mli ファイルをコンパイルする必要が.mli ます: ocaml -c foo.mli

最初にインタフェースをコンパイルする必要があります。後でソースファイルをコンパイルすると、OCamlはインプリメンテーションがインターフェイスと一致するかどうかをチェックしようとします。

.mli ファイルは必須ではありません。 .ml ファイルなしで.mli ファイルをコンパイルすると、OCamlは.cmi ファイルを自動的に生成します。

  • -o :いくつかの.cmo ファイルを実行可能ファイルにコンパイルします。次に例を示しますocamlc -o program foo.cmo bar.cmo 。これらのファイルは、最初のファイルが依存しない依存関係によって整理する必要があります。

  • -I :コンパイラがコンパイルに必要なファイル(インターフェイスまたはソースコードなど)を見つけることができる他のディレクトリを指定します。これは、Cコンパイラの-I と同じです。

他にも多くの選択肢があります。詳細は、 マニュアルを参照してください。

したがって、 hello.ml 今作成し、このファイルをocamlc -o hello hello.ml して、 バイトコード・プログラムを生成することができます。

let () = print_endline "Hello World!"
 

let () = ... は、プログラムの最初のエントリです(Cのmain と同じです)。その後、関数print_endline (標準ライブラリから提供される)を引数"Hello World!" 標準出力に改行文字を含むHello Worlds を出力する。

コンパイル後、 .cmo ファイルと.cmi ファイルがコンパイラとプログラムのhello によって自動的に生成されます。あなたはあなたのプログラムを開くことができ、このファイルの一番上には以下が表示されます:

#!/usr/local/bin/ocamlrun
 

つまり、あなたのプログラムはバイトコード (JVMのような)を実行するためにocamlrun プログラム(ディストリビューションによって提供される)を必要とします。

ネイティブコードへのコンパイル

ネイティブコードを生成する別のコンパイラがあります。コンパイラはocamlopt です。ただし、結果として得られる実行可能ファイルは他のほとんどのアーキテクチャでは動作しません。

ocamlopt 同じオプションを使用してocamlc あなたが実行できるようocamlopt -o hello hello.ml 。その後、 .cmx.o ファイルを見ることができます。

最後に、あなたのバイトコード /ネイティブコードプログラムから、以下を実行できます:

$ ./hello
Hello World!
$