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

Sean Kelly sean at f4.ca
Thu Jul 13 14:37:15 PDT 2006


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.


Sean



More information about the Digitalmars-d mailing list