[racket] Understanding raco make and its correctness guarantees

From: Robby Findler (robby at eecs.northwestern.edu)
Date: Thu Mar 21 11:33:37 EDT 2013

raco make is a command-line tool.

Are you maybe asking for a command-line switch to racket to effectively run
'raco make' before requiring the file? (You can do that already with
careful use of -e, of course, but maybe you want something shorter.)

Robby


On Thu, Mar 21, 2013 at 10:31 AM, Eric Dobson <eric.n.dobson at gmail.com>wrote:

> So anyone who just uses the command line tools is out of luck? I like
> my build system to be correct, and it seems weird that there is work
> to make sure the right zo file is matched with the source file but
> that it is incorrect in some simple cases.
>
> On Thu, Mar 21, 2013 at 8:19 AM, Robby Findler
> <robby at eecs.northwestern.edu> wrote:
> > Or use DrRacket and turn on the auto compilation feature. Or set up
> > compiler/cm yourself to do that.
> >
> > Robby
> >
> >
> > On Thu, Mar 21, 2013 at 10:16 AM, Eric Dobson <eric.n.dobson at gmail.com>
> > wrote:
> >>
> >> That doesn't explain why I can get the same behavior as the macro with
> >> a function call, probably inlining is responsible for that though.
> >>
> >> So the take away is that if I want my running system to represent the
> >> current state of the source files I either need to run raco make every
> >> single time, or never run raco make. That seems very counter
> >> intuitive.
> >>
> >> On Thu, Mar 21, 2013 at 1:51 AM, Tobias Hammer <tobias.hammer at dlr.de>
> >> wrote:
> >> > The difference lies in the method how racket and raco make check for
> >> > changes.
> >> > - racket only looks at each individual file's timestamp source and .zo
> >> > timestamp and uses whichever is never.
> >> > - raco make always checks if the file has changed or any of its
> >> > dependencies
> >> > has changed to decide if it has to recompile the file.
> >> >
> >> > Whats happens in version 1 is that the macro is already expanded in
> a.zo
> >> > and
> >> > a.zo is still never than a.rkt. Therefore racket loads a.zo (but
> b.rkt)
> >> > and
> >> > prints 'version1.
> >> > In version 2 raco make (or more correctly compiler/cm) checks a.rkt,
> >> > finds
> >> > the dependency to b.rkt, notices the change in b.rkt (by calculating a
> >> > checksum over the whole dependency tree if i remember correct) and
> >> > therefore
> >> > recompiles a.rkt AND b.rkt.
> >> >
> >> > Version 3 should as far as i understand never differ, assumed raco
> make
> >> > works.
> >> >
> >> > Tobias
> >> >
> >> >
> >> >
> >> > On Thu, 21 Mar 2013 06:23:24 +0100, Eric Dobson
> >> > <eric.n.dobson at gmail.com>
> >> > wrote:
> >> >
> >> >> 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?
> >> >> ____________________
> >> >>   Racket Users list:
> >> >>   http://lists.racket-lang.org/users
> >> >
> >> >
> >> >
> >> > --
> >> > ---------------------------------------------------------
> >> > Tobias Hammer
> >> > DLR / Robotics and Mechatronics Center (RMC)
> >> > Muenchner Str. 20, D-82234 Wessling
> >> > Tel.: 08153/28-1487
> >> > Mail: tobias.hammer at dlr.de
> >> ____________________
> >>   Racket Users list:
> >>   http://lists.racket-lang.org/users
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20130321/a7fa53ac/attachment.html>

Posted on the users mailing list.