On 2010-12-14 21:44, Nick Sabalausky wrote:
"Jacob Carlborg"<[email protected]> wrote in message
news:[email protected]...
On 2010-12-14 19:13, Nick Sabalausky wrote:
"Graham St Jack"<[email protected]> wrote in message
news:[email protected]...
What you are suggesting here seems to be a way to dramatically reduce
the
complexity of code that generates source-code and mixes it in. I think
something like that is needed before this mind-bogglingly powerful
feature
of D can realise its potential.
I think a decent string-template library could probably come very close
to
the proposal without needing any language changes at all:
string get_set(T, string name)()
{
return
q{
@type _...@name;
@type @name ()
{
return _...@name;
}
@type @name (@type @name)
{
return _...@name = @name;
}
}.replace( ["@type": T.stringof, "@name": name] );
}
class Foo
{
mixin(get_set!(int, "bar")());
}
There are definitely some things about the proposal that are better than
with this, but I just wanted to point out that the value of the proposal
should probably be evaluated against something roughly like the above
rather
than something that does a bunch of procedural string splicing.
The whole point of the idea was to get rid of the strings and the mixin
expression (as it looks like to day).
While I'm not necessarily opposed to the idea of getting rid of the strings,
I guess I don't really see what improvement your proposal provides other
than not having to manually specify the mapping of "replace what identifier
with what data".
Getting rid of the "mixin" I see as a separate issue. We could just as
easily say that given the function "string get_set(...)":
@get_set("int", "bar");
or
@get_set int bar;
...Is shorthand for, or is even the new syntax for:
mixin(get_set("int", "bar"));
That was my idea as well, that
@get_set("int", "bar");
could be translated into
mixin(get_set("int", "bar")); just like
just like scope statements are translated into try/catch/finally.
--
/Jacob Carlborg