On Tuesday, 26 August 2014 at 22:07:49 UTC, Jeremy Powers via
Digitalmars-d wrote:
If your users are having to install things then the problem
is your
deployment mechanism not the JVM dependency hell system. Java
deployments are actually really quite easy. Either you
package a total
system with all dependencies and provide entry scripts, or
you use Maven
Central (or increasingly BinTray) for accessing dependencies.
If I need deployment mechanisms like the ones above, then
there's
something wrong with the language. All these crutches and
patches. To set
up and test a deployment mechanism takes as long as writing
the program. No
thank you.
This is what you get with shared libraries. If you don't want
to deal with
dependencies, either A) ship a static-linked binary or B) cross
your
fingers and pray.
Statically linked binaries are still the best option, if you want
to make sure things will work for the user (and you don't have
time for customer service). It's also a good strategy for
cross-platform development, this or you have to use an approach
similar to Textadept that ships everything in one package. I
usually ship all the additional dlls / libs, if there are any.
Relying on system wide dynamic linking is more for cases when you
develop for one particular environment or when you're 90% sure
that a certain library exists on most systems you develop for.
The C standard library comes to mind, but even there are
differences between Linux and Windows. And don't forget that,
unlike Linux users, people who use Windows are usually not tech
savvy in the sense that they can deal with downloading additional
libraries.
It all depends on the products you're developing. But for our
stuff it's better to go static or ship everything.
I've found the java ecosystem to be quite well fleshed out and
mature in
handling lib/jar dependencies, such that it was an unpleasant
shock dealing
with C++ after years away. Using maven, for instance, is a
quick and easy
way to abstract the problems away (though it is better suited
for builds
than deployments).
As D gets more support for dynamic libraries, it would be good
to take
lessons from how Java and others have dealt with dependency
management.
Yes, only better. :-)