Am Tue, 11 Apr 2017 07:40:12 -0700 schrieb Jonathan M Davis via Digitalmars-d <digitalmars-d@puremagic.com>:
> It could always just be distributed as a static library. There arguably > isn't much point in distributing it as a shared library anyway - > particularly when it's not ABI compatible across versions. I actively avoid > having phobos as a shared library on my systems, because it just causes > versioning problems when programs are built against it. All of those > problems go away with a static library. And so much of Phobos is templated > anyway that there isn't even much to share. > > - Jonathan M Davis I see what you're doing there, but your last point is wishful thinking. Dynamically linked binaries can share megabytes of code. Even Phobos - although heavily templated - has proven to be very amenable to sharing. For example, a "Hello world!" program using `writeln()` has these sizes when compiled with `dmd -O -release -inline`: static Phobos2 : 806968 bytes dynamic Phobos2 : 18552 bytes That's about 770 KiB to share or 97.7% of its total size! Awesome! Another package we have on Gentoo now is the tiling terminal emulator Tilix, compiled with its default `dmd -O`: static Phobos2+GtkD : 14828272 bytes dynamic Phobos2+GtkD : 6126464 bytes So here we get ~8.3 megabytes in binary size reduction due to sharing. (Though 6 MiB for a terminal is still a lot - are we slim yet? :P ) Some forms of proprietary code and GPL code need clean shared library interfaces, free from templates and attribute inference. I mentioned this before: As far as feasible have full attribute inference for non-exported functions and reliance on only explicit attributes for exported functions, so that code changes can't break the public API (due to mangling changes). When Dlang's ABI changes, release a major version and make a public announcement so that everyone can schedule the system update to a convenient time as is done with GCC C++ ABI changes. -- Marco