This may sound overly simplistic, but have tried profiling your application? Where does it spend the majority of its time?
Sent from my iPhone On Mar 21, 2011, at 9:42 AM, Patrick Li <patrickli.2...@gmail.com> wrote: > Hello everyone, > > For educational purposes, I've implemented a simple Scheme interpreter in C, > but it's way too slow at the moment. (eg. just macroexpanding and evaluating > a function definition takes a few seconds.) I would like some advice on how > to proceed next to get a adequately performing Scheme system. > > My goal is simply to get out of C as quickly as possible. ie. Get the basic > forms and a macro system working which will allow me to write the rest of it > in Scheme. > > So far this is what I have done: > > I wrote a simple Scheme interpreter in Scheme in continuation-passing style, > so that I can get call/cc working. > > Then I basically just manually translated that code into C. So all > continuations are heap allocated. > > How should I proceed from here? These are the options that I've come up with: > > (1) Optimize variable lookup. Currently the environment is represented as a > list of key-value pairs. Variable lookup is done by searching through the > list. > > (2) "Analyze" the code before evaluating it (ie. as in SICP). Ie. for an (if) > form, it will determine that it is an if form during the analysis phase, so > that at execution stage it won't have to repeatedly figure out what sort of > form it is. > > (3) Write a very simple VM, and develop a simple byte-code compiler. The > problem here is that I don't really know how to deal with first-class > continuations. > > Thanks for your help > -Patrick > _________________________________________________ > For list-related administrative tasks: > http://lists.racket-lang.org/listinfo/users _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users