[Oberon] Distribution practice; was http://cas.inf.ethz.ch/projects/a2 .

Felix Friedrich felixf at inf.ethz.ch
Mon Nov 7 08:22:19 CET 2022


Hello Michael, hello Peter


> The only tricky part here is that the Fox compiler is compiled with
> itself, and there is as far as I know no independent bootstrap path
> available. But when the CI jobs are set up to first compile the compiler
> with the bootstrap compiler and then use the new compiler to recompile
> everything again, the bootstrap compiler only needs to get rebuilt when
> it introduces an incompatible change that makes it impossible to
> recompile the new compiler (or there is a severe bug that propagates
> into the generated binaries). Updating the bootstrap compiler binaries
> would still be a manual task, but everything else is automated - so
> users can either use the bootstrap compiler to compile it themselves (if
> they are on the platform where the bootstrap compiler runs) or pick some
> nightly binaries and start from there.


This is exactly the point why I liked SVN with the binaries built 
together: when we see a new bug (that has not been identified with the 
CI workflow of our server), we need a way to identify when this bug has 
been introduced. Usually, this boils down to a binary search in past 
revisions until the revision can be found that introduced the new 
behavior. This binary search requires that old revisions can be checked 
out as executables (or at least with a quick compilation time).

Example: in revision x we change the representation of arrays with 
pointers. Only in revision y = x + d we find out that on particular 
systems (Windows 32 bit, say) A2 crashes sporadically. We don't remember 
our change from revision x at that moment and debugging is extremely 
hard (GC issues almost always are very hard to trace, particularly in a 
concurrent setup). So, we try to find a revision where the problem does 
not appear. We check out revision y - 200 and see the system seems to 
work there. Then we make a binary search from there...  This scenario 
isn't that unrealistic. When you experiment with language features or 
optimize the runtime towards certain goals, it is usually hard if not 
impossible to see all implications.

I very much appreciate your feedback and we will do our best to find a 
good approach with some large file system support in GIT (or so). Will 
keep you updated.

Kind regards
Felix




More information about the Oberon mailing list