Type-safe channels (Re: One year of Go)

Sean Kelly sean at invisibleduck.org
Tue Nov 16 07:45:37 PST 2010


Graham Fawcett Wrote:

> 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) { ... }
> }

It shouldn't be too difficult to wrap send/receive with such a design to provide type safety.  In fact, it's one reason I wanted to use the flexible model.  Of course, using channels would be a matter of convention, since both would be available.

> (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...)

It should be possible to pass shared classes as well.  If the Channel is non-shared then you'll have to do some casting in the implementation for send/receive to allow it though.


More information about the Digitalmars-d mailing list