|
|
|
@ -241,8 +241,28 @@ Many tools were made for one thing, and over time have evolved into another thin
|
|
|
|
|
This can happen by conscious design or, more commonly,
|
|
|
|
|
from an industry or community picking a tool up and using it for something it was not originally designed for.
|
|
|
|
|
While hacking tools for uses they were not designed for is always fun and in many cases the only way to do something,
|
|
|
|
|
its perhaps better to make a dedicated tool when the new usecase eclipses
|
|
|
|
|
<!-- look at just command runner, simplifying the common use case of make-->
|
|
|
|
|
its perhaps better to make a dedicated tool when the design choices made for the old usecases start hindering the new usecases.
|
|
|
|
|
|
|
|
|
|
A great example of this is [just](https://github.com/casey/just), a command runner heavily inspired by GNU make.
|
|
|
|
|
Make was (and in large part still is) a C build system.
|
|
|
|
|
As such, it includes features such as implicit rules
|
|
|
|
|
(if a file called `foo.o` is needed and there is no explicit rule is there, the C compiler will be invoked on the file `foo.c`
|
|
|
|
|
(there are similar rules for C++ and linking))
|
|
|
|
|
and file modification time laziness
|
|
|
|
|
(fantastic as a build system, needs liberal sprinkling of `.PHONY` rules when used as a task runner).
|
|
|
|
|
|
|
|
|
|
These features are *good* features when make is being used as a build system,
|
|
|
|
|
but another major use of make that has emerged has been as a way to run common tasks.
|
|
|
|
|
so alongside `make build` to buld your program, you would have `make bootstrap`, `make test`, `make config`, etc.
|
|
|
|
|
This is where the design decisions behind make the build system start to hinder make the task runner,
|
|
|
|
|
making one learn about make the build system in order to work around those features to use make the task runner.
|
|
|
|
|
However, make cant drop these features, both because projects still actively use make as a build system,
|
|
|
|
|
and because even makefiles that are just used as taskrunners still work around the footguns and
|
|
|
|
|
would be broken by make making large changes to its syntax and semantics.
|
|
|
|
|
|
|
|
|
|
However, Just was designed from the outset to be a command runner, and as a result,
|
|
|
|
|
it is much easier to pick up the just language and make a quick set of commands that can be run.
|
|
|
|
|
By leaving behind the old tool, a new tool can be made that better fits the tasks that people use the tool for.
|
|
|
|
|
|
|
|
|
|
## The trendsetter
|
|
|
|
|
|
|
|
|
@ -256,10 +276,10 @@ its perhaps better to make a dedicated tool when the new usecase eclipses
|
|
|
|
|
|
|
|
|
|
## Appendix: the tools
|
|
|
|
|
|
|
|
|
|
This is an extremely unscientific table of command line tools that I have tried,
|
|
|
|
|
have used, or currently use. It is assuredly incomplete, but *should* be broadly
|
|
|
|
|
representative. The date data has been gathered from the first git commit where
|
|
|
|
|
available, wikipedia otherwise, and sorting is by year first, then alphabetical.
|
|
|
|
|
This is an extremely unscientific table of command line tools that I have tried, have used, or currently use.
|
|
|
|
|
It is assuredly incomplete, but *should* be broadly representative.
|
|
|
|
|
The date data has been gathered from the first git commit where available,
|
|
|
|
|
wikipedia otherwise, and sorting is by year first, then alphabetical.
|
|
|
|
|
|
|
|
|
|
|tool|year|language|
|
|
|
|
|
|-|-|-|
|
|
|
|
|