Erlangについての勉強

今年はErlangだ!と決心したけど何もしないまま気づけばもうすぐ冬ですね。
時間て一瞬ですぎるよね。
悪あがきとしてどっかの大学で行われたErlangを学ぶ授業での資料を和訳した。
CS11 Erlang - Winter 2008-2009
和訳は以下から。講義資料のPDFをそのまま日本語にしてる。

■合意指向の言語
・分配(分散?)コンピューティングと合意に重点を置いている
・多くの軽いプロセスをサポート
 1000、数千、あるいはそれ以上
・プロセスはメッセージを使うことだけでコミュニケーションをする
 ロックせず、メモリを共有しない

■耐障害性と丈夫さに重点を置いている
・プロセスは不良状態かどうかをお互いを監視できる
・プロセスが死んだとき、自動で生きてるプロセスにシグナルを送る

■関数型言語
・状態の変異は適所にはない
・高位関数をサポート(しかしすべての関数がそうではない)
・明確なループ文をもってない(for,whileなど)
・ループはリカーシブを呼ぶことで可能
・効率的な再帰を最適化するためのテールコールをサポートしている

■バーチャルマシンベースの言語
・ソースはバイトコードにコンパイルされ、erlangエミュレーター上で実行される
・実行中のコードのホットスワッピングを許容する。
 ダウンタイムなしにアップグレード、バグフィックスが可能

■OTPを含んでいる
・OTP=オープンテレコムプラットフォーム

■OTPは大規模、欠点許容性を分配したアプリを作るためのツールとライブラリのセットです。
・アプリは基本的にダウンしない
 ・プロセスはクラッシュして自動的にハンドルされる
 ・システムアップグレードは実行環境上で実行されます
・アプリはソフトリアルタイム保証を提供できる
 ・プロセスはロードと比例して追加・削除される
 ・ソフトウェアはマシンのクラスタ上で実行される

■OTPは多くの役立つライブラリを含む
・HTTPサーバー、XMLパーサ、分配されたデータベース

■elrangとOTPはエリクソンで開発された
・スウェーデンのテレコミュニケーションカンパニー

■オリジナルは1986年に開発された

■オープンソース化は1998年

■アーランは二元的な名前
・アグナ・クラップ・アーラン
 ・数学者ダニシュ トラフィックエンジニアリングとキューイングセオリーの分野を発明した
・エリクソン言語の収縮も良い偶然の一致

■erlangでのハローワールド
-module(world).
-export([hello/0]).

%Tell the world hello!

hello()->io:format("Hello world!~n").

■erlangのコードはモジュール内に構造化される
・このモジュールの名前は"world”
・モジュールのソースは”world.erl”ファイルに保存しなければなりません。
 ・モジュールの名前とファイル名はマッチしなければならない

■コンパイルと実行
erlc world.erl
erl
1>world:hello().
Hello world!
ok
2>

■erlcはerlangのコンパイラ
・world.erlをworld.beamにコンパイル
・erlはerlangのシェルを立ち上げるコマンド
 ・実行とerlangプログラムと相互作用するためのインタラクティブコンソール

■erlの中なら以下の方法でもコンパイルと実行ができる
erl
1>c(world).
{ok,world}
2>world:hello().

■c(module)はmodule.erlをコマンドコンパイルして実行する
 ・c(module.erl)もしくはc("module.erl")でも動く

■私達の”ハローーワールド”プログラム
-module(world).
-export([hello/0]).

%Tell the world hello!

hello()->io:format("Hello world!~n").

■文はピリオドで終わる
・erlangの文法は一般に英語の句読の用法に従う

■コメントは%で始め、行の終わりまで広がる(続く)
・erlanにはブロックコメント(複数行の)はない

■私達の”ハローーワールド”プログラム
-module(world).
-export([hello/0]).

%Tell the world hello!

hello()->io:format("Hello world!~n").

■"-"で始まる文はモジュール属性を指定する
・-module(name)はモジュールの名前を指定する
・-export([functions])はこのモジュールの外から呼ぶ関数のリストを指定する
・その他多くの属性ユーザーが定義する

■erlangは比較的小さなデータ型を持つ

■整数:任意の大きさの数字
・1、-65、36893488147419103232(=2の65乗)

■浮動小数点数:浮動小数点数字の2倍の精度
・3.14159、6.022e23

■アトム:シンボリックな定数
・例.ok,world,red,title
・最初の文字は小文字でなければならない
 ・もし小文字で始まらなければシングルクオートで囲む
 ・その後、英数字、アンダーバーもしくは@が続く

■ブーリアンはtrueとfalseのアトムで表される
・erlangには実際のブーリアン型はない
・様々な論理操作はアトム上の行為

■リストは[]で囲む
・要素はコンマで分けられる
・いくつかの数字と要素の型
・例.[1,true,3.14,red]

■タプルは用語の固定した数字で化合されたデータ型
・{}で囲む
・例.{ok,world},or {point,5.1,2.3}

■浮動小数点数は小数点を持ち、小数点の右に一つ以上の桁がくる
・もし小数点の右に桁がなければ、erlangはそれを文の終わりと考えます。

■加算、減算、乗算
・もしいくつかのオペランドが浮動小数点数なら、結果は浮動小数点数となる

■除算"/"は常に浮動小数点数を返します
1> 4 / 2.
2.00000

■整数の除算のためにはdivとremを使用します

■例
1> 7 div 3.
2
2> 7 rem 3.
1
3> 7 / 3.
2.33333

■関数はモジュールの名前、関数名、arityによって唯一定義される
・Arity = 引数の数

まだ途中で、
日本語が変だけど時間見つけてやっていこう。