[plt-dev] make eval namespace argument mandatory
On Mar 17, Ryan Culpepper wrote:
> For racket, I propose we make the namespace argument to the 'eval'
> function mandatory. It's currently optional, and one-arg 'eval' is
> an attractive nuisance. If programmers have to specify the
> evaluation context---especially if they have to read up on
> namespaces to figure out how to get one---they are less likely to
> expect magical behavior from one-arg 'eval'.
It seems like a drastic fix that can mostly be dealt with in other
ways like making `eval' do something like:
(define (better-eval expr [ns (current-namespace)])
(if (namespace-empty? ns)
(error 'eval "proper explanation of what you did wrong")
(eval expr ns)))
Another option is to throw it out completely, and instead replace it
with a `make-evaluator' function that creates an evaluator in the
context of a given namespace -- and that will be nice in the sense
that you can choose the `current-namespace', the module's namespace,
a sandboxed namespace, etc.
On Mar 17, Sam Tobin-Hochstadt wrote:
>
> I would also suggest than anything the operates on the
> current-namespace *without* at least an optional namespace argument
> be fixed. A few examples are: `namespace-require',
> `namespace-require/copy', `namespace-symbol->identifier',
> `namespace-syntax-introduce'.
If that's done then there's a much weaker point in a
`current-namespace' parameter.
--
((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay:
http://barzilay.org/ Maze is Life!