On Fri, 12 Nov 2010 18:15:15 -0500, Sean Kelly wrote:
>
> To be honest, I haven't spent much time with Go because my cursory
> exposure to the language hasn't shown it to solve the problems I
> care about better than the languages I currently use. I think Go is
> in the right ballpark with channels though, and the rest is
> passable. I'm trying to withhold my opinion about the lack of
> generics and such and evaluate the language based on what's there.
Since you brought up channels...
One thing I very much like about Go (and Haskell, etc.) that I don't
think has a counterpart in Phobos is type-safe message passing. I like
the flexibility of the current "mailbox" design. But I'd really like
an alternative that could enforce type-safety on messages. I don't
think per-thread mailboxes could accommodate this, but Channel objects
could; e.g.:
struct Channel(T) {
T receive() { ... }
void send(T val) { ... }
}
struct request { ... }
struct response { ... }
void worker(Channel!request inChan, Channel!response outChan) {
while (true) {
Request req = inChan.receive();
Response resp = process(req);
outChan.send(resp);
}
}
Channel!Variant could be used to emulate thread mailboxes (though
without the per-thread limitation: multiple consumers could read from
the same channel.)
I think that type-safe channels would be a nice complement to the
current ad-hoc message-passing design. No reason I could see that they
couldn't coexist peacefully; having both would address a larger family
of possible concurrent designs, with different design trade-offs.
(I am guessing that tricks might have to be played to pass Channel
objects around as pure values across threads, but I'm also guessing
this is surmountable...)
Best,
Graham