[CakeML-dev] Attempt to define version 2 vs version 3

Magnus Myreen magnus.myreen at gmail.com
Mon Oct 23 02:50:43 UTC 2017

Hi all,

The time has come to decide what should be in version 2 of the
compiler and what should not.

We have previously decided that everything to do with the
install-and-run semantics changes belong to version 3. Currently, I
see master as a "finishing up version 2" branch. So if something
belongs to version 3, then it should not currently be merged into

I propose the following guidelines:
 - having 12 intermediate languages belongs to version 2 (ICFP'16)
 - using clos_relation belongs to version 2 (ICFP'17)
 - having signatures on modules belongs to version 2 (POPL+ICFPs)

I bring this up now because the syntactic-mti-proof branch
deletes clos_relation. This branch is a branch off of master, which
means that it naturally merges in there.  It is clear that
clos_relation was a lot of work and a big part of the contribution in
this year's ICFP paper. I therefore hesitate to just merge in and
delete clos_relation from master. (Yes, it would be in the version
history, but as we know once some time has passed and files have moved
around, version history is not so easy to navigate. This is
particularly true if the interested reader is not a CakeML developer.)

The reason for why I reworked the proofs to avoid clos_relation is
that I couldn't see how to update it for install-and-run. As such, the
changes on syntactic-mti-proof sound like they belong to version 3.

I note that we already have a branch called "version2". We could
simple merge in master into it and then have master be open to
version 3 material. However, what is currently on master (and thus on
the way into version 2) needs some tidying up and improving, e.g. the
basis library could do with some more work, similarly Yong Kiam
mentioned that some of the non-x86 targets don't have up-to-date
.S-file generation for bitmaps. (I also plan to add readme
comments/generation everywhere before version 2 is complete,
i.e. close issue #71.) As I said, we could do tidying up work as
branches of the "version2" branch, but then people need to keep this
in mind so that new tidying-up work isn't accidentally a branch off of
a version-3 master.

What do you think of my guidelines above?

Should master stay, for the time being, as a a "finishing up version
2" branch? Or should be start using the "version2" branch for this
purpose and let version 3 material into master?


More information about the Developers mailing list