Status of the D ABI

Wolfgang Draxinger wdraxinger at darkstargames.de
Sat Jul 15 06:48:25 PDT 2006


I just came back to http://www.digitalmars.com/d/abi.html and
saw, that there have been no recent changes. I wonder, if this
is the current state or if there has been further development on
the topic.

If not I'd like to make a few suggestions

Describe memory offsets in multiples of the plattforms native
pointer size (i.e. sizeof(ptrsize_t)). Currently the ABI is
limited to 32 bit. (One might double the sizes implicitly for 64
bit plattforms).

Separate the ABI in Compile Level and Link Level.
The Compile Level operates on the alignment of data within memory
and the data transfer methods within a compilation object.
The Link Level however should be coupled to the output format
(COFF, ELF, $whatever). IMHO it makes sense so describe Link
Level ABI for different object formats.
E.g. the component system I've developed for my engine, called
ECS, similair to DDL, stores the properties of code objects in a
hierachical, EMBF like (EMBF a binary XML counterpart) structure
without elude to name mangling and other tricks. Since ECS
provides a sound set of the runtime code that would otherwise
call statical constructors (and module inits) it also conflicts
a bit with parts of any ABI that would force strict rules on
that topic. Since static constructor calling and module
initialization is part of the Link Level, logically put it
there. Link systems that differ from the usual ELF/PE/COFF will
not by inflicted that way.

Currently declaring a class $xxx implicitly instanciates a
Class$xxx, StaticClass$xxx and an instance that names
Static$xxx. I wonder if there could be a less namespace
polluting solution to that. Maybe somee new properties on the
modulespace?

I'm nearly done converting all the C++ source code of my 3D
engine to D. Where converting means: "puting nearly 20% of the
code to /dev/null". I just love D!!!

-- 
Wolfgang Draxinger




More information about the Digitalmars-d mailing list