On Thu, 22 Dec 2011 12:03:13 +0100, Jonathan M Davis <jmdavisp...@gmx.com>
wrote:
On Thursday, December 22, 2011 02:12:31 Walter Bright wrote:
Timezone information is not necessary to measure elapsed time or
relative
time, for example.
The type requires it though. No, comparison doesn't require the time
zone, but
many (most?) of the other operations do. And the type can't be separated
from
the time zone. That's part of the whole point of how SysTime is
designed. It
holds its time internally in UTC and then uses the time zone to adjust
the
time whenever a property or other function is used which requires the
time in
that time zone. That way, you avoid all of the issues and bugs that
result
from converting the time. The cost of that is that you can't not have a
time
zone and use SysTime. So, if someone cares about saving that little bit
of
extra size in their executable by not using the time zone, they're going
to
have to use the C functions or design their own time code.
Can it be added with PIMPL? PIMPL is good for more than just information
hiding, it can also be a fine way to avoid pulling in things unless they
are actually dynamically used (as opposed to pulling them in if they are
statically referenced).
I don't follow you. You mean use PIMPL for the time zone? I haven't a
clue how
you're going to do PIMPL without .di files, and Phobos doesn't use .di
files
(and arguably _can't_, because it would destroy inlining and CTFE). Not
to
mention, PIMPL would make SysTime less efficient, because in order to
avoid
needing to know what the functions are on a TimeZone, you'd have to hide
the
bodies of a number of SysTime's functions, which would disallow inlining
and
CTFE (not that CTFE is terribly likely to be used with SysTime, but
inlining
could be very important). You'd be losing efficiency of execution just
to save a
few KB in the executable.
Rearranging stuff to save some size in the executable without costing
efficiency
is one thing, but if it's going to cost efficiency, then I'm generally
going to
be against it.
I recently pimpled the core.thread module.
https://github.com/dawgfoto/druntime/commit/4626c20b66a647a497b9086b104e10ea89cfef02
The compiler is not really your friend here, e.g. it requires to compile
the
implementation separately. But if your type is already used by reference
then
this is a good option to reduce coupling and improve ABI stability.
Are you sure that inlining is a performance issue?
Please check and see if additional symbols are pulled in or not. I've
seen a
lot of template code where the author of that code never checked and was
surprised at the instantiations that were happening that he overlooked.
Nothing would pull in toCustomString or fromCustomString in unless the
user
decided to call them, because they're templated and no other functions in
Phobos are going to use them at this point (if ever). What exactly will
be
pulled in when they _are_ called, I don't know, because they're not
completed
yet. It probably wouldn't be much though, since toCustomString is
basically a
fancy toString. But there's a good chance that it's stuff that's already
being
pulled in for the standard string functions (e.g. toISOExtString).
- Jonathan M Davis