Criteria for 1.0 (was: Re: If D becomes a failure, what's the key reason, do you think?)

Georg Wrede georg.wrede at nospam.org
Thu Jul 13 23:39:51 PDT 2006


Sean Kelly wrote:
> Dave wrote:
> 
>> Sean Kelly wrote:
>>
>>> Kirk McDonald wrote:
>>>
>>>> Walter Bright wrote:
>>>>
>>>>> Kirk McDonald wrote:
>>>>>
>>>>>> Here's something that has been annoying me, and this week-old 
>>>>>> thread is as good a place as any to bring it up: Shared library 
>>>>>> support on Linux. I could not take D seriously if it did a "1.0" 
>>>>>> release without this. I do hate to cram more on your plate, 
>>>>>> Walter, but I consider this a more serious issue than even this 
>>>>>> import thing that has gripped the newsgroup for the past week.
>>>>>
>>>>>
>>>>>
>>>>> I know about the shared library issue on Linux. And to tell the 
>>>>> truth, I've been procrastinating on it. The big job, -fPIC, is 
>>>>> done. I don't know how much beyond that needs to be done.
>>>>>
>>>>> Will the shared libraries work with GDC?
>>>>
>>>>
>>>> Ha! Well, at least this simple case does:
>>>>
>>>> [myso2.d]
>>>> import std.stdio;
>>>>
>>>> export extern(C)
>>>> void mysoprint() { writefln("Hello 'so' world!"); }
>>>>
>>>> [myso.d]
>>>> export extern(C) void mysoprint();
>>>>
>>>> [test.d]
>>>> import myso;
>>>>
>>>> void main() {
>>>>     mysoprint();
>>>> }
>>>>
>>>> $ gdc -shared -Wl,-soname,libmyso.so -o libmyso.so myso2.o -lc
>>>> /usr/bin/ld: warning: creating a DT_TEXTREL in object.
>>>>
>>>> (Not sure what that means...)
>>>>
>>>> $ sudo cp libmyso.so /usr/lib
>>>> $ gdc -c test.d
>>>> $ gdc test.o -Wl,-lmyso -o test
>>>> $ ./test
>>>> Hello 'so' world!
>>>>
>>>> Sweet. However, I am a little concerned. When making DLLs on 
>>>> Windows, there is some boilerplate code needed to initialize and 
>>>> shut down the GC and do some other routine things. Is something like 
>>>> that needed here?
>>>
>>>
>>> I think it is.  Perhaps the best approach would be to expose two 
>>> extern (C) functions: one for startup and one for shutdown.  By 
>>> default, these would be called automatically by internal/dmain2, but 
>>> the user could opt to call them in DllInit or whatever if he knows 
>>> that function will not be the entry point for his program.  In Ares, 
>>> I'd probably call these "cr_init" and "cr_term" where "cr" means 
>>> "compiler runtime."
>>>
>>
>> Could these be exposed to be the same on both platforms? If so that 
>> would be great.
> 
> 
> Yup.  It would be a trivial change to internal/dmain2.  I'll probably do 
> it in Ares in the next few days, just to have it as an option.

This not being my specialty, I have to ask the dumb question:

does all this mean that

  - helloworld could be only a few kB

  - on a machine where D programs are run almost continuously, the 
startup time of a D app would be vastly quicker

  - total memory consumption of the D programs would be much reduced

And on the other hand, (almost) every time a new DMD comes out, one 
would have to recompile the .so files? And therefore the apps too?



More information about the Digitalmars-d mailing list