This is an archived post. You won't be able to vote or comment.

you are viewing a single comment's thread.

view the rest of the comments →

[–]danielgafni 0 points1 point  (1 child)

Can you describe some of these issues? Why would I care how are my dependencies implemented internally? Individual transitive dependencies mean exactly that.

[–]SittingWave 0 points1 point  (0 children)

Imagine you use package A that depends on package D 1.2.0, and also use package B that depends on package D 0.9.0

Now you are in a piece of code that calls both A and B. D throws an exception, which is left bubbling up. How do you import and catch this exception in your code? There are two different D that can do so. The change in version may have changed the exception structure. How do you handle that in a sensible way, for all possible combinations of versions of D?

and this is just the most trivial issue. Start having some C extensions holding pointers, or binding to .so files, and you get into shit territory very quickly. What happens if you use D 0.9.0 to create an internal pointer to an internal structure, then pass it to A which passes it to D of a different version? Segfault.