SlideShare une entreprise Scribd logo
1  sur  13
Télécharger pour lire hors ligne
Erlang




id:inajob
@ina_ani
  10/23
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 のプロセス間通信
          を透過的に扱うように設計した。
           を透過的に扱うように設計した。

          これはやらねば
入門 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
データ構造
●   変数  大文字から始める (A,B,Size,Count)
●   アトム 小文字からはじまる (read,write,text)
●   タプル {a,b,c}
●   リスト [1,2,3]
●   文字列もリスト      {person,
                       {name, joe},
                       {height, 1.82},
                       {footsize, 42}}
パターン照合
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]
関数を書いてみよう
fac(1) ->
    1;
fac(N) ->
    N * fac(N – 1).

引数照合もパターンマッチ
上から順に調べる
関数を書いてみよう 2
タプルの正しい使い方
                           ここもパターン照合
convert({X,cm}) ->
    {X/2.54,inch};
convert({X,inch}) ->
    {X*2.54,cm}.
                       タグとしてアトムを利用

なかなか素敵

>convert({20,cm}).
{7.874015748031496,inch}
並列処理
● Erlang の得意分野
 – 複数の処理が並んで実行される
● 単一代入なので変数の変更の同期などは不要


 – (そもそも変更できない)
● 複数の処理がメッセージを投げあって協調動作
並列処理
spawn で別スレッドを生成
PID が帰ってくる
PID ! メッセージ
          で特定のスレッドにメッセージを送る
Pid = spawn(hoge),
Pid ! {mes ,”Hello”}.

receive で受け取る
receive
  {mes , Msg} ->        Sample
                         Sample
      io:fwrite(mes).
end.
並列処理と GUI
●    GS(tk) や wxErlang などの GUI ライブラリ
    – Receive を用いてイベントの処理を行う

    – 書きやすいのか?




                                   Sample
                                    Sample
GUI と Erlang
● 気兼ねなく spawn できる
● タプルの型のチェックは実行時


● オブジェクト指向ではない


 – コントロールと処理が分離されている
    ●   Button = wxButton:new(),
        wxButton:setLabel(Button,”label”).
    ライブラリの設計に問題?
    ●


● 不意に落ちる


 – セグメンテーションフォールト
話してないこと
●   普通に spawn や receive を使って処理を書い
    ておけば、複数コアのマシンで平行に処理でき
    るだけでなく 複数マシンで処理を分担させる
    ことも可能
●   サーバを止めずに処理を差し替える
●   エラーハンドリング(死体回収)
●   分散 DB
●   便利なデバッガ
Let's Erlang
●   サーバ書くのとかに向いてるの?

Contenu connexe

Tendances

MlnagoyaRx02
MlnagoyaRx02MlnagoyaRx02
MlnagoyaRx02
mega80b
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
Ransui Iso
 
Node.js Error & Debug Leveling
Node.js Error & Debug LevelingNode.js Error & Debug Leveling
Node.js Error & Debug Leveling
kumatch kumatch
 
詳説ぺちぺち
詳説ぺちぺち詳説ぺちぺち
詳説ぺちぺち
do_aki
 
Python で munin plugin を書いてみる
Python で munin plugin を書いてみるPython で munin plugin を書いてみる
Python で munin plugin を書いてみる
ftnk
 
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
Tetsuya Morimoto
 
Ruby&Active Support for expert 3
Ruby&Active Support for expert 3Ruby&Active Support for expert 3
Ruby&Active Support for expert 3
xibbar
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
 

Tendances (20)

Effective Modern C++ 勉強会#3 Item16
Effective Modern C++ 勉強会#3 Item16Effective Modern C++ 勉強会#3 Item16
Effective Modern C++ 勉強会#3 Item16
 
Unix
UnixUnix
Unix
 
MlnagoyaRx02
MlnagoyaRx02MlnagoyaRx02
MlnagoyaRx02
 
Functional Way
Functional WayFunctional Way
Functional Way
 
Testman
TestmanTestman
Testman
 
おいしいLisp
おいしいLispおいしいLisp
おいしいLisp
 
エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半
 
Vim の話
Vim の話Vim の話
Vim の話
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
 
Linq To Fun
Linq To FunLinq To Fun
Linq To Fun
 
Node.js Error & Debug Leveling
Node.js Error & Debug LevelingNode.js Error & Debug Leveling
Node.js Error & Debug Leveling
 
詳説ぺちぺち
詳説ぺちぺち詳説ぺちぺち
詳説ぺちぺち
 
Python で munin plugin を書いてみる
Python で munin plugin を書いてみるPython で munin plugin を書いてみる
Python で munin plugin を書いてみる
 
IdrisでWebアプリを書く
IdrisでWebアプリを書くIdrisでWebアプリを書く
IdrisでWebアプリを書く
 
Boost Tour 1.50.0
Boost Tour 1.50.0Boost Tour 1.50.0
Boost Tour 1.50.0
 
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
 
Ruby&Active Support for expert 3
Ruby&Active Support for expert 3Ruby&Active Support for expert 3
Ruby&Active Support for expert 3
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
 
Aizu lt tokyo_luxion
Aizu lt tokyo_luxionAizu lt tokyo_luxion
Aizu lt tokyo_luxion
 
Python02
Python02Python02
Python02
 

En vedette

En vedette (7)

プロペラブForth発表osc愛媛
プロペラブForth発表osc愛媛プロペラブForth発表osc愛媛
プロペラブForth発表osc愛媛
 
Synthesijer で作るFORTH仮想マシン
Synthesijer で作るFORTH仮想マシンSynthesijer で作るFORTH仮想マシン
Synthesijer で作るFORTH仮想マシン
 
Synthesijer and Synthesijer.Scala in HLS-friends 201512
Synthesijer and Synthesijer.Scala in HLS-friends 201512Synthesijer and Synthesijer.Scala in HLS-friends 201512
Synthesijer and Synthesijer.Scala in HLS-friends 201512
 
Synthesijer fpgax 20150201
Synthesijer fpgax 20150201Synthesijer fpgax 20150201
Synthesijer fpgax 20150201
 
FPGA+Synthesijerでヴォコーダを作ってみた
FPGA+Synthesijerでヴォコーダを作ってみたFPGA+Synthesijerでヴォコーダを作ってみた
FPGA+Synthesijerでヴォコーダを作ってみた
 
FPGAX6_hayashi
FPGAX6_hayashiFPGAX6_hayashi
FPGAX6_hayashi
 
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
 

Similaire à Erlangやってみた

GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
博文 斉藤
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~
CHY72
 
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみている
pocketberserker
 
初心者講習会資料(Osaka.r#6)
初心者講習会資料(Osaka.r#6)初心者講習会資料(Osaka.r#6)
初心者講習会資料(Osaka.r#6)
Masahiro Hayashi
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章
Tomonobu_Hirano
 

Similaire à Erlangやってみた (20)

Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
 
初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
 
Tokyor23 doradora09
Tokyor23 doradora09Tokyor23 doradora09
Tokyor23 doradora09
 
Swiftおさらい
SwiftおさらいSwiftおさらい
Swiftおさらい
 
Erlangご紹介 websocket編
Erlangご紹介 websocket編Erlangご紹介 websocket編
Erlangご紹介 websocket編
 
JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門
 
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~
 
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみている
 
たのしい関数型
たのしい関数型たのしい関数型
たのしい関数型
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライド
 
初心者講習会資料(Osaka.r#6)
初心者講習会資料(Osaka.r#6)初心者講習会資料(Osaka.r#6)
初心者講習会資料(Osaka.r#6)
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章
 

Plus de ina job

Plus de ina job (12)

KubeWeekly読書メモの紹介
KubeWeekly読書メモの紹介KubeWeekly読書メモの紹介
KubeWeekly読書メモの紹介
 
僕の 技術の無駄遣いを 紹介します
僕の 技術の無駄遣いを 紹介します僕の 技術の無駄遣いを 紹介します
僕の 技術の無駄遣いを 紹介します
 
シェル入門
シェル入門シェル入門
シェル入門
 
Voice remix!
Voice remix!Voice remix!
Voice remix!
 
Mustache入門
Mustache入門Mustache入門
Mustache入門
 
MTM07で電子楽器を展示してきた
MTM07で電子楽器を展示してきたMTM07で電子楽器を展示してきた
MTM07で電子楽器を展示してきた
 
SVNのすすめ&Redmineでプロジェクト管理
SVNのすすめ&Redmineでプロジェクト管理SVNのすすめ&Redmineでプロジェクト管理
SVNのすすめ&Redmineでプロジェクト管理
 
OooBasic
OooBasicOooBasic
OooBasic
 
ICFP2009-いかにして我々は戦ったか
ICFP2009-いかにして我々は戦ったかICFP2009-いかにして我々は戦ったか
ICFP2009-いかにして我々は戦ったか
 
context free art
context free artcontext free art
context free art
 
WxHaskell
WxHaskellWxHaskell
WxHaskell
 
webを飾る技術
webを飾る技術webを飾る技術
webを飾る技術
 

Dernier

Dernier (11)

論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 

Erlangやってみた

  • 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. 入門 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. データ構造 ● 変数 大文字から始める (A,B,Size,Count) ● アトム 小文字からはじまる (read,write,text) ● タプル {a,b,c} ● リスト [1,2,3] ● 文字列もリスト {person, {name, joe}, {height, 1.82}, {footsize, 42}}
  • 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. 関数を書いてみよう fac(1) -> 1; fac(N) -> N * fac(N – 1). 引数照合もパターンマッチ 上から順に調べる
  • 7. 関数を書いてみよう 2 タプルの正しい使い方 ここもパターン照合 convert({X,cm}) -> {X/2.54,inch}; convert({X,inch}) -> {X*2.54,cm}. タグとしてアトムを利用 なかなか素敵 >convert({20,cm}). {7.874015748031496,inch}
  • 8. 並列処理 ● Erlang の得意分野 – 複数の処理が並んで実行される ● 単一代入なので変数の変更の同期などは不要 – (そもそも変更できない) ● 複数の処理がメッセージを投げあって協調動作
  • 9. 並列処理 spawn で別スレッドを生成 PID が帰ってくる PID ! メッセージ で特定のスレッドにメッセージを送る Pid = spawn(hoge), Pid ! {mes ,”Hello”}. receive で受け取る receive {mes , Msg} -> Sample Sample io:fwrite(mes). end.
  • 10. 並列処理と GUI ● GS(tk) や wxErlang などの GUI ライブラリ – Receive を用いてイベントの処理を行う – 書きやすいのか? Sample Sample
  • 11. GUI と Erlang ● 気兼ねなく spawn できる ● タプルの型のチェックは実行時 ● オブジェクト指向ではない – コントロールと処理が分離されている ● Button = wxButton:new(), wxButton:setLabel(Button,”label”). ライブラリの設計に問題? ● ● 不意に落ちる – セグメンテーションフォールト
  • 12. 話してないこと ● 普通に spawn や receive を使って処理を書い ておけば、複数コアのマシンで平行に処理でき るだけでなく 複数マシンで処理を分担させる ことも可能 ● サーバを止めずに処理を差し替える ● エラーハンドリング(死体回収) ● 分散 DB ● 便利なデバッガ
  • 13. Let's Erlang ● サーバ書くのとかに向いてるの?