www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - actors library?

reply Xan xan <xancorreu gmail.com> writes:
Hi.

Is there any actors library in D. Spawn and etc is ok, but I want more
high-level thing and actors it's the best I get, I think.
I searched and nothing.

I'm interested in D 2.0 or 1.0. Whatever!

Thanks in advace,
Xan.
Jan 23 2012
next sibling parent reply Timon Gehr <timon.gehr gmx.ch> writes:
On 01/23/2012 08:01 PM, Xan xan wrote:
 Hi.

 Is there any actors library in D. Spawn and etc is ok, but I want more
 high-level thing and actors it's the best I get, I think.
 I searched and nothing.

 I'm interested in D 2.0 or 1.0. Whatever!

 Thanks in advace,
 Xan.

std.concurrency is an actors library. What exactly do you mean when you say more high-level?
Jan 23 2012
parent Timon Gehr <timon.gehr gmx.ch> writes:
On 01/24/2012 07:51 PM, xancorreu wrote:
 Al 24/01/12 13:37, En/na Dejan Lekic ha escrit:
 Xan, read this article please:
 http://www.informit.com/articles/article.aspx?p=1609144

 You have exactly what you are looking for in the D runtime and
 standard library.

std.concurrency is related to actors model. Can you enlight me? Thanks, Xan.

std.concurrency is an implementation of the actor model. 'Actor model' does not imply 'Object Oriented'. Example 1: import std.stdio, std.concurrency; void myActor() { try { for(;;){ receive( (int i){ writeln("Received integer: ",i); } ); } }catch(Exception e){ // cleanup } } void main() { auto actor = spawn(&myActor); foreach(i;0..10) actor.send(i); } Example 2: import std.stdio, std.concurrency; import core.thread; alias Thread.sleep sleep; void ping() { Tid pong; try { for(;;){ receive( (string s){ writeln("ping received ",s); sleep(dur!"seconds"(1)); pong.send("ping"); }, (Tid newPong){ pong = newPong; } ); } }catch(Exception e){} } void pong(Tid ping) { try { ping.send("pong"); for(;;){ receive( (string s){ writeln("pong received ",s); sleep(dur!"seconds"(1)); ping.send("pong"); } ); } }catch(Exception e){} } void main() { auto a1 = spawn(&ping); auto a2 = spawn(&pong,a1); a1.send(a2); sleep(dur!"seconds"(10)); }
Jan 24 2012
prev sibling next sibling parent Xan xan <xancorreu gmail.com> writes:
Something like

Class MyActor : Actor {

receive {

case i int: writeln("Received integer: ", i)

}

}

pseudocode....

2012/1/23 Timon Gehr <timon.gehr gmx.ch>:
 On 01/23/2012 08:01 PM, Xan xan wrote:
 Hi.

 Is there any actors library in D. Spawn and etc is ok, but I want more
 high-level thing and actors it's the best I get, I think.
 I searched and nothing.

 I'm interested in D 2.0 or 1.0. Whatever!

 Thanks in advace,
 Xan.

std.concurrency is an actors library. What exactly do you mean when you say more high-level?

Jan 24 2012
prev sibling next sibling parent "Dejan Lekic" <dejan.lekic gmail.com> writes:
Xan, read this article please: 
http://www.informit.com/articles/article.aspx?p=1609144

You have exactly what you are looking for in the D runtime and 
standard library.
Jan 24 2012
prev sibling next sibling parent xancorreu <xancorreu gmail.com> writes:
Al 24/01/12 13:37, En/na Dejan Lekic ha escrit:
 Xan, read this article please: 
 http://www.informit.com/articles/article.aspx?p=1609144

 You have exactly what you are looking for in the D runtime and 
 standard library.

std.concurrency is related to actors model. Can you enlight me? Thanks, Xan.
Jan 24 2012
prev sibling parent xancorreu <xancorreu gmail.com> writes:
Thanks Gehr for your examples. Very illustrative.
I wanted what you do in example 1 like a library. It's easy import 
actors library than to define your own actors (class).

Thanks,
Xan.

Al 24/01/12 21:11, En/na Timon Gehr ha escrit:
 On 01/24/2012 07:51 PM, xancorreu wrote:
 Al 24/01/12 13:37, En/na Dejan Lekic ha escrit:
 Xan, read this article please:
 http://www.informit.com/articles/article.aspx?p=1609144

 You have exactly what you are looking for in the D runtime and
 standard library.

std.concurrency is related to actors model. Can you enlight me? Thanks, Xan.

std.concurrency is an implementation of the actor model. 'Actor model' does not imply 'Object Oriented'. Example 1: import std.stdio, std.concurrency; void myActor() { try { for(;;){ receive( (int i){ writeln("Received integer: ",i); } ); } }catch(Exception e){ // cleanup } } void main() { auto actor = spawn(&myActor); foreach(i;0..10) actor.send(i); } Example 2: import std.stdio, std.concurrency; import core.thread; alias Thread.sleep sleep; void ping() { Tid pong; try { for(;;){ receive( (string s){ writeln("ping received ",s); sleep(dur!"seconds"(1)); pong.send("ping"); }, (Tid newPong){ pong = newPong; } ); } }catch(Exception e){} } void pong(Tid ping) { try { ping.send("pong"); for(;;){ receive( (string s){ writeln("pong received ",s); sleep(dur!"seconds"(1)); ping.send("pong"); } ); } }catch(Exception e){} } void main() { auto a1 = spawn(&ping); auto a2 = spawn(&pong,a1); a1.send(a2); sleep(dur!"seconds"(10)); }

Jan 25 2012