On Fri, Aug 19, 2011 at 12:50 PM, Eli Barzilay <e...@barzilay.org> wrote: > Three hours ago, Robby Findler wrote: >> >> I'm not seeing anything when looking at your code that looks >> suspicious, but I'm not sure of the ins and outs of the sandbox >> protocols so I'm not sure who to blame here (well, probably the >> sandbox needs to be blamed since the error is not illuminating, but >> there may be other problems that that error is masking). >> >> One difference that I notice is that scribble's make-base-eval doesn't >> create the evaluator in the same way your code does; it uses a >> different argument to make-evaluator that puts the evaluator into a >> different mode somehow. That could be relevant. >> >> Maybe Eli can say more? > > I have no idea what the problem is, or how to get it without involving > planet.
I don't see why that should stop you. To spur you along, I've noticed that the sandbox creates a module with the name 'program from the use-lang function on line 518 which seems to be making its way over to the argument to evaluate-program (line 564) and from there the module is required but without, apparently, ever evaluating the module (or maybe evaluating it in a different namespace). This sure seems like something that someone who is familiar with how the sandbox code works could shed some light on. I tried working through the code a little bit this evening but find it difficult to read. For example, I think code like this: (when ns (set! ns (ns))) is bad style; when you're using "ns" for a variable to stand for "namespace" you should probably make sure it is bound to a namespace, or use something else. Also, it seems unwise to add that kind of imperative dependency to reasoning about what is going on with 'ns' and when it is (may be) created. I would have used two variables. I'll also note that this line seems like it can lead to a bug because shortly thereafter I see this: (when ns (current-namespace ns)) which looks like it can fail in the case that the limit-thunk does something to above the computation that does the set!. I can't tell for sure if this can happen because I got lost in the call-with-limits. I did notice that call-with-limits has this (let ([r #f]) ..stuff.. (define r ...) ...use r ...) in such a way that the outer binding of 'r' is never used which seems a little suspicious. At a min, that unused binding probably be removed, but maybe there is an actual bug there and those two 'r's are supposed to not shadow each other? Robby _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/dev