今年は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 = 引数の数
まだ途中で、
日本語が変だけど時間見つけてやっていこう。