On Mon, Nov 9, 2009 at 3:56 AM, William Leslie
<[email protected]> wrote:
> The
> problem is that the template has to be /included/ in any using code.
> This means that two compilation units that use minimum<int> will each
> have their own instance of it.

This is an artifact of stale linker technology. It it true in most
current implementations, but it is not *essentially* true, and some
compilation systems (including, I was surprised to find, Microsoft's)
can mitigate this using things like link-time code generation.

The real reason ML can routinely do better on this is that all types
in ML are reference types. I don't think that you want to pay that
extra indirection cost.

We came up with a nice link-time solution (would also work at dynamic
link time) for BitC, but we ran out of time before we could implement
it.

> Worse, because you
> can't put them into a library and have template parameters resolved at
> link time, changes to templates require rebuilding all the code that
> uses them.  It's a very inconvenient way to achieve code reuse IMHO.

This is also true when you add a field to a structure; anything that
changes the signature forces a recompile. It's not a template problem
in particular. But you are right that templates add a new and
unfortunate twist: having no types, it is very hard for the compiler
to analyze the impact of changes to them.

Jonathan


Reply via email to