6 ocaml してみた


PIC
____________________________________________________________________

6.1 ocaml 動機

ocaml フランス流行ている言語のようですadvi unison などのかゆいところにじのソフトウ ocaml されていてにはなていましたocaml らしい理論してかがされていると いう聞いているのですがいまいちがどうすごいのかよくわからないのでものはしとしてみま した

6.2 ocaml 使うために

Debian GNU/Linux には ocaml 連の多数ていますためしにしてみると 224 ありました

$ apt-cache search ocaml | wc -l
224

ocaml にはインタラクテ使うためのインタプリタバイナリ生成してくれるコンパイラ両方がありますocaml をとりあえず使うためには ocaml インタプリタコンパイラがあればよさそうですocaml ネイテブコ コンパイラocaml-native-compilers のようですocaml インタプリタocaml-interp のよう です

emacs としてはemacs 必要ですemacs でそのものずばりの ocaml-mode というものもある のですがtuareg というのがよさそうなのでそれをインストしてみました

# apt-get install tuareg-mode ocaml-native-compilers ocaml-interp ocaml

6.3 インタラクテ使てみる

インタラクテocaml 使ましたまず足しをしてみます

emacs から M-x tuareg-run-caml ocaml インタラクテ端末 (ocaml ではプレベルという) 動し ました足しをするには1 + 2 文の了は ’;;’ 表現します

# 1 + 2 ;;
- : int = 3

int 3 がかえてきましためでたしめでたし

6.4 してみる

ではしてみます

# let my_func a b = a + b ;;
val my_func : int -> int -> int = <fun>
# my_func 2 3;;
- : int = 5

int int をとint をかえすされそれを 2 3 したら 5 ました

めでたしめでたし

をまたくしていないですがされているあたりが能のようですどうしてできるかとい うことをわれるかもしれませんが+int 足しですfloat +.使うそうですこれを しそうになりました

6.5 コンパイルしてみる

とりあえずインタラクテ使方法はわかたのでコンパイルして使方法てみましocaml 言語 する方法ネイテブコンパイルする方法つがあるようですocamlc 言語ocamlopt ネイテブコン パイラのようですocamlc にはバイナリされておりocamlc ocamlc.opt があります ややこしいですがocamlc.opt ネイテブコンパイラコンパイルした言語コンパイラのよう です

$ time ocamlc fibo.ml -o a.1

real 0m0.038s
user 0m0.032s
sys 0m0.004s
$ time ocamlc.opt fibo.ml -o a.2

real 0m0.014s
user 0m0.012s
sys 0m0.000s

1にまとめてみました



1: ocaml コンパイラ



ネイテブコンパイルされた 言語コンパイルされている



ネイテブコンパイル ocamlopt.opt ocamlopt



言語 ocamlc.opt ocamlc




単な fibonacci いてみて動作速度雰囲じてみましたバイトコバヘじられる になりました

$ time ./byte-code
102334155

real 0m14.544s
user 0m14.541s
sys 0m0.000s

$ time a./native-code
102334155

real 0m2.933s
user 0m2.932s
sys 0m0.000s
$ time ./fibo.c 40
102334155

real 0m2.325s
user 0m2.192s
sys 0m0.040s

6.6 ocaml 連の

Debian にするにはコンパイルするよりもインストしてされるのほうが多いためとして ネイテブコンパイル選択しますただしネイテブコンパイルできない CPU キテクチもあるためどのコンパ イラ利用するのかをするレイヤ必要です

ocaml packaging policy によるとネイテブコンパイラしているのは amd64, i386, kfreebsd-i386, powerpc, sparc だけだそうですキテクチ動きませんたとえばarmsuperhmips などにはしてないよう です

ライブラリいは/usr/lib/ocaml/3.10.2/以下においてあるようですライブラリといてもバイナリ libxxx.so 有ライブラリがおいてあるわけではなく.mli インタフスフイルにおいてありますocamlc -where 発見できるようです

$ ocamlc -where
/usr/lib/ocaml/3.10.2

ひどい年にくらいマイナリリされているのですがそのライブラリコバイナリ されているぽくリビルドするハメになているようです

Debian ocaml メンテナンスチはあらゆるつの subversion リポジトリしてしているようで すがその由のつがこのではないでしうか

6.7

____________________________________________________________________________________________

PIC Debian

2009 4 18   1 発行
エ リ ア Debian 発行
__________________________