I am reading through Dybvig&#39;s thesis and it&#39;s very clearly written and helpful. (I only hope my own thesis is as useful to someone in the future). <div><br></div><div>Jens&#39;s tip will help a lot. I have a very stupid representation for all my values right now. Perhaps making it slightly more clever will give me the enough speed up to not worry about performance anymore.</div>
<div><br></div><div>And, now that I check, yes I am in fact type-checking the list structure during variable lookup, which is completely unnecessary. That might be why the profiler is telling me that all the overhead is coming from typechecking. Thank you!</div>
<div><br></div><div>  -Patrick<br><br><div class="gmail_quote">On Mon, Mar 21, 2011 at 2:43 PM, Jens Axel Søgaard <span dir="ltr">&lt;<a href="mailto:jensaxel@soegaard.net">jensaxel@soegaard.net</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
2011/3/21 Patrick Li &lt;<a href="mailto:patrickli.2001@gmail.com">patrickli.2001@gmail.com</a>&gt;:<br>
<div class="im">&gt; Thanks for all the suggestions! I&#39;ll look over those and see what&#39;s<br>
&gt; happening.<br>
&gt; I have profiled my code, and noticed that it spends most of the time in<br>
&gt; typechecking the arguments to the cons, car, and cdr primitives. I currently<br>
&gt; know of no simple way to eliminate those checks while still giving me<br>
&gt; relatively sane error messages for when things go wrong.<br>
<br>
</div>Which representation do you use? Maybe you can speed up the type checks,<br>
by choosing a clever representation.<br>
<br>
A common trick is to embed type information into the pointers.<br>
In the representation used in the 1996 Scheme Workshop pointers to cons<br>
cells contains 010 in their lower 3 bits. A type check is thus compiled<br>
to a very fast and instruction.<br>
<br>
<a href="http://www.cs.indiana.edu/eip/compile/back.html" target="_blank">http://www.cs.indiana.edu/eip/compile/back.html</a><br>
<br>
--<br>
Jens Axel Søgaard<br>
<div><div></div><div class="h5"><br>
<br>
&gt;   -Patrick<br>
&gt;<br>
&gt; On Mon, Mar 21, 2011 at 1:39 PM, Vincent St-Amour &lt;<a href="mailto:stamourv@ccs.neu.edu">stamourv@ccs.neu.edu</a>&gt;<br>
&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; David Kranz&#39;s dissertation has a lot of interesting material about<br>
&gt;&gt; implementing closures efficiently.<br>
&gt;&gt; <a href="http://repository.readscheme.org/ftp/papers/orbit-thesis.pdf" target="_blank">http://repository.readscheme.org/ftp/papers/orbit-thesis.pdf</a><br>
&gt;&gt;<br>
&gt;&gt; Andrew Appel&#39;s book Compiling with Continuations also covers similar<br>
&gt;&gt; material.<br>
&gt;&gt;<br>
&gt;&gt; Vincent<br>
&gt;&gt;<br>
&gt;&gt; At Mon, 21 Mar 2011 12:42:07 -0400,<br>
&gt;&gt; Patrick Li wrote:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; [1  &lt;multipart/alternative (7bit)&gt;]<br>
&gt;&gt; &gt; [1.1  &lt;text/plain; ISO-8859-1 (7bit)&gt;]<br>
&gt;&gt; &gt; Hello everyone,<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; For educational purposes, I&#39;ve implemented a simple Scheme interpreter<br>
&gt;&gt; &gt; in C,<br>
&gt;&gt; &gt; but it&#39;s way too slow at the moment. (eg. just macroexpanding and<br>
&gt;&gt; &gt; evaluating<br>
&gt;&gt; &gt; a function definition takes a few seconds.) I would like some advice on<br>
&gt;&gt; &gt; how<br>
&gt;&gt; &gt; to proceed next to get a adequately performing Scheme system.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; My goal is simply to get out of C as quickly as possible. ie. Get the<br>
&gt;&gt; &gt; basic<br>
&gt;&gt; &gt; forms and a macro system working which will allow me to write the rest<br>
&gt;&gt; &gt; of it<br>
&gt;&gt; &gt; in Scheme.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; So far this is what I have done:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; I wrote a simple Scheme interpreter in Scheme in continuation-passing<br>
&gt;&gt; &gt; style,<br>
&gt;&gt; &gt; so that I can get call/cc working.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Then I basically just manually translated that code into C. So all<br>
&gt;&gt; &gt; continuations are heap allocated.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; How should I proceed from here? These are the options that I&#39;ve come up<br>
&gt;&gt; &gt; with:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; (1) Optimize variable lookup. Currently the environment is represented<br>
&gt;&gt; &gt; as a<br>
&gt;&gt; &gt; list of key-value pairs. Variable lookup is done by searching through<br>
&gt;&gt; &gt; the<br>
&gt;&gt; &gt; list.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; (2) &quot;Analyze&quot; the code before evaluating it (ie. as in SICP). Ie. for an<br>
&gt;&gt; &gt; (if) form, it will determine that it is an if form during the analysis<br>
&gt;&gt; &gt; phase, so that at execution stage it won&#39;t have to repeatedly figure out<br>
&gt;&gt; &gt; what sort of form it is.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; (3) Write a very simple VM, and develop a simple byte-code compiler.<br>
&gt;&gt; &gt;  The<br>
&gt;&gt; &gt; problem here is that I don&#39;t really know how to deal with first-class<br>
&gt;&gt; &gt; continuations.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Thanks for your help<br>
&gt;&gt; &gt;   -Patrick<br>
&gt;&gt; &gt; [1.2  &lt;text/html; ISO-8859-1 (quoted-printable)&gt;]<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; [2  &lt;text/plain; us-ascii (7bit)&gt;]<br>
&gt;&gt; &gt; _________________________________________________<br>
&gt;&gt; &gt;   For list-related administrative tasks:<br>
&gt;&gt; &gt;   <a href="http://lists.racket-lang.org/listinfo/users" target="_blank">http://lists.racket-lang.org/listinfo/users</a><br>
&gt;<br>
&gt;<br>
&gt; _________________________________________________<br>
&gt;  For list-related administrative tasks:<br>
&gt;  <a href="http://lists.racket-lang.org/listinfo/users" target="_blank">http://lists.racket-lang.org/listinfo/users</a><br>
&gt;<br>
<br>
<br>
<br>
</div></div>--<br>
--<br>
<font color="#888888">Jens Axel Søgaard<br>
</font></blockquote></div><br></div>