[dmd-concurrency] draft 4
Sean Kelly
sean at invisibleduck.org
Tue Jan 12 15:17:36 PST 2010
On Jan 12, 2010, at 2:16 PM, Andrei Alexandrescu wrote:
> Sean Kelly wrote:
>
>> What I'd like to do now that I haven't been able to because of a compiler bug is allow a timeout and catchall receiver to be supplied to the full recvmsg call:
>> recvmsg( after(5, { writefln( "no message received!" ); },
>> any( (Variant v) { writefln( "got something: %s", v ); } ) );
>
> This is cute, perhaps a bit too cute. My objections are many but minor:
>
> * "recvmsg" is an awful name that evokes to me the name of a Cobol routine. It's very difficult to use in a conversation, and my accent doesn't help either :o). I think "receive" is a definite improvement.
Fine with me. I originally chose recvmsg and sendmsg to try and avoid name collisions. I'd be just as happy with send and receive or whatever else instead.
> * Instead of after(...) as a clause, I'd rather have a receiveTimed (or recvmsgtmd if you wish) that takes a timeout value and returns true or false. I mean I'm not sure what moving the timeout code inside the call to recvms... I mean receive would gain us.
Nothing really. I was mostly trying to model the Erlang pattern matching style as closely as possible. Seems like it might be annoying to try and prevent:
receive( after(5, ...), after(10, ...) );
anyway, assuming we wanted to be that strict. Note that when multiple functions are passed, the match is found via a nested loop:
foreach( m; messages ) {
foreach( f; functions ) {
if( matches( m, f ) ) {
f( m );
removeMessage( m );
return;
}
}
}
so passing multiple functions that accept the same params is valid. The first will just always get the message.
More information about the dmd-concurrency
mailing list