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