Am Sat, 09 Nov 2013 12:21:30 +0100
schrieb "Dicebot" <pub...@dicebot.lv>:

> Some comments on general packaging topic.
> 
> On Saturday, 9 November 2013 at 00:38:16 UTC, Marco Leise wrote:
> > - Compiler and library are closely coupled and depend on each
> >   other.
> 
> Not really true, it is straightforward to write an alternative 
> druntime / stdlib substitution to use with existing compiler 
> package.

Yeah, I was pointing at the lock-step upgrade nature of D
development. You can't really update one without the other
when it comes to every day package management.

> > - Each new D point release brings a new, generally
> >   incompatible standard library.
> > - All three major compiler backends are in good shape and use.
> >   But their generated code is not exchangeable (as far as
> >   I've heard due to ABI differences).
> 
> Yes, ABI is the key issue that makes 3 major compiler ecosystems 
> not interchangeable in any way. And it is not likely to be fixed 
> any time soon.
> 
> > - Tools tend to expect that "dmd" is available as a command.
> 
> Actually I don't think this is true for newer ones. There are 
> plenty that tend to either use `rdmd` or detect compiler present 
> in the system.

Good, the only thing that might go wrong then is alternate
binary names or install locations.

> > To deal with the complexity of package dependency management
> > in this scenario, we need to be able to install multiple
> > versions of D compilers in parallel (similar to what dvm does).
> > This can be accomplished by so called "slots" for each point
> > release. We can do this for all three compilers and will end
> > up with binaries like "dmd2.064" and "gdc2.063".
> 
> I have been thinking about it when doing Arch packaging but 
> discarded that approach as not KISS. All maintained applications 
> support either latest compiler version or previous one. Rare 
> cases when legacy version is needed are covered by dvm. In that 
> sense pure bleeding edge model suits D realities most and only 
> separation between dmd/ldc/gdc is needed.

Your experience is welcome! Does D1 have a place in that
model? And what does really happen when you work with e.g.
dmd-2.065 and found a D application in the tree that hasn't
been updated for a few weeks, so it still requires 2.064?
It would more or less mean that the whole D package system
would have to be updated in one go, when all packages are
updated to the latest D version, which can take a while.

> > Next a symlink should be established to the current
> > implementation of dmd, e.g.: /bin/dmd -> /bin/ldmd2.
> > This symlink could be managed with an eselect plugin as it is
> > already done for other languages like Python or the Java
> > Runtime.
> 
> And what if one wants to have all 3 simultaneously?

You call them by their real names. :)

-- 
Marco

Reply via email to