torhu Wrote: > I tried the example on page 406-407 of the book (copying stdin to stdout > using message passing). I don't mean to be a killjoy, but it doesn't > compile. :( > > I'm using the latest pdf version of the book, and dmd 2.047. > > > I get this: > > --- > d:\prog\dmd\bin\..\src\phobos\std\stdio.d(1902): Error: cannot > implicitly conver > t expression (buffer) of type ubyte[] to immutable(ubyte)[] > d:\prog\dmd\bin\..\src\phobos\std\stdio.d(7): Error: template instance > std.stdio > .chunks.opApply!(int delegate(ref immutable(ubyte)[] __applyArg0)) error > instant > iating > ---
stdin.byChunk uses a mutable buffer that's overwritten for each chunk so you can't ask for an immutable ubyte[] in the foreach line. Here's the version of that sample I used to test (13.7): import std.algorithm, std.concurrency, std.stdio; void main() { enum bufferSize = 10; auto tid = spawn( &fileWriter ); // Read loop foreach( ubyte[] buffer; stdin.byChunk( bufferSize ) ) send( tid, buffer.idup ); } void fileWriter() { // Write loop for( ; ; ) { auto buffer = receiveOnly!(immutable(ubyte)[])(); writeln( "rx: ", buffer ); } }