前の日 / 次の日 / 2007-05
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

2007-05-09 Wed

これから15分でErlangを始めるための資料

[erlang]

Erlangをいうプログラミング言語を使って何かをすることが、
最近の流行みたいです。去年はHaskellが流行しましたね。

研究室内で僕を含めてErlangに興味津々という人が、
何人かいたので、今やろう!すぐやろう!と始めてみました。

以下はDebian Etch LinuxでErlangを使ったHello Worldに
たどり着くまでの方法と、自習用の資料へのリンクです。
15分でHello Worldを表示してみましょう。
# 僕は表示までに30分以上かかりましたが・・・。

ErlangでHello World


Erlangの読み方

- アーラン
- Erlangとは
Erlangをインストール

Debian Etchではapt-getするだけです。時間は5分くらいかかります。
apt-get install erlang

Windowsの人は、Erlang.orgでバイナリファイルを配布しているので、
それをインストールして環境変数でパスを通してあげればよいのでは。
Erlangをインストールできたかを確認する

Erlangをインストールできたかを確認するには、erlコマンドを実行。
% erl

このとき「Erlang (BEAM) emulator」を起動できれば成功。
Erlangを抜ける方法はCtrl-cして、aを入力すれば良い。a=abort。
Erlangはどうやってコードを動かすのか

Erlangは対話型のインタプリタを使ってコードを実行します。
Prologを使うときに良く似ていると思いました。
#対話型はProlog系しか使ったことないのでw

Erlangではコマンドで対話するときも、ファイルにコードを書いて実行するときも、
入門の段階では必ずインタプリタと対話しながらコードを実行します。
ちなみに対話とは、ユーザがErlangに命令を出して、
Erlangは命令を解釈して結果を出力する、という動作の繰り返しのこと。
とりあえずErlangと対話してみる

まずは以下の作業例をマネして挙動を見てください。
% erl

Erlang (BEAM) emulator version 5.5.2 [source] [async-threads:0]
[kernel-poll:false]

Eshell V5.5.2  (abort with ^G)
1> X=10.
10
2> X=10.
10
3> X=9.

=ERROR REPORT==== 9-May-2007::20:08:35 ===
Error in process <0.30.0> with exit value:
{{badmatch,9},[{erl_eval,expr,3}]}

** exited: {{badmatch,9},[{erl_eval,expr,3}]} **
4> X!=9.
** 1: syntax error before: '=' **
4> X>9.
true
5> X==9.
false


細かいことは、あとでマニュアルを読むとして、
Erlangでは、

- 変数の先頭は大文字かアンダースコア
- 変数宣言、型宣言が不要。
- 変数への代入は1回だけしかできない。
- 「変数=値.」で変数宣言と代入を同時にできる。
- 式.で、式を実行できる。
- 論理演算の結果はtrueかfalseで返す

なのだという前提で上記のコードを読むと意味が分かるかもしれません。
Erlangを記述するファイルの拡張子

今度はファイルにコードを書いて実行してみます。
Erlangを記述するファイルは.erlが主流。
Erlangにおすすめのエディタは?

Erlangにおすすめのエディタは、aptでmodeがインストールされる
Emacsがおすすめです。.erlファイルをEmacsで開くとErlang modeで
Emacsが動作してプログラム中に補助してくれます。
ものすごく強力だと思うのでおすすめです。
とりあえずエディタでsample.erlを開く。

sample.erlというファイルをエディタで開いて、
以下のコードを書きます。
Erlangではファイル名の先頭は小文字で書きます。
Erlangでファイルをコンパイルすると、
ファイル名と同じモジュールができあがります。
なので、ファイル名とモジュール名は同じ名前にする必要があります。
-module(sample).
-export([hello_world/0]).

hello_world() -> io:fwrite("Hello, World!\n").

とりあえず、書けば良いです。
ものすごく簡単にすると、上の4行は以下のような意味をもちます。
1行目:sampleというモジュールだよ
2行目:sampleは、関数を1つ持っていて、名前はhello_worldで0個の引数を取るよ。
4行目:sample:hello_world()で呼び出されたら、io:fwriteするよ。

sample.erlをコンパイル

sample.erlを書けたらセーブして、erlを立ち上げてコンパイルします。
c(モジュール名)でコンパイルをかけると、モジュール名.erlがコンパイルされます。
関数は「モジュール名:関数名(引数|)」で呼び出します。
	
%erl

Eshell V5.5.2 
1> c(sample).
{ok,sample}
2> sample:hello_world().
Hello, World!
ok
3>


お、Hello,World!が出ました。

ということで、ゆるくErlangのHello, Worldまでを書きました。
一応はじめたら、あとはひたすら基礎からコツコツですねー。やるぞー。

Erlangを学習するときの資料


並列プログラマに 10 の質問 - Joe Armstrong さんの場合
-Erlangの父

twitterブームの陰で注目を集める“Erlang” - @IT

Rubyist Magazine - Rubyist のための他言語探訪 【第 10 回】 Erlang "receive"

Erlang/OTP R11B Documentation

Erlang Reference Manual

Erlang クエックブック
letter
- クエックブックの人

Erlang Land

PB memo
- チュートリアルっぽい

Thinking in Erlang (Japanese version)
- Thinking in Erlangの翻訳。いいね。

So-net blog:Rainy Day Codings:Thinking in Erlang 日本語訳
- Thinking in Erlangを翻訳した人

Category:HowTo - Trapexit
- How to write an RSS aggregatorとか、おもしろそう。

erlang @ Wiki - リンク集
- 基本的なリンク

Frequently Asked Questions about Erlang
- よくある質問のまとめ

Getting started
- 入門テキスト

perezvonの日記 - Erlangで書かれたWiki

Djangoな人々 - 渋谷で働くエンジニアのDjango日記 - Erlangのよいところ
- 熱いコメント

jijixi's diary[Erlang (2007年)]
- Erlang日記。すごい。

letter: Erlang
- Windowsな人に!

SlideAware: Using Erlang for your Web 2.0 Application Server
- ErlangをApacheで

A list of interesting Erlang links aidanf.net
- リンク集

みかログ: Erlangメモ.ets・yaws
みかログ: ErlangでComet
- Erlangとyawsでチャット

CEAN Downloads
- ErlangのCPAN

へ~たのめも:Programming Erlang が訳されている模様
- ドキュメントの日本語化の動向

[erlang] Erlang触ってみた - Greenbear Diary (2007-05-02)
- "エラーメッセージが絶望的に意味不明" <- 確かに

jijixi's diary -erl コマンドの -remsh オプション.
- Erlangのエラー解釈。なるる。

jijixi's diary - おぶじぇくと指向

yaws.conf設定マニュアル和訳

みかログ: Erlangは関数型だけど難しくない

日本語版
素晴らしい!

sh1.2 pyblosxom : 今年の言語第二弾: Erlang




Erlangは「フィボナッチ数列のN番目の値を求めるプログラム」を
書く練習をすれば、最初に必要なことが大分分かると思いました。
ErlangでWikiは、自分でつくってみたいなー。

投稿者:としのり  日時:23:59:59 | パーマリンク | コメント | トラックバック() |