On 14 Jul 2012, at 13:12, David Bruant wrote:

Hi,

I'd like to bring a bit more of feedback. I've read Stateful Traits [1]
and I was wondering how Rust intended to solve the issue mentionned in
the paper related to statelessness:
"However this simple model suffers from several limitations, in particular
(i) trait reusability is impacted because the required interface is
typically cluttered with uninteresting required accessors,
(ii) client classes are forced to implement boilerplate glue code,
(iii) the introduction of new state in a trait propagates required
accessors to all client classes,
(iv) public accessors break encapsulation of the client class."



Haven't read the paper but think such things can be circumvented with support for delegation quite nicely, somewhat similar to what go does.

The idea is to have a syntax feature which allows to automatically redirect some calls to a member field. So instead of mixing in a trait with all state accessors one would delegate only the methods required by the interface type to a member field or a derived value. This would give a nice way to provide encapsulation and export only required interface calls without having to write all the boilerplate delegation methods.

At some point I wrote a very rough syntax proposal for this in the Wiki but it's likely outdated now. If there would be interest for this, I'd try to come up with a new one. Basically what is needed is a way for specifying how to extract a value that implements an interface from self and some support for overwriting the derived methods and dealing with conflicts. One can also understand this as a mechanism for user-provided type conversion that is integrated with the type class system.


Cheers,



Stefan.
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to