近くの図書館に、Erlang についれ書かれた本がある。 これをもとに、少しずつ Erlang のことを書く。 Erlang は「アーラン」と読む。
これも図書館で借りてきた。 著者は内容を選んだという感じがあり、 関数型言語の基礎からゆっくり進んでいる。 並列プログラミングは最後に入口程度の紹介なので、 Erlang 固有の魅力を知りたい人には物足りないだろう。
並列計算には憧れがあり、 私もマルチスレッドに挑んでは挫折しているので、 この本を手がかりに、今度こそ並列処理を理解したいと思っている。 (2008-04-25)
私は Vine Linux 4.1 を使っているが、 このバージョンでは入っていない。また、apt にもない。 http://cean.process-one.net/download/ からダウンロードする。 CEAN Packaged Applications から、 Application はデフォルトを、running on は Linux Intel x86 を選ぶ。 cean-otp_R11B_linux-x86.tar.gz がダウンロードされる。 これを tar zxvf cean-otp_R11B_linux-x86.tar.gz で解凍し、 配下に作られる bin ディレクトリに PATH を切って erl は OK。
erlc は、オリジナルのシンボリックリンクの位置がおかしい。
erlc -> ../erlang/erts-5.5.5/linux-x86/erlc
となっているが、これを次のように直す。
erlc -> ../erlang/erts-5.5.5/linux-x86/bin/erlc
注意:CEAN Base System を選ぶと、うまくいかない。以下失敗談。 running on のところでは、Linux Intel x86 を選ぶ。 ダウンロードすると、cean_installer.bin というファイルが得られる。 これに対して、sh cean_installer.bin とすると、 カレントディレクトリに対して cean というディレクトリが作られる。 cean ディレクトリに降りて、start.sh を実行すると、 インタープリターが起動される。
しかし、このerlでは、ファイルを読んでくれない。 myfunc.erlというファイルをカレントディレクトリに作って読み込ませても、 エラーが出るだけ。
-module(myfunc). =ERROR REPORT==== 13-Apr-2008::16:17:47 === Error in process <0.31.0> with exit value: {undef,[{compile,file,[myfunc,[report_errors,report_warnings]]},{c,c,2},{erl_eval,do_apply,5},{shell,exprs,6},{shell,eval_loop,3}]} ** exited: {undef,[{compile,file,[myfunc,[report_errors,report_warnings]]}, {c,c,2}, {erl_eval,do_apply,5}, {shell,exprs,6}, {shell,eval_loop,3}]} **
start.sh から始めるのではなく、 erl から始めるということが後でわかったのだが、 そのせいなのかは不明。
ソースからのコンパイルも試みたが、 opensslのライブラリがないので、./configure から失敗してしまった。
p.18には、シェル起動時の作業ディレクトリの設定が記載されているが、
これは Windows の場合である。
Linux ではどうするか。ホームディレクトリにドットファイル
.erlang というファイルを作り、
これに次の行を追加する。
c:cd("/work_directory").
Windows の場合は Erlang の実行ファイルのあるディレクトリ、
とあるので、注意する。
p.142 および p.143 のリスト 6-1 の実行例で、 foo が頻出するが、誤り。foo を sample61 に置き換えれば動作する。
Erlang は全体的に、Prolog に似ている。 当初、Prolog に並列処理機能をつけた処理系として開発されたということから、 類似性は当然ある。
内容 | Erlang | Prolog |
---|---|---|
シェルからの脱出 | halt(). | halt. |
ソースからのインストールを試みたが、前と同じ問題が起きて異常終了した。
$ ./configure (中略) ********************************************************************* ********************** APPLICATIONS DISABLED ********************** ********************************************************************* crypto : No usable OpenSSL found odbc : ODBC library - link check failed ssh : No usable OpenSSL found ssl : No usable OpenSSL found ********************************************************************* ********************************************************************* ********************** APPLICATIONS INFORMATION ******************* ********************************************************************* wx : wxWidgets not found, wx will NOT be usable ********************************************************************* ********************************************************************* ********************** DOCUMENTATION INFORMATION ****************** ********************************************************************* documentation : fop is missing. The documentation can not be built. *********************************************************************
なんと同じように失敗してしまった。openssl そのものは入っているので、 ライブラリが必要だ、ということらしい。
# apt-cache search openssl (中略) # apt-get install openssl-devel (中略) # exit $ ./configure ********************************************************************* ********************** APPLICATIONS DISABLED ********************** ********************************************************************* odbc : ODBC library - link check failed ********************************************************************* ********************************************************************* ********************** APPLICATIONS INFORMATION ******************* ********************************************************************* wx : wxWidgets not found, wx will NOT be usable ********************************************************************* ********************************************************************* ********************** DOCUMENTATION INFORMATION ****************** ********************************************************************* documentation : fop is missing. The documentation can not be built.
そこで「ない」といわれたモジュールをインストールすることにした。
# apt-get install unixODBC-devel
OpenSSL 関係は OK とする。
次に、wx-gtk2 だ。これは既に入っているのに先のエラーが出る。 なぜこのようなエラーが出たかはわからない。 もし問題があればそのときに修正しよう。
最後に fop is missing をどう扱うべきか悩んだ。fop はドキュメントを PDF 化するのに必要なだけで、 特に本体には影響はないらしい。それならば無視していいだろう。
$ make
コンパイルではいろいろな警告がでてくるが、これらにつきあっている暇はない。
$ sudo make install
これで、/usr/local/bin に erl が入った。 以下は、Erlang の起動と終了である。
$ erl Erlang R13B04 (erts-5.7.5) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false] Eshell V5.7.5 (abort with ^G) 1> X = 23. 23 2> % #ここで Ctrl-G をキーボードから入力する User switch command --> q $
ソースからのインストールは問題なくできた。
$ erl Erlang/OTP 19 [erts-8.2] [source] [64-bit] [smp:2:2] [async-threads:10] [hipe] [kernel-poll:false] Eshell V8.2 (abort with ^G) 1> X = 23. 23 2> % # ここで Ctrl-G をキーボードから入力する User switch command --> q $
2016-12-29
Erlang は並行処理が得意である。Linux 版では複数 CPU の恩恵が受けられるのだが、Windows ではそうではないようだ。 それでも、動かしてみよう。
ダウンロードのページ(www.erlang.org) から、Windows Binary File をダウンロードする。 90 MB ある。
次にインストールを開始する。注意すべきは、途中で、Microsoft の C++ Runtime Library をインストールするか聞かれること。こちらも OK でよい。
インストールは問題なく完了する。あとは、スタート→すべてのプログラム→Erlang OTP RxxByy (xx や yy はバージョン番号が入る)。
Windows の 64 bit 版で動かしてみた。上と同じように動作する。
http://www.kmonos.net/alang/etc/erlang.php の例題にならって確かめてみた。
5> math:sin(1.57). 0.9999996829318346
例題では 1.000000 が表示されることになっている。おそらく、有効数字の既定値が違うのだろう。
1> X = 20. 20 2> X = 10. ** exception error: no match of right hand side value 10
エラーメッセージが異なる。
まりんきょ学問所 > 関数型言語手習い > 関数型言語 Erlang