Erlangid:inajob@ina_ani  10/23
Erlang●   PTT          ■ 話者:檜山正幸(檜山正幸事務所)           ■ 話者:檜山正幸(檜山正幸事務所)          ■ 題名: Erlang を用いたウェブ交換機(仮)           ■ 題名:...
入門 Erlang● 文法は Prolog っぽい – , で式を区切る                      hello_world() ->                                     A = 10 * 2 ...
データ構造●   変数  大文字から始める (A,B,Size,Count)●   アトム 小文字からはじまる (read,write,text)●   タプル {a,b,c}●   リスト [1,2,3]●   文字列もリスト      {p...
パターン照合X = 10.X = 5 + 5.{name,Name}   = {name,ina}.{_,_,_,Age}   = {ina,uec,ipl,23}.[Head|Tail]   = [1,2,3,4]. => Head =   ...
関数を書いてみようfac(1) ->    1;fac(N) ->    N * fac(N – 1).引数照合もパターンマッチ上から順に調べる
関数を書いてみよう 2タプルの正しい使い方                           ここもパターン照合convert({X,cm}) ->    {X/2.54,inch};convert({X,inch}) ->    {X*2....
並列処理● Erlang の得意分野 – 複数の処理が並んで実行される● 単一代入なので変数の変更の同期などは不要 – (そもそも変更できない)● 複数の処理がメッセージを投げあって協調動作
並列処理spawn で別スレッドを生成PID が帰ってくるPID ! メッセージ          で特定のスレッドにメッセージを送るPid = spawn(hoge),Pid ! {mes ,”Hello”}.receive で受け取るrec...
並列処理と GUI●    GS(tk) や wxErlang などの GUI ライブラリ    – Receive を用いてイベントの処理を行う    – 書きやすいのか?                                   ...
GUI と Erlang● 気兼ねなく spawn できる● タプルの型のチェックは実行時● オブジェクト指向ではない – コントロールと処理が分離されている    ●   Button = wxButton:new(),        wxB...
話してないこと●   普通に spawn や receive を使って処理を書い    ておけば、複数コアのマシンで平行に処理でき    るだけでなく 複数マシンで処理を分担させる    ことも可能●   サーバを止めずに処理を差し替える●  ...
Lets Erlang●   サーバ書くのとかに向いてるの?
Upcoming SlideShare
Loading in …5
×

Erlangやってみた

1,154
-1

Published on

何年か前調べたやつなので間違いがあるかも…

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,154
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
1
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Erlangやってみた

  1. 1. Erlangid:inajob@ina_ani 10/23
  2. 2. Erlang● PTT ■ 話者:檜山正幸(檜山正幸事務所) ■ 話者:檜山正幸(檜山正幸事務所) ■ 題名: Erlang を用いたウェブ交換機(仮) ■ 題名: Erlang を用いたウェブ交換機(仮) ■ 概要: ■ 概要: Erlang の簡単な紹介と Erlang を用いたウェブ上でのメッセージ交換 Erlang の簡単な紹介と Erlang を用いたウェブ上でのメッセージ交換 システムについて述べる。 Erlang は 1980 年代末にエリクソンで開発 システムについて述べる。 Erlang は 1980 年代末にエリクソンで開発 された関数型プログラミング言語である。 Erlang は軽量な並行プロ された関数型プログラミング言語である。 Erlang は軽量な並行プロ セスの概念を備え、並行処理を簡潔に記述するとともに、マルチコ セスの概念を備え、並行処理を簡潔に記述するとともに、マルチコ ア PC あるいは複数 PC 上での並列・分散処理を容易に可能にする点を ア PC あるいは複数 PC 上での並列・分散処理を容易に可能にする点を 特徴とする。この Erlang を用い、ウェブブラウザ間で双方向リアル 特徴とする。この Erlang を用い、ウェブブラウザ間で双方向リアル タイム通信を行うシステムを開発している。複数ブラウザの間にジ タイム通信を行うシステムを開発している。複数ブラウザの間にジ ャンクチャと呼ばれる中継サーバーを介した通信路を張り、任意の ャンクチャと呼ばれる中継サーバーを介した通信路を張り、任意の ブラウザ間で通信したり、同報通信を行ったりすることができる。 ブラウザ間で通信したり、同報通信を行ったりすることができる。 ジャンクチャは Erlang により実装されており、サーバー・ブラウザ ジャンクチャは Erlang により実装されており、サーバー・ブラウザ 間の Comet 技術を利用した非同期通信と、 Erlang のプロセス間通信 間の Comet 技術を利用した非同期通信と、 Erlang のプロセス間通信 を透過的に扱うように設計した。 を透過的に扱うように設計した。 これはやらねば
  3. 3. 入門 Erlang● 文法は Prolog っぽい – , で式を区切る hello_world() -> A = 10 * 2 + 1 + (1 + 2) * 100, – ; で条件を区切る io:fwrite(integer_to_list(A)), – . でおしまい io:fwrite("Hello, World!n").● 単一代入 – 変数がちょっと特殊 1> A = 10. 10 2> B = 20. 20 3> A + B. 30 4> A = 20. ** exception error: no match of right hand side value 20 5> A = 5 + 5. 10
  4. 4. データ構造● 変数 大文字から始める (A,B,Size,Count)● アトム 小文字からはじまる (read,write,text)● タプル {a,b,c}● リスト [1,2,3]● 文字列もリスト {person, {name, joe}, {height, 1.82}, {footsize, 42}}
  5. 5. パターン照合X = 10.X = 5 + 5.{name,Name} = {name,ina}.{_,_,_,Age} = {ina,uec,ipl,23}.[Head|Tail] = [1,2,3,4]. => Head = 1, Tail = [2,3,4]
  6. 6. 関数を書いてみようfac(1) -> 1;fac(N) -> N * fac(N – 1).引数照合もパターンマッチ上から順に調べる
  7. 7. 関数を書いてみよう 2タプルの正しい使い方 ここもパターン照合convert({X,cm}) -> {X/2.54,inch};convert({X,inch}) -> {X*2.54,cm}. タグとしてアトムを利用なかなか素敵>convert({20,cm}).{7.874015748031496,inch}
  8. 8. 並列処理● Erlang の得意分野 – 複数の処理が並んで実行される● 単一代入なので変数の変更の同期などは不要 – (そもそも変更できない)● 複数の処理がメッセージを投げあって協調動作
  9. 9. 並列処理spawn で別スレッドを生成PID が帰ってくるPID ! メッセージ で特定のスレッドにメッセージを送るPid = spawn(hoge),Pid ! {mes ,”Hello”}.receive で受け取るreceive {mes , Msg} -> Sample Sample io:fwrite(mes).end.
  10. 10. 並列処理と GUI● GS(tk) や wxErlang などの GUI ライブラリ – Receive を用いてイベントの処理を行う – 書きやすいのか? Sample Sample
  11. 11. GUI と Erlang● 気兼ねなく spawn できる● タプルの型のチェックは実行時● オブジェクト指向ではない – コントロールと処理が分離されている ● Button = wxButton:new(), wxButton:setLabel(Button,”label”). ライブラリの設計に問題? ●● 不意に落ちる – セグメンテーションフォールト
  12. 12. 話してないこと● 普通に spawn や receive を使って処理を書い ておけば、複数コアのマシンで平行に処理でき るだけでなく 複数マシンで処理を分担させる ことも可能● サーバを止めずに処理を差し替える● エラーハンドリング(死体回収)● 分散 DB● 便利なデバッガ
  13. 13. Lets Erlang● サーバ書くのとかに向いてるの?
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×