You can't promote a Chan to a SharedChan currently (like you could with the old API), so if the caller needs to make the decision, all the APIs will have to return SharedChan to be flexible. I don't think traits help with that problem (they do help with passing in Chans). If we want flexible APIs that returns Chans, we need promotion of some kind.
I think I misspoke before. The core issue is cognitive load of 3 channel types. Auto-promoting Chan to shared Chan reduces the number of channels (less API surface) and makes channels just work (never have to think about whether Chans are clonable). That seems a compelling combo. I was just focused more on the latter use case. jack. On Tue, Jan 14, 2014 at 10:26 PM, Eric Reed <[email protected]> wrote: > As a follow up, what situation would arise where you'd have to actually > return a Chan trait object? > Constructors are going to return the concrete type UniqueChan/SharedChan. > Functions acting on channels can just use generics, which will allow > returning. > > > On Tue, Jan 14, 2014 at 9:21 PM, Eric Reed <[email protected]> wrote: >> >> fn foo<T: Trait>() -> T >> >> >> On Tue, Jan 14, 2014 at 9:20 PM, Jack Moffitt <[email protected]> wrote: >>> >>> You can't do `foo() -> Trait`. It would have to be `foo() -> ~Trait`. >>> Well, unless DST fixes this. I assume this is the same reason we >>> return specific instances of iterators instead of an Iteratable trait >>> object. >>> >>> jack. >>> >>> On Tue, Jan 14, 2014 at 10:10 PM, Eric Reed <[email protected]> >>> wrote: >>> > How would that make us lose stack allocated return values? >>> > >>> > >>> > On Tue, Jan 14, 2014 at 5:22 PM, Jack Moffitt <[email protected]> wrote: >>> >> >>> >> > Good point. Make `Chan` a trait with implementers `UniqueChan` and >>> >> > `SharedChan`? >>> >> >>> >> I suppose the main downside of that solution is that you lose stack >>> >> allocated return values. >>> >> >>> >> jack. >>> > >>> > >> >> > _______________________________________________ Rust-dev mailing list [email protected] https://mail.mozilla.org/listinfo/rust-dev
