Git, the D package manager
Dicebot via Digitalmars-d
digitalmars-d at puremagic.com
Mon Feb 2 06:40:57 PST 2015
Quick summary of my opinion can look like this:
1) dub is a horrible build tool
2) git submodules is a horrible way for dependency management
First thing is something we can improve on in future and,
actually, dub supports using rdmd as a build tool already.
Second thing is an inherent issue that won't change without some
fundamental breaking changes in how hit submodules are
implemented.
Because of that I am trying to push dub despite the fact I don't
like lot of things about it personally.
----------------------------------------
Explaining why dub is a horrible build tool is hardly necessary -
there are plenty of cases in this thread already.
So why git submodules don't really work?
1) Lack of version management
submodule remembers specific commit hash and that is all. As of
recent git version one can also remember remote tracking branch
(but it will still keep specific hash in history!)
This may not seem an issue if you have only few dependencies and
control them all. But it scales badly once bulding the project
needs many incompatible versions of the same dependency and
dependency count increases in general.
2) Lack of local cache
This is really annoying when working with many project with
similar dependencies - those will get cloned over and over again,
taking quite some time. Can possibly be fixed with clever scripts
that replace remotes with local repo paths but that is not
out-of-the box solution
3) Lack of package repository
Biggest thing about dub is not dub tool itself. It is
code.dlang.org and what it can become in future. Providing simple
centralized way to discover new libraries and quickly try those
in uniform matter is the way you build decentralized ecosystem
(ironically).
With git submodules you are pretty much stick with doing GitHub
search over and over again
4) Inherently coupled with specific DVCS
git and GitHub are most common (and officially endorsed) ways of
version control in D world but those are not the only one. dub
registry allows to use GitHub, GitBucket and source tarball
packages in the same project - in simple uniform matter. It is a
100% in-house tool that does no depend on decisions of external
project maintainers that provides a common API for everything
else to interoperate
More information about the Digitalmars-d
mailing list