D Library Breakage
Jonathan Marler
johnnymarler at gmail.com
Fri Apr 13 23:00:20 UTC 2018
On Friday, 13 April 2018 at 22:29:25 UTC, Steven Schveighoffer
wrote:
> On 4/13/18 5:57 PM, Jonathan M Davis wrote:
>> On Friday, April 13, 2018 16:15:21 Steven Schveighoffer via
>> Digitalmars-d
>
>>> I don't know if the compiler can determine if a version
>>> statement
>>> affects the layout, I suppose it could, but it would have to
>>> compile
>>> both with and without the version to see. It's probably an
>>> intractable
>>> problem.
>>
>> Also, does it really matter? If there's a mismatch, then
>> you'll get a linker
>> error, so it's not like you're going to get subtle bugs out of
>> the deal or
>> anything like that. I don't see why detection is an issue here.
>
> Well, for layout changes, there is no linker error. It's just
> one version of the code thinks the layout is one way, and
> another version thinks it's another way. This is definitely
> bad, and causes memory corruption errors.
>
> But I don't think it's a problem we can "solve" exactly.
>
> -Steve
@JonathanDavis, the original post goes through an example where
you won't get a compile-time or link-time error...it results in a
very bad runtime stack stomp.
@Steven You're just addressing the example I gave and not
thinking of all the other ways version (or other compiler flags)
could change things. For example, you could have version code
inside a template that changes mangling because it is no longer
inferred to be pure/safe/whatever.
The point is, this is a solvable problem. All we need to do is
save the compiler configuration (i.e. versions/special flags that
affects compilation) used when compiling a library and use that
information when we are interpreting the module's source as as an
"pre-compiled import". Interpreting a module with a different
version than was compiled can create any error you can possibly
come up with and could manifest at any time (i.e. compile-time,
link time, runtime).
The jist is that if we don't solve this, then it's up to the
applications to use the same versions that were used to compile
all their pre-compiled D libraries...and if they don't...all bets
are off. They could run into any error at any time and the
compiler/type system can't help them.
More information about the Digitalmars-d
mailing list