The Relationship Between Static Typing and Dependency Resolution

They seem similar, to me.

In a statically-typed language, you specify that whoever’s using your code better give you an AbstractBullshitFactoryFactory or else there’ll be hell to pay. Similarly, a packager for a package manager with dependency resolution will tell the package manager that dammit, you need cups installed or else things just won’t work.

Contrast this to a dynamically-typed language (where you’re responsible for whatever you pass in; if it doesn’t work, that’s your own damn fault) and a package manager that lets you install whatever package you want, whether or not it relies upon things you don’t have.

Parallels can be drawn between Java’s interfaces and package manager’s provides clause.

Now, the big difference for me is that my package manager has a --nodeps option, while I’m not aware of any statically-typed languages that let me, as a programmer using a library, override type constraints. Also, automatic downloading of dependencies makes for significantly less work for me, while static type checking does no such thing.