On 20 Apr 2019, at 1:11, 'John Clements' via Racket Users wrote:

There’s a paper at the most recent ICFP from Simon Peyton Jones (et al., I’m guessing) on make languages, IIRC.

Very interesting -- thanks! The paper is Andrey Mokhov, Neil Mitchell, and Simon Peyton Jones. 2018. Build Systems à la Carte. _Proc. ACM Program. Lang._ 2, ICFP, Article 79 (September 2018), 29 pages. <https://doi.org/10.1145/3236774>

My brain-dump notes from a fairly superficial read of that paper (thinking about make alternatives, rather than the functional properties of them, which is the authors' actual goal) are below, if anyone's interested.

With that in mind, it strikes me, Hendrik, that if you developed a (Racket) system which generated Ninja files, that might tick a few boxes.

Best wishes,

Norman






Build systems, various
======================

I read an interesting article about build systems (Andrey Mokhov, Neil
Mitchell, and Simon Peyton Jones. 2018. Build Systems à la Carte.
_Proc. ACM Program. Lang._ 2, ICFP, Article 79 (September 2018), 29
pages. <https://doi.org/10.1145/3236774>).

It's a discussion of build systems, and a reimplementation of four of
them in Haskell.  Interesting overall, but also interesting because
investigation makes it clear that there are remarkably few build
systems which are real alternatives to Make.

The four they discuss are Make, Excel (the spreadsheet), Shake (which
is implemented in, and used for building, Haskell) and
[Bazel](https://bazel.build) (which they describe in terms which
suggests it's a cloud-based one for huge code bases, but which seems
to be usable for small ones as well; it's an open-sourced version of
an internal Google tool).

At the end of the paper they mention a few others:

  * Ninja: see below.
  * Nix: really a package management system.
  * [Pluto](http://pluto-build.github.io): seems to be focused on Java.
  * Redo: slightly weird, in that the existing implementations appear
    to be the result of reverse-engineering the manual for the
    never-released original ([one
    version](https://redo.readthedocs.io/en/latest/) points to other
    implementations).
  * [Tup](http://gittup.org/tup/) looks interesting, and conceptually
    not massively far from Make in specification, but seems to detect
    dependencies by instrumenting the commands it runs.
  * [Buck](https://buckbuild.com) is a Facebook tool, written in
    Java.  It looks quite similar to Bazel in the syntax.

[Ninja](https://ninja-build.org) describes itself as a _low-level_
build system, where the input files are expected to be generated by a
different system.  And in fact [CMake](https://cmake.org) has a mode
where it can generate Ninja files which do the actual building (as
opposed to generating Makefiles).

Of those, I think only Tup and CMake+Ninja would repay closer study,
and possibly Bazel, though it looks pretty heavyweight.

Some of these systems (as discussed in the paper at the top) also care
about dependencies on, eg, compiler versions.  I haven't looked
specifically at that above.


--
Norman Gray  :  https://nxg.me.uk

--
You received this message because you are subscribed to the Google Groups "Racket 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to