A modest proposal: eliminate template code bloat
Dmitry Olshansky
dmitry.olsh at gmail.com
Sun Apr 8 09:30:24 PDT 2012
On 08.04.2012 19:59, Artur Skawina wrote:
> On 04/08/12 17:20, Dmitry Olshansky wrote:
>> On 08.04.2012 18:21, Artur Skawina wrote:
>>> On 04/08/12 13:01, Dmitry Olshansky wrote:
>>>> 3. After any function was generated compiler checks an entry in the duplicate table that matches size, followed by matching checksum and only then (if required) doing a straight memcmp. If it happens that there is a match compiler just throws generated code away and _aliases_ it's symbol to that of a matched entry.
>>>> (so there has to be an alias table if there isn't one already)
>>> [...]
>>>> Thoughts?
>>>
>>> Don't forget that this needs to work:
>>>
>>> static auto f(T)(T a) { return a; }
>>> assert(cast(void*)&f!int!=cast(void*)&f!uint);
>
>> A reference to spec page plz.
>
> A reference to *a* D spec, please...
Yeah, sorry.
>
> There isn't one, but that does not mean that common sense does
> not need to apply.
>
There is common sense and that is (in my book):
don't tie up compiler's hands for no benefit.
> Do you really suggest making different template instantiations
> identical, just because the compiler happened to emit the same
> code? The situation is not very different from
>
> const int a = 1; const uint b = 1; assert(&a!=&b);
>
I wouldn't expect this assert to always hold. Moreover (all things being
equal) I would expect taking address of constant integers a poor practice.
> The user can take the addresses, compare them, use as AA keys,
> set breakpoints etc.
>
Yes, that's what I call poor practice ( I mean function pointer as AA
_key_, seriously?). As for breakpoints, obviously one debugs
non-optimized program (at least most of the time).
> Note that my point is just that the compiler needs to emit a dummy
> so that the addresses remain unique, eg
>
> module.f!uint:
> jmp module.f!int
Could work as a conservative option. But I don't think it's justified.
>
> that only is used when taking the address. Even calling f!int()
> instead of the uint version could be acceptable, as long as there
> is a compiler option to turn this optimization off (think breakpoints).
>
Yup, that's what optimizations are.
--
Dmitry Olshansky
More information about the Digitalmars-d
mailing list