فهرست منبع

wrote most of the preface

Jeremy Siek 9 سال پیش
والد
کامیت
8b6ce9b38f
2فایلهای تغییر یافته به همراه104 افزوده شده و 8 حذف شده
  1. 32 2
      all.bib
  2. 72 6
      book.tex

+ 32 - 2
all.bib

@@ -2,13 +2,43 @@
 %% http://bibdesk.sourceforge.net/
 %% http://bibdesk.sourceforge.net/
 
 
 
 
-%% Created for Jeremy Siek at 2015-12-20 15:05:09 -0500 
+%% Created for Jeremy Siek at 2016-01-04 16:32:32 -0500 
 
 
 
 
 %% Saved with string encoding Unicode (UTF-8) 
 %% Saved with string encoding Unicode (UTF-8) 
 
 
 
 
 
 
+@techreport{Siek:2012ab,
+	Author = {Jeremy G. Siek and Bor-Yuh Evan Chang},
+	Date-Added = {2016-01-04 21:31:42 +0000},
+	Date-Modified = {2016-01-04 21:32:29 +0000},
+	Institution = {Univesity of Colorado},
+	Title = {A Problem Course in Compilation: From Python to x86 Assembly},
+	Year = {2012},
+	Bdsk-File-1 = {YnBsaXN0MDDUAQIDBAUGJCVYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKgHCBMUFRYaIVUkbnVsbNMJCgsMDxJXTlMua2V5c1pOUy5vYmplY3RzViRjbGFzc6INDoACgAOiEBGABIAFgAdccmVsYXRpdmVQYXRoWWFsaWFzRGF0YV8QEmNvbXBpbGVyLW5vdGVzLnBkZtIXCxgZV05TLmRhdGFPEQF6AAAAAAF6AAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADNyMDqSCsAAAC/bfESY29tcGlsZXItbm90ZXMucGRmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS+Ug9KwTuRQREYgAAAAAAABAAIAAAkgAAAAAAAAAAAAAAAAAAAAA2JpYgAAEAAIAADNyPkqAAAAEQAIAADSsJU0AAAAAQAMAL9t8QAFwHIAAhIpAAIAMk1hY2ludG9zaCBIRDpVc2VyczoAanNpZWs6AGJpYjoAY29tcGlsZXItbm90ZXMucGRmAA4AJgASAGMAbwBtAHAAaQBsAGUAcgAtAG4AbwB0AGUAcwAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIAIlVzZXJzL2pzaWVrL2JpYi9jb21waWxlci1ub3Rlcy5wZGYAEwABLwAAFQACAAz//wAAgAbSGxwdHlokY2xhc3NuYW1lWCRjbGFzc2VzXU5TTXV0YWJsZURhdGGjHR8gVk5TRGF0YVhOU09iamVjdNIbHCIjXE5TRGljdGlvbmFyeaIiIF8QD05TS2V5ZWRBcmNoaXZlctEmJ1Ryb290gAEACAARABoAIwAtADIANwBAAEYATQBVAGAAZwBqAGwAbgBxAHMAdQB3AIQAjgCjAKgAsAIuAjACNQJAAkkCVwJbAmICawJwAn0CgAKSApUCmgAAAAAAAAIBAAAAAAAAACgAAAAAAAAAAAAAAAAAAAKc}}
+
+@techreport{Sussman:1975ab,
+	Author = {Gerald Jay Sussman and Guy L. Steele Jr.},
+	Date-Added = {2016-01-04 20:07:25 +0000},
+	Date-Modified = {2016-01-04 20:08:29 +0000},
+	Institution = {MIT},
+	Month = {December},
+	Number = {AI Memo No. 349},
+	Title = {Scheme: an interpreter for extended lambda calculus},
+	Year = {1975},
+	Bdsk-File-1 = {YnBsaXN0MDDUAQIDBAUGJCVYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKgHCBMUFRYaIVUkbnVsbNMJCgsMDxJXTlMua2V5c1pOUy5vYmplY3RzViRjbGFzc6INDoACgAOiEBGABIAFgAdccmVsYXRpdmVQYXRoWWFsaWFzRGF0YVtBSU0tMzQ5LnBkZtIXCxgZV05TLmRhdGFPEQFgAAAAAAFgAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADNyMDqSCsAAAC/bfELQUlNLTM0OS5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS99vdKwOypQREYgAAAAAAABAAIAAAkgAAAAAAAAAAAAAAAAAAAAA2JpYgAAEAAIAADNyPkqAAAAEQAIAADSsIF6AAAAAQAMAL9t8QAFwHIAAhIpAAIAK01hY2ludG9zaCBIRDpVc2VyczoAanNpZWs6AGJpYjoAQUlNLTM0OS5wZGYAAA4AGAALAEEASQBNAC0AMwA0ADkALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASABtVc2Vycy9qc2llay9iaWIvQUlNLTM0OS5wZGYAABMAAS8AABUAAgAM//8AAIAG0hscHR5aJGNsYXNzbmFtZVgkY2xhc3Nlc11OU011dGFibGVEYXRhox0fIFZOU0RhdGFYTlNPYmplY3TSGxwiI1xOU0RpY3Rpb25hcnmiIiBfEA9OU0tleWVkQXJjaGl2ZXLRJidUcm9vdIABAAgAEQAaACMALQAyADcAQABGAE0AVQBgAGcAagBsAG4AcQBzAHUAdwCEAI4AmgCfAKcCCwINAhICHQImAjQCOAI/AkgCTQJaAl0CbwJyAncAAAAAAAACAQAAAAAAAAAoAAAAAAAAAAAAAAAAAAACeQ==}}
+
+@book{Lane:1997aa,
+	Author = {Saunders Mac Lane},
+	Date-Added = {2015-12-28 20:54:39 +0000},
+	Date-Modified = {2015-12-28 20:56:29 +0000},
+	Edition = {2nd},
+	Publisher = {Spring},
+	Title = {Categories for the Working Mathematician},
+	Year = {1997},
+	Bdsk-File-1 = {YnBsaXN0MDDUAQIDBAUGJCVYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKgHCBMUFRYaIVUkbnVsbNMJCgsMDxJXTlMua2V5c1pOUy5vYmplY3RzViRjbGFzc6INDoACgAOiEBGABIAFgAdccmVsYXRpdmVQYXRoWWFsaWFzRGF0YVxjYXQtd29yay5wZGbSFwsYGVdOUy5kYXRhTxEBYgAAAAABYgACAAAMTWFjaW50b3NoIEhEAAAAAAAAAAAAAAAAAAAAzcjA6kgrAAAAv23xDGNhdC13b3JrLnBkZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEqIk3SpwugUERGIAAAAAAAAQACAAAJIAAAAAAAAAAAAAAAAAAAAANiaWIAABAACAAAzcj5KgAAABEACAAA0qdR8AAAAAEADAC/bfEABcByAAISKQACACxNYWNpbnRvc2ggSEQ6VXNlcnM6AGpzaWVrOgBiaWI6AGNhdC13b3JrLnBkZgAOABoADABjAGEAdAAtAHcAbwByAGsALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASABxVc2Vycy9qc2llay9iaWIvY2F0LXdvcmsucGRmABMAAS8AABUAAgAM//8AAIAG0hscHR5aJGNsYXNzbmFtZVgkY2xhc3Nlc11OU011dGFibGVEYXRhox0fIFZOU0RhdGFYTlNPYmplY3TSGxwiI1xOU0RpY3Rpb25hcnmiIiBfEA9OU0tleWVkQXJjaGl2ZXLRJidUcm9vdIABAAgAEQAaACMALQAyADcAQABGAE0AVQBgAGcAagBsAG4AcQBzAHUAdwCEAI4AmwCgAKgCDgIQAhUCIAIpAjcCOwJCAksCUAJdAmACcgJ1AnoAAAAAAAACAQAAAAAAAAAoAAAAAAAAAAAAAAAAAAACfA==}}
+
 @article{Backus:1960aa,
 @article{Backus:1960aa,
 	Acmid = {367262},
 	Acmid = {367262},
 	Address = {New York, NY, USA},
 	Address = {New York, NY, USA},
@@ -724,7 +754,7 @@
 	Bdsk-Url-2 = {http://dx.doi.org/10.1145/2816707.2816714}}
 	Bdsk-Url-2 = {http://dx.doi.org/10.1145/2816707.2816714}}
 
 
 @inproceedings{Richards:2015aa,
 @inproceedings{Richards:2015aa,
-	Author = {Gregor Richards and Francesco Zappa Nardelli and Jan Vitek },
+	Author = {Gregor Richards and Francesco Zappa Nardelli and Jan Vitek},
 	Booktitle = {European {C}onference on {O}bject-{O}riented {P}rogramming},
 	Booktitle = {European {C}onference on {O}bject-{O}riented {P}rogramming},
 	Date-Added = {2015-11-10 19:26:58 +0000},
 	Date-Added = {2015-11-10 19:26:58 +0000},
 	Date-Modified = {2015-11-10 19:28:45 +0000},
 	Date-Modified = {2015-11-10 19:28:45 +0000},

+ 72 - 6
book.tex

@@ -105,8 +105,72 @@ University.
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \chapter*{Preface}
 \chapter*{Preface}
 
 
-Talk about nano-pass \citep{Sarkar:2004fk,Keep:2012aa} and incremental
-compilers \citep{Ghuloum:2006bh}.
+The tradition of compiler writing at Indiana University goes back to
+programming language research and courses taught by Daniel Friedman in
+the 1970's. Dan had conducted research on lazy evaluation in the
+context of Lisp~\citep{McCarthy:1960dz} and then studied continuations
+and macros in the context of the Scheme~\citep{Sussman:1975ab}, a
+dialect of Lisp.  One of students of those courses, Kent Dybvig, went
+on to build Chez Scheme~\citep{Dybvig:2006aa}, a production-quality
+and efficient compiler for Scheme. After completing his Ph.D. at the
+University of North Carolina, Kent returned to teach at Indiana
+University.  Throughout the 1990's and early 2000's, Kent continued
+development of Chez Scheme and rotated with Dan in teaching the
+compiler course.
+
+Thanks to this collaboration between Dan and Kent, the compiler course
+evolved to incorporate novel pedagogical ideas while also including
+elements of effective real-world compilers.  One of the pedagogical
+ideas was to split the compiler into many small passes over the input
+program and subsequent intermediate representations, so that the code
+for each pass is easy to understood in isolation.  (In contrast, most
+compilers of the time were organized into only a few large passes for
+reasons of compile-time efficiency.)  Kent and his students, Dipanwita
+Sarkar and Andrew Keep, developed infrastructure to support this
+approach and evolved the course, first to use micro-sized passes and
+then into even smaller
+nano-passes~\citep{Sarkar:2004fk,Keep:2012aa}. I took this compiler
+course in the early 2000's, as part of my Ph.D. studies at Indiana
+University.
+
+One of my classmates, Abdulaziz Ghuloum, observed that the
+front-to-back organization of the course made it difficult for
+students to understand the rationale for the compiler
+design. Abdulaziz proposed an incremental approach in which the
+students build the compiler in stages, starting by implementing a
+complete compiler for a very small subset of the input language, then
+gradually adding features to the input language and adding or
+modifying passes to handle those features~\citep{Ghuloum:2006bh}.
+
+After graduating from Indiana University in 2005, I went on to teach
+at the University of Colorado. I adapted the nano-pass and incremental
+approaches to compiling a subset of the Python
+language~\citep{Siek:2012ab}.  Python and Scheme are quite different
+on the surface but there is a large overlap in the compiler techniques
+required for the two languages. Thus, I was able to teach much of the
+same content from the Indiana compiler course. I very much enjoyed
+teaching the course organized according to the nano-pass and
+incremental approaches, and even better, many of the students learned
+a lot and got excited about compilers.  (No, I didn't do a
+quantitative study to support this claim.)
+
+It is now 2016 and I too have returned to teach at Indiana University.
+In my absence the compiler course had switched from the front-to-back
+organization to a back-to-front organization. Seeing how well the
+incremental approach worked at Colorado, I found this rather
+unsatisfactory and have therefore proceeded to reorganize the course,
+porting and adapting the structure of the Colorado course back into
+the land of Scheme. Of course, in the meantime Scheme has been
+superseded by Racket (at least in Indiana), so the course is now about
+implementing, in Racket~\citep{plt-tr}, a subset of Racket.
+
+This is the textbook for the incremental version of the compiler
+course at Indiana Unversity. This book would have been better written
+by Dan, Kent, and Abdulaziz, but it seems that I am the one with the
+time and enthusiasm. With this book I hope to make the Indiana
+compiler course available to people that have not had the chance to
+study here in person.
+
 
 
 Talk about pre-requisites.
 Talk about pre-requisites.
 
 
@@ -132,12 +196,13 @@ Need to give thanks to
 \item Abdulaziz Ghuloum
 \item Abdulaziz Ghuloum
 \item Ryan Newton
 \item Ryan Newton
 \item Dipanwita Sarkar
 \item Dipanwita Sarkar
+\item Andrew Keep
 \item Oscar Waddell
 \item Oscar Waddell
 \end{itemize}
 \end{itemize}
 
 
-%\mbox{}\\
-%\noindent Amber Jain \\
-%\noindent \url{http://amberj.devio.us/}
+\mbox{}\\
+\noindent Jeremy G. Siek \\
+\noindent \url{http://homes.soic.indiana.edu/jsiek}
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \chapter{Preliminaries}
 \chapter{Preliminaries}
@@ -300,7 +365,7 @@ R_0 ::= \Int \mid ({\tt \key{read}}) \mid (\key{-} \; R_0) \mid
 \section{S-Expressions}
 \section{S-Expressions}
 \label{sec:s-expr}
 \label{sec:s-expr}
 
 
-Racket, as a descendant of Lisp~\citep{McCarthy:1960dz}, has
+Racket, as a descendant of Lisp, has
 convenient support for creating and manipulating abstract syntax trees
 convenient support for creating and manipulating abstract syntax trees
 with its \emph{symbolic expression} feature, or S-expression for
 with its \emph{symbolic expression} feature, or S-expression for
 short. We can create an S-expression simply by writing a backquote
 short. We can create an S-expression simply by writing a backquote
@@ -528,6 +593,7 @@ of evaluation can make a different.
 The behavior of the following program is somewhat subtle because
 The behavior of the following program is somewhat subtle because
 Racket does not specify an evaluation order for arguments of an
 Racket does not specify an evaluation order for arguments of an
 operator such as $-$.
 operator such as $-$.
+\marginpar{\scriptsize This is not true of Racket. \\ --Jeremy}
 \[
 \[
 \BINOP{+}{\READ}{\UNIOP{-}{\READ}}
 \BINOP{+}{\READ}{\UNIOP{-}{\READ}}
 \]
 \]