Erlang の文法と van Wijngaarden form [Erlang]
形式言語を記述するための記法としては Backus-Naur Form とそれを適当に改変した方言が圧倒的に使われていると思いますが、その他に van Wijngaarden form というのがあるそうです。例を挙げると以下の上が BNF で 、下が同じ文法を van Wijngaarden form で書いたもの。
<additive> ::= <multitive> + <additive> | <multitive> <multitive> ::= <primary> * <multitive> | <primary> <primary> ::= ( <additive> ) | <decimal>
additive: multitive, + symbol, additive; multitive. multitive: primary, * symbol, multitive; primary. primary: ( symbol, additive, ) symbol; decimal.
すなわち、
1. 連続するものはカンマでつないで表現する
2. 選択肢はセミコロンで区切って表現する
3. 最後はピリオド
このカンマ、セミコロン、ピリオドの使い方は何かを思い起こさせるなーと思ったら Erlang だった。それで Erlang の文法が van Wijngaarden form に由来するのだという証言がないかどうかちょっと検索してみたけど見つからず。
しかし「いつも使い分けが分からなくなる」「ピリオドのせいで行のコピー&ペーストなどの編集が面倒」など Erlang の文法で特に評判の悪い部分が実は由緒ある(?)文法記法と同じだと思えばきっとそんなに嫌いではなくなるのではないでしょうか。そうでもないか。
Erlang R11B-5 [Erlang]
先週リリースされた Erlang R11B-5 [1] ですが、環境に依存しないようなオブジェクトはあらかじめコンパイルしてソース配布にも同梱してくれるようになったようで(その分配布物のサイズはだいぶ大きくなっている)、玄箱でもコンパイルに一晩かからなくなりました(1.5時間くらい?)。ソースコンパイルせざるをえないマイナー環境でかつ非力なマシンの人(玄箱とか)には朗報です。
あと手を加えずにコンパイルしても前回 [2] 玄箱で出ていた「PR_SET_FPEXC: Invalid argument」はでなくなっています。
[1] http://www.erlang.org/download.html
[2] http://blog.so-net.ne.jp/rainyday/2007-05-05
Thinking in Erlang 日本語訳 [Erlang]
Erlang の入門ドキュメントで Thinking in Erlang [1] というのが Creative Commons ライセンスで公開されていたのでそれを日本語に訳して [2] Scribd においてみました。なおオリジナルは Word なので印刷したい場合は Word から印刷するのが一番きれいだと思います。
基本的に Java などの経験があって関数型はよく知らないという人向けですが、関数型言語既習者でも Erlang 特有の考え方で新鮮な部分がいくつかあると思います。特にエラー処理の考え方 (Let it Fail) の部分は面白くて、例えば gen_tcp:listen という関数が成否とソケットをまとめてタプルで返すとしたら
{ok, ListenSocket} = gen_tcp:listen(8080, [binary])
としてしまう(ok は定数で ListenSocket は変数)。これで成否が ok でなかった場合はマッチングエラーになるけれどもそれでよくて、特に追加でエラー処理のコードを書こうとするなと。OCaml とかでも let による束縛は実際にはパターンマッチなので左辺に定数を書くことは不可能ではないけれどもあまりやらないような気がします(少なくともコンパイラは警告をだす)。
他にも代入の一切ないコードでプロセスを使ってオブジェクト指向をやるところとかは成程と思えると思います。
入門ドキュメントとして不満な部分も若干ありますが(例えば後半に行くにつれて「やり方だけ示して実際のコードは提示しない」という割合が増えていくとか。しかし文書のメジャーバージョンがまだ 0 なので今後追記していくつもりだったのかもしれない)、とりあえず Erlang の大まかな考え方をつかむにはよいものではないかと思います。
翻訳として至らない点(特に定訳のある用語を使っていないとか)は指摘ください。
[1] http://chuffyrodents.org/erlang.pdf
[2] http://www.scribd.com/doc/45477/Thinking-in-Erlang-Japanese-version
玄箱に Erlang を入れる [Erlang]
今ネット上の一部でハイプ気味の Erlang を Debian の入った玄箱に入れようとしたのだけど apt-get で入れてから erl を起動すると
PR_SET_FPEXC: Invalid argument
とか出て異常終了してしまう。何か prctl というシステムコールで PowerPC 専用の何らかの設定をしているっぽいのだが、それが玄箱に対応していないのだろうか。しょうがないので apt-get source でソースを取ってきて該当箇所をコメントアウト(!)してコンパイルしたら一晩かかった。固まっていたのは
Creating initial PLT (will take several minutes; please be patient)
というところでぜんぜん数分じゃなかった。何をしているんだろう。リコンパイルしたものは今のところ問題なく動いている模様。