digitalmars.D - Re: Latest const expansion
- Bruce Adams <tortoise_74 ya.thewho.co.uk> Sep 12 2007
- Bill Baxter <dnewsgroup billbaxter.com> Sep 12 2007
Bill Baxter Wrote:Yigal Chripun wrote:Janice Caron wrote:On 9/11/07, Yigal Chripun <yigal100 gmail.com> wrote:my proposal is to simply use the terms tail/head, so the syntax will be [head|tail] const (T) | const T for example: head const (C) c; // c is const but c.x isn't tail const (C) c; // c is mutable but c.x is const const (C) c; // as before, both c and c.x are const head const C c; // Error tail const C c; // Error
head and tail are good variable names, so I'd rather they didn't become reserved words. But I've no problem with headconst and tailconst. Only ... would that mean we'd then also have to have a tailtailconst?
agreed, no need to make tail/head reserved words. i thought 1 level of "tailness" is enough to cover 99% of cases... can you give a use case for "tailtailconst" that can't be resolved with a combination of the const parens and tailconst?
I think tailconst is too long a word for something that will probably be used pretty frequently. If you think of C++ the most commonly used const with pointer types is "const T* foo;" which means tail const. The equivalent with a D class would be come "tailconst T foo" and you'd have cases where "tailconst" appears 5 times in a function signature. tailconst Z some_func(tailconst A a, tailconst B b, tailconst C c, tailconst D d) { ... } Ick. How about shortening it to just "tconst"? And there could be ttconst, and tttconst as needed. Similarly "hconst". And still the const(T)* syntax can be a synonym for tconst(T*). Kinda reminiscent of cons, cdr, cddr, cdddr, from lisp, which really are basically serving the same purpose. --bb
You sick puppy. If I hadn't seen your many other wonderful posts I'd assume you were trolling with that one. Keyword profilerifation is a classic language design anti-pattern. If you must go down that route then your "const" should be parameterisable. I'm not terribly keen on that idea either.
Sep 12 2007
Bruce Adams wrote:Bill Baxter Wrote:Yigal Chripun wrote:Janice Caron wrote:On 9/11/07, Yigal Chripun <yigal100 gmail.com> wrote:my proposal is to simply use the terms tail/head, so the syntax will be [head|tail] const (T) | const T for example: head const (C) c; // c is const but c.x isn't tail const (C) c; // c is mutable but c.x is const const (C) c; // as before, both c and c.x are const head const C c; // Error tail const C c; // Error
become reserved words. But I've no problem with headconst and tailconst. Only ... would that mean we'd then also have to have a tailtailconst?
i thought 1 level of "tailness" is enough to cover 99% of cases... can you give a use case for "tailtailconst" that can't be resolved with a combination of the const parens and tailconst?
used pretty frequently. If you think of C++ the most commonly used const with pointer types is "const T* foo;" which means tail const. The equivalent with a D class would be come "tailconst T foo" and you'd have cases where "tailconst" appears 5 times in a function signature. tailconst Z some_func(tailconst A a, tailconst B b, tailconst C c, tailconst D d) { ... } Ick. How about shortening it to just "tconst"? And there could be ttconst, and tttconst as needed. Similarly "hconst". And still the const(T)* syntax can be a synonym for tconst(T*). Kinda reminiscent of cons, cdr, cddr, cdddr, from lisp, which really are basically serving the same purpose. --bb
You sick puppy. If I hadn't seen your many other wonderful posts I'd assume you were trolling with that one. Keyword profilerifation is a classic language design anti-pattern. If you must go down that route then your "const" should be parameterisable. I'm not terribly keen on that idea either.
Heh. Well I'd prefer the const*(T), const**(T) thing I posted previously. But if people don't go for that I'd rather at least have short keywords rather than a beasts like "tailconst" and "tailtailconst". :-) --bb
Sep 12 2007