Re: Any hopes for export ?
Mathias Gaunard wrote:
On Aug 13, 3:20 pm, Walter Bright <newshou...@digitalmars.com> wrote:
As I recall, I pointed out that exported templates offered no fundamental
technical advantage over precompiled headers in the speed department.
PCH were
an existing technology that did produce substantially faster compiles
(at least
with Digital Mars C++ they did), though I do not know how widely PCH was
implemented.
Export template is quite easier and nicer to use and deploy than PCH.
Perhaps, but PCH speeds up everything else in the header files, not just templates.
Personally, I don't understand what's so hard with implementing link-
time template instantiation when you already have PCH. You already
have support for serializing/deserializing your AST to/from an
efficient binary form. All you need to do is embed that data in the
object files (ELF objects shouldn't have any problem with this), then,
before you call the linker, join all that data, and use it to
instantiate and generate code for whatever type an export template was
instantiated with.
But then, I'm not a compiler writer; maybe there are issues with
actually finding what to serialize in the first place.
It's not just the AST. You've also got the symbol table from the file with the
template definition to deal with. (PCHs tend to be quite large, on the order of
megabytes even for smallish headers. Imagine that stuffed into each object
file! Normally, PCH are written once per project, and read once per source file.
With this scheme for exported templates, they are read twice and written once
per source file.)
The real solution is to implement a proper module system for C++. The proof of
that is D's experience with it. D doesn't have any special need for exported
templates, as it is implicitly part of the module system. Just:
import name;
and you're done. Modules are hygienic and fast.
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]