I'm not going to claim canonicity, but I used the type system to encode the socket state machine (see std::io::net::{tcp,udp}). TcpListener consumes itself when you start listening and becomes a TcpAcceptor. UdpSocket can "connect" (i.e. ignore messages from other sources) and become a UdpStream, which can "disconnect" (i.e. stop ignoring) and become a UdpSocket again.
It's actually very easy to do. Make every state a distinct affine type. Implement state transitions as methods that take self by value (consume old state) and return the new state. On Wed, Jun 4, 2014 at 10:40 PM, Cameron Zwarich <zwar...@mozilla.com> wrote: > Is there a canonical example of encoding a state machine into Rust's > substructural types? > > Cameron > > On Jun 4, 2014, at 10:14 PM, Brian Anderson <bander...@mozilla.com> wrote: > > Thank you for your suggestion, but typestate is not coming back. There is > no room in the complexity budget for another major piece of type system, > and linear types can serve much the same purpose. > > On 06/04/2014 10:11 PM, Suminda Dharmasena wrote: > > Hi, > > The initial Type State implementation in Rust was not a great way to get > about it. Please reconsider adding type state like it has been done in the > Plaid language. > > Basically you can use traits mechanism to mixin and remove the trait > when methods marked as having state transitions. > > Suminda > > Plaid: http://www.cs.cmu.edu/~aldrich/plaid/ > > > _______________________________________________ > Rust-dev mailing > listRust-dev@mozilla.orghttps://mail.mozilla.org/listinfo/rust-dev > > > _______________________________________________ > Rust-dev mailing list > Rust-dev@mozilla.org > https://mail.mozilla.org/listinfo/rust-dev > > > _______________________________________________ > Rust-dev mailing list > Rust-dev@mozilla.org > https://mail.mozilla.org/listinfo/rust-dev > >
_______________________________________________ Rust-dev mailing list Rust-dev@mozilla.org https://mail.mozilla.org/listinfo/rust-dev