[D-runtime] druntime should be a shared library/DLL
Walter Bright
walter at digitalmars.com
Tue Mar 5 13:58:07 PST 2013
On 3/5/2013 12:01 PM, Rainer Schuetze wrote:
> On 05.03.2013 15:50, Walter Bright wrote:
>>
>> On 3/1/2013 9:38 AM, Rainer Schuetze wrote:
>>> IMO using the import functionality of "export" to support data imports
>>> through the import table is not an option as it pollutes the code (you
>>> might even need two different sources when building against a shared
>>> or static library) and introduces restrictions (like not being able to
>>> use the address of an imported symbol in static data initializers).
>>> That's why I am following the idea to patch code to refer to data in
>>> the shared library.
>>>
>>>
>>> - Is there something wrong with the whole concept?
>>
>> Yes. I'd just stick with the way DLL imports are designed to work, which
>> is the extra level of indirection, and just deal with any restrictions
>> that come out of that.
>
> I don't think it's a good idea to cripple the language for a nuisance by an
> underpowered linking mechanism. E.g. not being able to use the same static
> initializers as when linking statically would be annoying. To avoid that in
> C/C++ runtime initializer functions are created (they do anything else than
> the proposed patching).
>
> How do you want to deal with references to data objects from code? Annotate
> everything with "export" (which is an "import" depending on whether an
> initializer follows or not)? That will break the use of the same code for
> static libraries as the "_imp_" symbols will be missing.
That's what the "export" protection level was designed for. (It'll serve both
purposes, no need for import as well.)
>
> The only option I see is to use indirections for all data accesses, with the
> data pointer being in the import table or elsewhere. That might be causing
> linker problems, but at least that seems feasible at the cost of some runtime
> performance loss.
I think on Windows that people are used to having a different interface when
crossing DLL boundaries. Me, I think it's a terrible user code design to pass
global data that way.
More information about the D-runtime
mailing list