[plt-scheme] Stylistic (I hope!) question regarding driver loop

From: Robby Findler (robby at cs.uchicago.edu)
Date: Mon Jan 23 13:30:02 EST 2006

Instead extra non-determinitic GC steps, did you consider just building
a GC cleanup into every step? That is, when a definition is unused in
the rhs of a step, it is just gone, right away.

(that's what the letrec example I posted does, fwiw.)

Robby

At Mon, 23 Jan 2006 09:53:24 -0800, John Clements wrote:
> 
> On Jan 21, 2006, at 2:41 PM, Felix Klock's PLT scheme proxy wrote:
> 
> >
> > On Jan 21, 2006, at 3:24 PM, Robby Findler wrote:
> >
> >> (FWIW, You can test this out yourself. This program:
> >> <<snip>>
> >
> > It would be nice if one were able to switch to the HtDP languages  
> > and then use the stepper to illustrate these ideas, rather than  
> > just relying on inferences based on how the computer is behaving as  
> > memory usage grows.  After all, a user could have instead inferred  
> > that DrScheme itself had a memory leak, rather than the program text.
> >
> > Unfortunately, I wasn't able to run Robby's first example in the  
> > HtDP languages; the semantics for letrec in the Student Languages  
> > seems to be different than in the Pretty Big language.
> >
> > I tried adapting the examples to programs that the Student  
> > languages could handle, but eventually I realized that the Stepper  
> > doesn't ever "garbage collect" the intermediate definitions that it  
> > generates (when it processes local/let/letrec), so the only way to  
> > use it to illustrate tail recursion is to tell the human viewer to  
> > do the garbage collection in their heads.
> >
> > To make this concrete: type the following into DrScheme under the  
> > Intermediate Student language
> >
> > (define (f x) (local ((define y x)) (f 1)))
> > (define (g x) (local ((define y (g 1))) y))
> > ; (f 1) ;; uncomment this after you see what stepping through (g 1)  
> > does
> > (g 1)
> >
> > And then compare what hitting the Step button gives you for (f 1)  
> > versus (g 1).  The main problem is that (f 1) generates a series of  
> > y_0, y_1, y_2, ... definitions, but the y_i's are never referenced  
> > by the expression at the bottom of the Step, so they should be  
> > garbage collected if you want to illustrate that the memory usage  
> > of (f 1) is bounded using the stepper.
> 
> Yes, I believe this would be nice, and probably not too hard to  
> implement, using weak boxes. Let's see if I can find time tomorrow  
> (BTW, the smart money is on "no").
> 
> A side point: adding this moves the stepper away from a deterministic  
> reduction semantics by introducing a GC step.  Worse, the GC step  
> will likely be "folded in" to one of the other steps.  Nevertheless,  
> I think that the resulting stepper will be more useful to more people.
> 
> John
> 
> 
> ------------------------------------------------------------------------------
> [application/#f "smime.p7s"] [save & open]


Posted on the users mailing list.