[racket] Fresh sandboxes in Scribble documentation
Eli Barzilay wrote:
> After talking to Sam about it, he pointed out the further problems
> that you get into with TR's limitations wrt the repl. A potentially
> simple solution for this would be a variant of the the interactions
> thing that will get some code then run it as a *module*, and show the
> results, instead of using the evaluator for the examples. Something
> along the lines of:
>
> (parameterize ([sandbox-output (current-output-port)])
> (kill-evaluator
> (make-module-evaluator "#lang racket\n(+ 1 2)\n")))
>
> so the examples are changing from repl-input/-output to
> definitions-window/interactions-results. This is probably not hard to
> do, but it will still imply an expensive cost for TR which is
> much slower to start even with everything shared.
>
> Yet another option, one that will be much faster but more difficult to
> implement, is to slap all of the examples into one module, then have a
> custom evaluation handler so you can see which output is printed for
> each piece of input. This will require some delaying for text
> rendering, and you'll have the no-redefinitions problem in a worse
> way.
These sound like nice ideas, and I'd love to try them, but I'm still
trying the factory method. I have only a shadow of a mental model of
sandboxed evaluation, so I can't make sense of this error:
(define make-bigfloat-eval
(make-base-eval-factory
'(typed/racket/base "../bigfloat.rkt")))
(make-bigfloat-eval)
namespace-attach-module: a different module with the same name is
already in the destination namespace, for name:
"/home/neil/install/src/gr2/collects/scheme/base.rkt"
This is from the latest sources on github.
I get the same error using `make-eval-factory', or leaving out
`typed/racket/base', or replacing the module paths with '(ffi/unsafe) or
apparently anything else. The only things that seem to work are
(make-base-eval-factory '()) and (make-eval-factory '()).
I couldn't find a non-trivial example of using eval factories in the
collects, but what I tried *looks* fine according to the docs.
(On the plus side, the second time I evaluate (make-bigfloat-eval), I
get the error WAY faster. So... improvement!)
Neil T