+<div class="doc_subsection"> <a name="exercise">Exercise</a></div>
+<div class="doc_text">
+<p>As you may have noted from a careful inspection of the Built-In word
+definitions, the ROLL word is not implemented. This word was left out of
+Stacker on purpose so that it can be an exercise for the student. The exercise
+is to implement the ROLL functionality (in your own workspace) and build a test
+program for it. If you can implement ROLL, you understand Stacker and probably
+a fair amount about LLVM since this is one of the more complicated Stacker
+operations. The work will almost be completely limited to the
+<a href="#compiler">compiler</a>.
+<p>The ROLL word is already recognized by both the lexer and parser but ignored
+by the compiler. That means you don't have to futz around with figuring out how
+to get the keyword recognized. It already is. The part of the compiler that
+you need to implement is the <code>ROLL</code> case in the
+<code>StackerCompiler::handle_word(int)</code> method.</p> See the
+implementations of PICK and SELECT in the same method to get some hints about
+how to complete this exercise.<p>
+<p>Good luck!</p>
+</div>
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="todo">Things Remaining To Be Done</a></div>
+<div class="doc_text">
+<p>The initial implementation of Stacker has several deficiencies. If you're
+interested, here are some things that could be implemented better:</p>
+<ol>
+ <li>Write an LLVM pass to compute the correct stack depth needed by the
+ program. Currently the stack is set to a fixed number which means programs
+ with large numbers of definitions might fail.</li>
+ <li>Write an LLVM pass to optimize the use of the global stack. The code
+ emitted currently is somewhat wasteful. It gets cleaned up a lot by existing
+ passes but more could be done.</li>
+ <li>Make the compiler driver use the LLVM linking facilities (with IPO)
+ before depending on GCC to do the final link.</li>
+ <li>Clean up parsing. It doesn't handle errors very well.</li>
+ <li>Rearrange the StackerCompiler.cpp code to make better use of inserting
+ instructions before a block's terminating instruction. I didn't figure this
+ technique out until I was nearly done with LLVM. As it is, its a bad example
+ of how to insert instructions!</li>
+ <li>Provide for I/O to arbitrary files instead of just stdin/stdout.</li>
+ <li>Write additional built-in words; with inspiration from FORTH</li>
+ <li>Write additional sample Stacker programs.</li>
+ <li>Add your own compiler writing experiences and tips in the
+ <a href="#lessons">Lessons I Learned About LLVM</a> section.</li>
+</ol>
+</div>
+
+<!-- *********************************************************************** -->
+