Implementing typestate

Freddy via Digitalmars-d digitalmars-d at puremagic.com
Tue Sep 15 10:45:43 PDT 2015


Would it be worth implementing some kind of typestate into the 
language?
By typestate I mean a modifiable enum.

For example:
---
enum FState
{
     none,
     read,
     write
}

struct File
{
     //maybe another keyword other than enum
     enum state = FState.none;

     void openRead(string name)
     {
         //evalutaed in a way similar to static if
         state = FState.read;
         //...
     }

     void openWrite(string name)
     {
         state = FState.write;
         //...
     }

     ubyte[] read(size_t) if (state == FState.read)
     {
         //...
     }

     void write(ubyte[]) if (state == FState.write)
     {
         //...
     }
}

unittest
{
     File f;
     static assert(f.state == FState.none);
     f.openRead("a.txt");
     static assert(f.state == FState.read);
     auto data = f.read(10);
}
---

We could use this "typestate" to implement:
  Rust style memory management in a library
  Safer Files (as shown)
  Possibly other ideas

Thoughts?


More information about the Digitalmars-d mailing list