Jérôme M. Berger wrote:
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
I meant stdout instead of tgt.
Andrei