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

Reply via email to