Idea: limited template expansion
Steven Schveighoffer via Digitalmars-d
digitalmars-d at puremagic.com
Thu Jan 21 07:53:35 PST 2016
On 1/21/16 10:02 AM, David Nadlinger wrote:
> On Thursday, 21 January 2016 at 13:36:28 UTC, Steven Schveighoffer wrote:
>> On 1/20/16 6:01 PM, David Nadlinger wrote:
>>> How would the client code be simpler with a built-in language feature?
>>
>> The use case I have in mind is a parser, let's say an xml parser.
>>
>> […]
>
> I still don't see how a language feature as described in your first post
> would make this any easier than using a template for that exact purpose
> (switching between methods to call).
It may not be an "easier" thing to have the compiler do this instead of
the user, but conceptually to me it reads better. One can write foreach
loops as for loops also, it's not really hard. Yet foreach loops read
and write better conceptually than a for loop. And the boilerplate is
cut down significantly.
I'm simply trying to get rid of the boiler plate that one would need for
such a thing. And I'm wondering if this is a unique situation for my use
case, or if there are other use cases. If it's just for this one case,
it's likely not worth exploring a modification to the language.
>
> If what you are trying to say is that you want the different template
> function instantiations to return incompatible types in addition to
> that, the feature from your initial post won't help you there either.
> Values can't have different types in non-template code, so you'd
> necessarily need to make the client code a template too. Streamlining
> the runtime -> compile time value dispatch process (as shown in your
> initial example) doesn't change the fact that the type of a given value
> cannot be influenced by runtime decisions.
The client code would be a template. Essentially, the compiler would
rewrite the block as a template function and call the appropriate one.
But the code itself would look like an inline block.
-Steve
More information about the Digitalmars-d
mailing list