Poll: Primary D version
Walter Bright
newshound1 at digitalmars.com
Sun May 23 00:34:04 PDT 2010
bearophile wrote:
> Walter Bright:
>> 1. D has to work with the corresponding C compiler, which does not support
>> such a memory model. This kills it right there.
>
> But the 'need' to do it can "resurrect" this feature from the dead. Sometimes
> you just need to do something, even such thing was not seen as "possible" in
> the past.
>
> The Oracle JavaVM is already using this optimization, but indeed it doesn't
> need to keep compatibility with the C compiler. This shows pointer
> compression in C and the like:
> http://llvm.org/pubs/2005-06-12-MSP-PointerComp.html
>
> Even if pointer compression can cause problems at the interface between C and
> D, there can be ways to decompress pointers when they are given to C
> libraries. So you can perform more efficient computations inside D code, and
> adapt (inflate) your pointers when they are needed for processing inside C
> code.
>
> There are things (like pointer compression, de-virtualization, dynamic
> decompilation, and so on) that future C-class languages can find useful to do
> that C compilers ten years ago didn't even think possible. Things are not set
> in stone, there's change too. Don't kill an idea just because it was kind of
> impossible (and probably kind of useless too) fifteen years ago.
The paper describes an automatic way to do what I'd suggested previously -
replacing the pointers with offsets from a base pointer. This is a lot like how
the 'far' memory model in 16 bit code worked. Doing it in an automated way
requires whole program analysis, something not entirely practical in a language
designed to support separate compilation.
On the other hand, D has plenty of abstraction abilities to make this doable by
hand for selected data structures.
More information about the Digitalmars-d
mailing list