Thanks for the explanation! So virtual function calls are kept to the
absolute theoretical minimum, that's very good to know.

In my case I have one crate for some "infrastructure" and another crate for
the "application" using it (there would be several of these). I guess
having two copies isn't that bad.


On Fri, Nov 15, 2013 at 2:30 PM, Daniel Micay <danielmi...@gmail.com> wrote:

> On Fri, Nov 15, 2013 at 6:54 AM, Oren Ben-Kiki <o...@ben-kiki.org> wrote:
> >
> > That would be awesome, if it were true; it is quite a trick to pull that
> off
> > when the default methods are implemented in a different crate. Can
> someone
> > provide an authoritative answer on this?
> >
> > Also, C++ faces the problem of providing a single copy of monomorphised
> > functions (for templates). This is done during the link phase and AFAIK
> is
> > one of the causes of C++ links taking a painfully long time. Will Rust
> > suffer from the same problem?
>
> Rust serializes any generic or inline functions to an AST stored in
> the crate metadata and will re-compile them as-needed per-crate.
>
> In both Rust and C++, you end up with one copy of these at runtime for
> each dynamically linked shared object. With C++ templates, the linker
> or link-time optimization discards duplicate instantiations across
> compilation units.
>
> Rust doesn't have compilation units smaller than a crate so there is
> no equivalent functionality. If you use crates as compilation units to
> make compiles incremental/parallel, the situation is much worse than
> C++ as you'll have many duplicates and they won't even go away with
> link-time optimization until `mergefunc` works.
>
> There's almost no point in doing anything but a massive crate at this
> point...
>
_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to