digitalmars.D - return const proposals
- ore-sama (26/26) Oct 06 2008 I wanted to use const system, but the kitchen sink syndrome SUDDENLY kil...
- Jason House (4/36) Oct 06 2008 What about the following?
- Denis Koroskin (7/17) Oct 06 2008 Other suggestion:
I wanted to use const system, but the kitchen sink syndrome SUDDENLY killed me
:(
There is return storage class attribute
const(char[]) capitalize(return const(char[]) s) { ... }
but it's not very intuitive: surprisingly return type is NOT what it looks like
and one have to read the entire signature to figure out that the return type is
not really const.
Rather than that we want here one parameter with *optional* constness and
return type *inheriting* this constness and these tend to be deemed as *two*
different, though related, operations. And as Bill Baxter pointed out (
http://d.puremagic.com/issues/show_bug.cgi?id=2094#c9 ) we would like to extend
it to invariant inheritance. So this gets a little more complicated than mere
attribute. So a few proposals from me.
Case 1. Straight-forward approach. Huh? and bang! notation.
const!(str)(char[]) capitalize(const?(char[]) str) { ... }
So the second huh?const declares mimic const type and the first bang!const
extracts constness from parameter and applies it to the return type.
* return type explicitly indicates what it does.
* optional const and inheriting const are different independent entities.
Case 2. We need only const-extraction operator... pseudo-operator?
const!(str)(char[]) capitalize(const!(str)(char[]) str) { ... }
Constness of parameter gets equal to constness of argument!
* two operations reduced to one
* more context-independent.
Case 3. Quantum const.
const?(char[]) capitalize(const?(char[]) s) { ... }
Like huh?const, but all of them from the same signature enter entangled state
(with indefinite constness) and trigger simultaneously (constness gets
determined) on function call (interaction with with the world). This rationale
came from quantum mechanics :)))
* possibly a third flavor of const
* extension on invariant can be done also in terms of quantum mechanics: just
say const? can take 3 values: mutable, const and invariant, but its value is
indefinite until function call.
* D will be as complicated as quantum mechanics is. Joke.
P.S. this can be easily extended for member functions
const(char[]) capitalize() return const
const!(this)(char[]) capitalize() //no huh?const because this is already
huh?const
const!(this)(char[]) capitalize() //the same for operator form
const?(char[]) capitalize() const? //or we can also deem this as
quantum-consted (of indefinite constness).
Oct 06 2008
ore-sama Wrote:I wanted to use const system, but the kitchen sink syndrome SUDDENLY killed me :( There is return storage class attribute const(char[]) capitalize(return const(char[]) s) { ... }What about the following? return(char[]) capitalize(return(char[]) s){ ... } It's shorter, supports both const and invariant, and is clear when looking at the return typebut it's not very intuitive: surprisingly return type is NOT what it looks like and one have to read the entire signature to figure out that the return type is not really const. Rather than that we want here one parameter with *optional* constness and return type *inheriting* this constness and these tend to be deemed as *two* different, though related, operations. And as Bill Baxter pointed out ( http://d.puremagic.com/issues/show_bug.cgi?id=2094#c9 ) we would like to extend it to invariant inheritance. So this gets a little more complicated than mere attribute. So a few proposals from me. Case 1. Straight-forward approach. Huh? and bang! notation. const!(str)(char[]) capitalize(const?(char[]) str) { ... } So the second huh?const declares mimic const type and the first bang!const extracts constness from parameter and applies it to the return type. * return type explicitly indicates what it does. * optional const and inheriting const are different independent entities. Case 2. We need only const-extraction operator... pseudo-operator? const!(str)(char[]) capitalize(const!(str)(char[]) str) { ... } Constness of parameter gets equal to constness of argument! * two operations reduced to one * more context-independent. Case 3. Quantum const. const?(char[]) capitalize(const?(char[]) s) { ... } Like huh?const, but all of them from the same signature enter entangled state (with indefinite constness) and trigger simultaneously (constness gets determined) on function call (interaction with with the world). This rationale came from quantum mechanics :))) * possibly a third flavor of const * extension on invariant can be done also in terms of quantum mechanics: just say const? can take 3 values: mutable, const and invariant, but its value is indefinite until function call. * D will be as complicated as quantum mechanics is. Joke. P.S. this can be easily extended for member functions const(char[]) capitalize() return const const!(this)(char[]) capitalize() //no huh?const because this is already huh?const const!(this)(char[]) capitalize() //the same for operator form const?(char[]) capitalize() const? //or we can also deem this as quantum-consted (of indefinite constness).
Oct 06 2008
On Tue, 07 Oct 2008 03:41:30 +0400, Jason House <jason.james.house gmail.com> wrote:ore-sama Wrote:Other suggestion: sameconst(char[]) capitalize(sameconst(char[]) s){ ... } or just: same(char[]) capitalize(same(char[]) s){ ... } // this one is even shorter! It says that both input and output parameters have same constness.I wanted to use const system, but the kitchen sink syndrome SUDDENLY killed me :( There is return storage class attribute const(char[]) capitalize(return const(char[]) s) { ... }What about the following? return(char[]) capitalize(return(char[]) s){ ... } It's shorter, supports both const and invariant, and is clear when looking at the return type
Oct 06 2008








"Denis Koroskin" <2korden gmail.com>