• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Erlangやってみた
 

Erlangやってみた

on

  • 1,152 views

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

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

Statistics

Views

Total Views
1,152
Views on SlideShare
1,151
Embed Views
1

Actions

Likes
0
Downloads
0
Comments
0

1 Embed 1

http://twitter.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Erlangやってみた Erlangやってみた Presentation Transcript

    • Erlangid: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● 便利なデバッガ
    • Lets Erlang● サーバ書くのとかに向いてるの?