Andrei Alexandrescu wrote:
> Andrei Alexandrescu wrote:
>> Nick Sabalausky wrote:
>> [snip]
>>> It's been no worse at threading than C/C++ for quite some time. It's
>>> just starting to have a threading model that kicks the crap out of
>>> the threading in the vast majority of languages out there.
>>
>> BTW, that effort is going quite well. For example, a producer-consumer
>> file copy program using the proposed API has 20 lines, correctness and
>> all.
>>
>> import std.algorithm, std.concurrency, std.stdio;
>>
>> void main() {
>> enum bufferSize = 1024 * 100;
>> auto tid = spawn(&writer);
>> // Read loop
>> auto src = stdin.by!(ubyte)();
>> for (;;) {
>> auto buffer = UniqueArray!(ubyte)(bufferSize);
>> auto length = copy(take(src, bufferSize), buffer).length;
>> send(tid, move(buffer));
>> if (length == 0) break;
>> }
>> }
>>
>> void writer() {
>> // Write loop
>> auto tgt = stdout.by!(ubyte)();
>> for (;;) {
>> auto buffer = receiveOnly!(UniqueArray!ubyte)();
>> copy(buffer, tgt);
>> }
>> }
>>
>>
>> Andrei
>
> Sorry for the monologue. Actually I reworked the example into the even
> simpler:
>
> import std.concurrency, std.stdio;
>
> void main() {
> enum bufferSize = 1024 * 100;
> auto tid = spawn(&writer);
> // Read loop
> foreach (immutable(ubyte)[] buffer; stdin.byChunk(bufferSize)) {
> send(tid, buffer);
> }
> }
>
> void writer() {
> // Write loop
> for (;;) {
> auto buffer = receiveOnly!(immutable(ubyte)[])();
> tgt.rawWrite(buffer);
> }
> }
>
> We actually have implemented all the pieces to make this work.
>
Shouldn't you declare "tgt" somewhere (you did in your first example...
Jerome
--
mailto:[email protected]
http://jeberger.free.fr
Jabber: [email protected]
signature.asc
Description: OpenPGP digital signature
