Just now, John Clements wrote: > > I don't think you should be shocked; I believe that calls to eval > are essentially triggering full passes of the parser and compiler, > dynamically. It's true that you could optimize for certain special > cases (such as yours), but generally speaking these use cases are > rare, particularly since I'm guessing that the places where this > optimization would be possible are also the places where eval isn't > needed.
As a sidenote, this is not something that is unique to racket or that is new in any way... I first "encountered" this in 1995 in a project written in Allegro Lisp -- I was surprised about how slow `eval' was, and when I asked about it, the advice I was given is that in extreme cases where you really need a fast evaluation of dynamically generated code, you're better off writing a mini-evaluator instead. (Another sidenote: there are some languages with a "very fast" eval, like elisp and newlisp. In these languages it can be as fast as running normal code, but this is because there is little to no compilation done.) -- ((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay: http://barzilay.org/ Maze is Life! ____________________ Racket Users list: http://lists.racket-lang.org/users