Mill: Better Scala Builds
lihaoyi.com
lihaoyi.com
Mill's core is basically a dependency-graph-based caching task-runner, similar to Bazel, which happens to be written in Scala (rather than Skylark). Scala+Java support is just a bunch of helper methods built on top of that.
It should be pretty trivial to make it work for Java-only projects (https://github.com/lihaoyi/mill/issues/145) or write the necessary helper methods to make it work for other languages or platforms.
The developer experience is so delightful compared to the other build system in the JVM land. And the task model seems just right.
Generally before adopting a language for a new project, (for me) it would need to have things like:
- good build tool including dependency management - reasonably fast compiler - decent standard library - pretty good IDE support - clear policy about backwards compatibility - good REPL - good documentation (including contribution policy and license)
But there are surprisingly few language ecosystems that have all these fundamental features, even after many years (decades) of development! And many others seem to not appreciate how important they are, leading to years of tepid adoption or only niche usage at best.
One of the barriers to switching to this, for my project, is the sbt-native-packager plugin and the way we use it to build debian packages. This plugin is one of the best things about sbt.
That said, I've been writing Scala for years now and still struggle to modify my builds. And for my team, SBT is a major barrier to entry for people new to Scala.
Once I feel like I can port my build over, I'm going to give Mill a try.
Will try mill, I wonder why no other build tools for scala showed up, with SBT being such a pain for many people.