Hacker News new | ask | show | jobs
by layer8 334 days ago
What if you use two libraries A and B that both happen to use library C under the hood? Is the application expected to initialize all dependencies in the right order at the top level? Or is library initialization supposed to be idempotent?

This all works as long as libraries are “flat”, but doesn’t scale very well once libraries are built on top of each other and want to hide implementation details.

1 comments

The call to init should be idempotent
That can be difficult in a multi-threaded environment with dynamically loaded shared libraries. Or at least it isn’t something that’s generally expected to be guaranteed to work.
C++ "magic statics" handle that use case (but with hidden atomic flag load (& more) costs at each access)
Ideally they would do the explicit init at startup before starting threads