Objects on message queues of spawned processes

Russel Winder russel at winder.org.uk
Wed Apr 18 11:18:22 PDT 2012


I have some code (a simulation style solution to the Sleeping Barber
problem). It uses spawned processes to represent the actors of the
system. The code compiles and executes as expected using GDC as
currently on Debian Unstable, which I believe is effectively D 2.057.
Using DMD 2.058 I get the error message:


/home/users/russel/lib.Linux.x86_64/DMD2/bin64/../../src/phobos/std/concurrency.d(529): Error: cannot have parameter of type void
/home/users/russel/lib.Linux.x86_64/DMD2/bin64/../../src/phobos/std/concurrency.d(529): Error: cannot have parameter of type void
/home/users/russel/lib.Linux.x86_64/DMD2/bin64/../../src/phobos/std/concurrency.d(529): Error: variable std.concurrency.receive!(void delegate(Customer customer) @system,void,void).receive._param_1 voids have no value
/home/users/russel/lib.Linux.x86_64/DMD2/bin64/../../src/phobos/std/concurrency.d(529): Error: variable std.concurrency.receive!(void delegate(Customer customer) @system,void,void).receive._param_2 voids have no value
Failed: 'dmd' '-v' '-o-' 'singleBarber_d2_spawn.d' '-I.'


Using  DMD 2.059 I get the error message:

singleBarber_d2_spawn.d(35): Error: template std.concurrency.receive does not match any function template declaration
/home/users/russel/lib.Linux.x86_64/DMD2/bin64/../../src/phobos/std/concurrency.d(530): Error: template std.concurrency.receive(T...) cannot deduce template function from argument types !()(void delegate(Customer customer) @system,void,void)
singleBarber_d2_spawn.d(59): Error: template std.concurrency.receive does not match any function template declaration
/home/users/russel/lib.Linux.x86_64/DMD2/bin64/../../src/phobos/std/concurrency.d(530): Error: template std.concurrency.receive(T...) cannot deduce template function from argument types !()(void delegate(Customer customer) @system,void delegate(SuccessfulCustomer successfulCustomer) @system,void delegate(ShopClosing message) @system,void delegate(ClockedOut message) @system,void)
singleBarber_d2_spawn.d(99): Error: template std.concurrency.receive does not match any function template declaration
/home/users/russel/lib.Linux.x86_64/DMD2/bin64/../../src/phobos/std/concurrency.d(530): Error: template std.concurrency.receive(T...) cannot deduce template function from argument types !()(void delegate(Tid t) nothrow @safe,void delegate(Customer customer) @system,void delegate(SuccessfulCustomer successfulCustomer) @system,void,void)
Failed: 'dmd' '-v' '-o-' 'singleBarber_d2_spawn.d' '-I.'

the "offending" bit of code is:

   receive (
             ( Customer customer ) {
               writeln ( "Barber : Starting Customer " , customer.id ) ;
               Thread.sleep ( hairTrimTime ( ) ) ;
               writeln ( "Barber : Finished Customer " , customer.id ) ;
               ++customersTrimmed ;
               shop.send ( SuccessfulCustomer ( customer ) ) ;
             } ,
             ( ShopClosing ) {
               writeln ( "Barber : Work over for the day, trimmed " , customersTrimmed , "." ) ;
               shop.send ( ClockedOut ( ) ) ;
               running = false ;
             } ,
             ( OwnerTerminated ) { }
             ) ;

Where Customer and SuccessfulCustomer are structs as the case types --
so that the shop can distinguish new arrivals from trimmed customers.

So somewhere between 2.057 and 2.058 it seems that something about
receive changed, as far as I am concerned from correct to fail --
however I may have missed a memo... 

-- 
Russel.
=============================================================================
Dr Russel Winder      t: +44 20 7585 2200   voip: sip:russel.winder at ekiga.net
41 Buckmaster Road    m: +44 7770 465 077   xmpp: russel at winder.org.uk
London SW11 1EN, UK   w: www.russel.org.uk  skype: russel_winder
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part
URL: <http://lists.puremagic.com/pipermail/digitalmars-d/attachments/20120418/82edc7c5/attachment-0001.pgp>


More information about the Digitalmars-d mailing list