On Thursday, 27 September 2012 at 17:10:07 UTC, Jacob Carlborg
wrote:
On 2012-09-27 10:55, Maxim Fomin wrote:
On Thursday, 27 September 2012 at 08:26:08 UTC, Jacob Carlborg
wrote:
1. Does this actually run?
If it were non-runnable, I wouldn't posted it.
2. This is statically linked with druntime and Phobos. What
happens
when you create an executable that links with the D dynamic
library?
Solution depends on a problem. I understood Andrei's post that
he wanted
a .so file or DLL. I told originally that it is possible to
make shared
libraries on linux. Now I see there is some misunderstanding.
Is the
problem in diving D application on executables and shared
libraries or
making druntime+phobos a shared library or loading a library
at runtime?
A was speaking about the first.
Actually, I seriously doubt everything is working as expected.
For example, what happens when an application loads (via dlopen
or similar) a D dynamic library:
* Are exception handlers registered
* Are module infos properly registered
* What happens if I call Object.factory, will that find a class
in the dynamic library
* Are GC sections registered
* What happens when the library is unloaded, will all of the
above be unregistered and cleaned up
A quick look in rt.minfo in druntime shows the it uses a single
array or linked list for all module infos. It expect the module
infos to be in just one place, i.e. in the application. There's
no handling when a dynamic library is loaded.
Have a look at this:
https://github.com/D-Programming-Language/druntime/blob/master/src/rt/minfo.d#L184
That symbol points to the start of the linked list containing
module infos. That's only a single linked list, no handling of
module infos from multiple places.
rt.minfo needs to be changed to use an associative array with
the keys pointing to images (executables and loaded dynamic
libraries) and the values mapped to module infos of the given
image. It also needs to intercept when a library is dynamically
loaded, extract the module infos and register it with the
runtime.
I would think that the same is true for exception handling
tables, TLS and GC sections.
Posted code doesn't load libraries at runtime, it is just linked
to shared libraries.