digitalmars.D - The new invariant.
- Chris Nicholson-Sauls (13/13) Mar 25 2007 A couple of quick questions about the upcoming 'invariant' type construc...
- Andrei Alexandrescu (See Website For Email) (6/22) Mar 25 2007 The latter.
- Chris Nicholson-Sauls (5/28) Mar 25 2007 Sweet. This sort of thing alone will make the new const'ness material w...
A couple of quick questions about the upcoming 'invariant' type constructor. Given a class Foo, will there be a way to mark the class as having only invariant instances? Ie can I declare it as 'invariant class Foo {}' much as 'scope class Foo {}' would make it RAII-only? Second, say I want to make an associative array of invariant Foo instances. How would I declare this? (Let's use int as the key type, for simplicity.) invariant Foo[int] pool ; // reads to me as the AA type is invariant, which is useless invariant(Foo)[int] pool ; // perhaps? like with the new const()? This would be quite nifty for one of my projects, if it works like I expect. private static invariant(Symbol)[invariant(char[])] pool ; It'd be beautiful. Though I still worry a little about the current invariant{} contract being broken. -- Chris Nicholson-Sauls
Mar 25 2007
Chris Nicholson-Sauls wrote:A couple of quick questions about the upcoming 'invariant' type constructor. Given a class Foo, will there be a way to mark the class as having only invariant instances? Ie can I declare it as 'invariant class Foo {}' much as 'scope class Foo {}' would make it RAII-only?Yes.Second, say I want to make an associative array of invariant Foo instances. How would I declare this? (Let's use int as the key type, for simplicity.) invariant Foo[int] pool ; // reads to me as the AA type is invariant, which is useless invariant(Foo)[int] pool ; // perhaps? like with the new const()?The latter.This would be quite nifty for one of my projects, if it works like I expect. private static invariant(Symbol)[invariant(char[])] pool ;That too. Possibly we'll also alias invariant(char[]) to string.It'd be beautiful. Though I still worry a little about the current invariant{} contract being broken.We're looking into it. Andrei
Mar 25 2007
Andrei Alexandrescu (See Website For Email) wrote:Chris Nicholson-Sauls wrote:Nice.A couple of quick questions about the upcoming 'invariant' type constructor. Given a class Foo, will there be a way to mark the class as having only invariant instances? Ie can I declare it as 'invariant class Foo {}' much as 'scope class Foo {}' would make it RAII-only?Yes.Sweet. This sort of thing alone will make the new const'ness material well worthwhile for myself. -- Chris Nicholson-SaulsSecond, say I want to make an associative array of invariant Foo instances. How would I declare this? (Let's use int as the key type, for simplicity.) invariant Foo[int] pool ; // reads to me as the AA type is invariant, which is useless invariant(Foo)[int] pool ; // perhaps? like with the new const()?The latter.This would be quite nifty for one of my projects, if it works like I expect. private static invariant(Symbol)[invariant(char[])] pool ;That too. Possibly we'll also alias invariant(char[]) to string.
Mar 25 2007