OCaml チュートリアル
OCamlを使い始める
サーチ…
備考
このセクションでは、ocamlの概要と、なぜ開発者がそれを使いたいのかを概説します。
ocaml内の大きなテーマについても言及し、関連するトピックにリンクする必要があります。 ocamlのドキュメンテーションは新しいので、これらの関連トピックの初期バージョンを作成する必要があります。
インストールまたはセットアップ
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!"
あなたのファイルにトップレベルを起動することも可能です。あなたはそれについてのこの説明を見ることができます。
トップレベルでの入力を容易にするために、いくつかの機能(入力履歴など)を提供するleditやrlwrapようなツールを使うことができます:
$ 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!
$
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.exeでopam型opamを開くと、次のメッセージが表示されます。 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:/cygwin ( C:/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-termとutopがインストールされないことがあります。トラブルシューティングの項を参照してください。
コアのインストール
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みてください。