<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: Erlang code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sat, 26 Jul 2008 05:32:03 GMT</pubDate>
    <description>DZone Snippets: Erlang code</description>
    <item>
      <title>Erlang Message Passing - Ruby point of view</title>
      <link>http://snippets.dzone.com/posts/show/4421</link>
      <description>&lt;code&gt;&lt;br /&gt;#!/usr/bin/env ruby&lt;br /&gt;&lt;br /&gt;StartTime = Time.now&lt;br /&gt;MT = Thread.current&lt;br /&gt;&lt;br /&gt;$data = [0,0]&lt;br /&gt;&lt;br /&gt;class ErProc&lt;br /&gt;  def initialize(*args)&lt;br /&gt;    #create thread&lt;br /&gt;    @thr = Thread.new { func(*args) }&lt;br /&gt;    @waiter = nil&lt;br /&gt;    @data = nil&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def func(*args)&lt;br /&gt;    while true&lt;br /&gt;      data = recieve()&lt;br /&gt;      #p data&lt;br /&gt;      data[1] = data[1] + 1&lt;br /&gt;      if nil == args[0]&lt;br /&gt;        $data = data&lt;br /&gt;        MT.wakeup&lt;br /&gt;      else&lt;br /&gt;        args[0].send(data)&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def recieve()&lt;br /&gt;    # check waiting&lt;br /&gt;    Thread.critical = true&lt;br /&gt;    if @waiter&lt;br /&gt;      @waiter.wakeup&lt;br /&gt;      @waiter = nil&lt;br /&gt;      Thread.critical = false&lt;br /&gt;    else&lt;br /&gt;      # thread stop&lt;br /&gt;      Thread.stop&lt;br /&gt;    end&lt;br /&gt;    # returns data&lt;br /&gt;    return @data&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def send(data)&lt;br /&gt;    # block till thread is running&lt;br /&gt;    Thread.critical = true&lt;br /&gt;    if !@thr.stop?&lt;br /&gt;      @waiter = Thread.current&lt;br /&gt;      Thread.stop&lt;br /&gt;    end&lt;br /&gt;    # strore data&lt;br /&gt;    @data = data&lt;br /&gt;    Thread.critical = false&lt;br /&gt;    # starts thread&lt;br /&gt;    @thr.wakeup&lt;br /&gt;    # return&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;raise "Parameters must be: thread_cnt message_cnt" if ARGV.size != 2&lt;br /&gt;&lt;br /&gt;ProcCnt = ARGV[0].to_i&lt;br /&gt;MsgCnt = ARGV[1].to_i&lt;br /&gt;&lt;br /&gt;puts "Creating #{ProcCnt} processes"&lt;br /&gt;&lt;br /&gt;prev = nil&lt;br /&gt;1.upto(ProcCnt) do&lt;br /&gt;  prev = ErProc.new(prev)&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;puts "Finish: #{Time.now - StartTime}"&lt;br /&gt;&lt;br /&gt;puts "Sending #{MsgCnt} messages"&lt;br /&gt;&lt;br /&gt;1.upto(MsgCnt) do |x|&lt;br /&gt;  $data[0] = x&lt;br /&gt;  prev.send($data)&lt;br /&gt;  Thread.stop&lt;br /&gt;  p $data&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;puts "Full time :#{Time.now - StartTime}"&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Wed, 15 Aug 2007 01:34:10 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4421</guid>
      <author>teki321 (teki)</author>
    </item>
    <item>
      <title>a silly FIFO in Erlang (you should use OTP's queue.erl instead)</title>
      <link>http://snippets.dzone.com/posts/show/2748</link>
      <description>&lt;code&gt;&lt;br /&gt;-module(fifo).&lt;br /&gt;-export([new/0, loop/0, push/2, pop/1]).&lt;br /&gt;&lt;br /&gt;new() -&gt;&lt;br /&gt;    spawn(?MODULE, loop, []).&lt;br /&gt;&lt;br /&gt;loop() -&gt;&lt;br /&gt;    receive&lt;br /&gt;        {Pid,pop} -&gt;&lt;br /&gt;            Pid ! {self(),receive {push,X} -&gt;&lt;br /&gt;                                  X&lt;br /&gt;                          end),&lt;br /&gt;            loop()&lt;br /&gt;    end.&lt;br /&gt;&lt;br /&gt;push(Fifo,X) -&gt;&lt;br /&gt;    Fifo ! {push,X},&lt;br /&gt;    X.&lt;br /&gt;&lt;br /&gt;pop(Fifo) -&gt;&lt;br /&gt;    Fifo ! {self(),pop},&lt;br /&gt;    receive {Fifo,X} -&gt;&lt;br /&gt;            X&lt;br /&gt;    end.&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 01 Oct 2006 09:36:56 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2748</guid>
      <author>ayrnieu (Julian Fondren)</author>
    </item>
    <item>
      <title>SET+</title>
      <link>http://snippets.dzone.com/posts/show/2116</link>
      <description>&lt;code&gt;&lt;br /&gt;    set+: func [ ; Inspired by Erlang's list model.&lt;br /&gt;        "Like SET, but words block is dialected."&lt;br /&gt;        words  [any-block!] "Word after | gets remainder of series."&lt;br /&gt;        series [series!]&lt;br /&gt;        /local word= rule=&lt;br /&gt;    ][&lt;br /&gt;        word=: [set word word!]&lt;br /&gt;        rule=: [&lt;br /&gt;            any [&lt;br /&gt;                '| word= (set word series) to end&lt;br /&gt;                | word= (&lt;br /&gt;                    set word pick series 1&lt;br /&gt;                    series: next series&lt;br /&gt;                )&lt;br /&gt;            ]&lt;br /&gt;        ]&lt;br /&gt;        parse words rule=&lt;br /&gt;    ]&lt;br /&gt;    ;set+ [a | rest] [1 2 3 4 5]&lt;br /&gt;    ;set+ [a b | rest] [1 2 3 4 5]&lt;br /&gt;    ;set+ [a b c] [1 2]&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 29 May 2006 22:35:02 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2116</guid>
      <author>gregg.irwin (Gregg Irwin)</author>
    </item>
  </channel>
</rss>
