Jeremy Siek 3 anni fa
parent
commit
fa3a5cd987
2 ha cambiato i file con 33 aggiunte e 5 eliminazioni
  1. 21 0
      book.bib
  2. 12 5
      book.tex

+ 21 - 0
book.bib

@@ -1,3 +1,24 @@
+
+
+@Article{Appel90,
+  author = 	 {Appel, Andrew W.},
+  title = 	 {A runtime system},
+  journal = 	 {{LISP} and Symbolic Computation},
+  year = 	 1990,
+  volume = 	 3,
+  number = 	 4,
+  pages = 	 {343--380},
+  month = 	 {November}}
+
+@book{Appel91,
+  place={Cambridge},
+  title={Compiling with Continuations},
+  DOI={10.1017/CBO9780511609619},
+  publisher={Cambridge University Press},
+  author={Appel, Andrew W.},
+  year={1991}
+}
+
 @inproceedings{Dieckmann99,
   author    = {Sylvia Dieckmann and Urs H{\"{o}}lzle},
   editor    = {Rachid Guerraoui},

+ 12 - 5
book.tex

@@ -4650,7 +4650,7 @@ A straightforward way to compute the interference graph is to look at
 the set of live locations between each instruction and add an edge to
 the graph for every pair of variables in the same set.  This approach
 is less than ideal for two reasons. First, it can be expensive because
-it takes $O(n^2)$ time to consider at every pair in a set of $n$ live
+it takes $O(n^2)$ time to consider every pair in a set of $n$ live
 locations. Second, in the special case where two locations hold the
 same value (because one was assigned to the other), they can be live
 at the same time without interfering with each other.
@@ -12949,6 +12949,9 @@ from the set.
 
 \section{Further Reading}
 
+\citet{Appel90} describes many data representation approaches,
+including the ones used in the compilation of Standard ML.
+
 There are many alternatives to copying collectors (and their bigger
 siblings, the generational collectors) when its comes to garbage
 collection, such as mark-and-sweep~\citep{McCarthy:1960dz} and
@@ -12971,6 +12974,7 @@ meet every year at the International Symposium on Memory Management to
 present these findings.
 
 
+
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \chapter{Functions}
 \label{ch:Lfun}
@@ -14771,7 +14775,8 @@ the point where the \code{lambda} is applied. An efficient solution to
 the problem, due to \citet{Cardelli:1983aa}, is to bundle the values
 of the free variables together with a function pointer into a tuple,
 an arrangement called a \emph{flat closure} (which we shorten to just
-``closure'').  \index{subject}{closure}\index{subject}{flat closure}
+``closure'').\index{subject}{closure}\index{subject}{flat closure}
+%
 Fortunately, we have all the ingredients to make closures:
 Chapter~\ref{ch:Lvec} gave us tuples and Chapter~\ref{ch:Lfun} gave us
 function pointers. The function pointer resides at index $0$ and the
@@ -16307,16 +16312,18 @@ dialect of LISP adopted lexical scoping and
 \citet{Guy-L.-Steele:1978yq} demonstrated how to efficiently compile
 Scheme programs. However, environments were represented as linked
 lists, so variable lookup was linear in the size of the
-environment. In this chapter we represent environments using flat
-closures, which were invented by
+environment. \citet{Appel91} gives a detailed description of several
+closure representations. In this chapter we represent environments
+using flat closures, which were invented by
 \citet{Cardelli:1983aa,Cardelli:1984aa} for the purposes of compiling
-the ML language~\citep{Gordon:1978aa,Milner:1990fk}. With flat
+the ML language~\citep{Gordon:1978aa,Milner:1990fk}.  With flat
 closures, variable lookup is constant time but the time to create a
 closure is proportional to the number of its free variables.  Flat
 closures were reinvented by \citet{Dybvig:1987ab} in his Ph.D. thesis
 and used in Chez Scheme version 1~\citep{Dybvig:2006aa}.
 
 
+
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \chapter{Dynamic Typing}
 \label{ch:Ldyn}