Five Projects Selected for SAOC 2019
Gregor Mückl
gregormueckl at gmx.de
Wed Aug 28 14:09:48 UTC 2019
On Monday, 26 August 2019 at 11:03:51 UTC, Jacob Carlborg wrote:
> On 2019-08-26 05:55, Andrej Mitrovic wrote:
>
>> I'm guessing this means we might even be able to use multiple
>> versions of Phobos one day. However before we do that, we will
>> really need to fix the use of globals in Phobos.
>
> I don't think that's necessary. All symbols will have the
> version be part of the mangled name.
Hm... this approach has a few scenarios where I imagine that it
fails in weird ways:
- resources that can be initialized only once that are
encapsulated in a library: e.g. two versions of a logging library
that write to the same file and recreate the file during
initialization. On Windows, opening the same file for writing
again might fail. On Linux, it would replace the existing inode
entry for the file while both library instances continue to
happily write to their instance of the file.
- violating implicit expectations about relationships between
dependencies; for example, consider two libraries libFoo and
libBar working on data structures defined in a libCore. An
application uses all three of them and passes pointers to libCore
data structures to functions in libFoo and libBar. Recently,
libFoo and libCore have been updated and the libCore data
structures changed. The libBar update is not done yet. So if
libBar is built with its own private copy of the old libCore,
expectations about structure memory layouts are out of whack. If
something like that compiles and links, it's likely going to be
nearly impossible to debug.
The thing is that the resulting failure cases are likely
surprising, not obvious and therefore hard to debug. If you want
to do this, it should be optional and require explicit opt-in
from all dependencies in a chain. Libraries have to be designed
in very specific ways to make this work and these restrictions
would be new to the D ecosystem.
More information about the Digitalmars-d-announce
mailing list