New syntax for string mixins
Nick Sabalausky
a at a.a
Tue Dec 14 12:44:49 PST 2010
"Jacob Carlborg" <doob at me.com> wrote in message
news:ie8i8c$15f0$1 at digitalmars.com...
> On 2010-12-14 19:13, Nick Sabalausky wrote:
>> "Graham St Jack"<Graham.StJack at internode.on.net> wrote in message
>> news:ie76ig$b2v$1 at digitalmars.com...
>>>
>>> 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 _ at name;
>>
>> @type @name ()
>> {
>> return _ at name;
>> }
>>
>> @type @name (@type @name)
>> {
>> return _ at 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"));
More information about the Digitalmars-d
mailing list