[racket] Understanding raco make and its correctness guarantees

From: Eric Dobson (eric.n.dobson at gmail.com)
Date: Thu Mar 21 01:23:24 EDT 2013

I'm trying to understand what are the guarantees that raco make is
meant to provide. I'm going to limit this to simple programs, no fancy
dynamic requires, or trying to trick the compiler.

In the following scenario:
1. Edit files
2. run 'raco make <files>'
3. Change files
I expect all of these to have the same effect during the running of
phase 0 when running racket.
4. racket <main-file>
or
4. raco make <files>
5. racket <main-file>
or
4. rm -rf compiled/
5. raco make <files>
6. racket <main-file>

I can make version 1 and 2 differ with the following program:
a.rkt
#lang racket
(require "b.rkt")
(macro)

#lang racket
(provide maco)
(define-syntax (macro stx)
  #''version1)

Where the edit is changing version1 to version2. I can also replicate
this with a function and not a macro.

I thought I could make version 2 and version 3 differ, but cannot seem
to replicate it now, but it would be helpful to know if I see
something that is fixed by clearing the compiled directories.

My understanding was that racket used the same logic as raco make on
whether or not to use the compiled versions versus recompiling, and
this seems to refute that. Can someone give some insight on what I
should be expecting?

Posted on the users mailing list.