Explorar o código

edits to ch 11

Jeremy Siek %!s(int64=2) %!d(string=hai) anos
pai
achega
36a7ee2037
Modificáronse 1 ficheiros con 49 adicións e 46 borrados
  1. 49 46
      book.tex

+ 49 - 46
book.tex

@@ -22150,21 +22150,22 @@ annotations and the body.
 \begin{tcolorbox}[colback=white]  
 \begin{tcolorbox}[colback=white]  
 \if\edition\racketEd    
 \if\edition\racketEd    
 \begin{tikzpicture}[baseline=(current  bounding  box.center),scale=0.85]
 \begin{tikzpicture}[baseline=(current  bounding  box.center),scale=0.85]
-\node (Lpolyp) at (0,4)  {\large \LangInst{}};
-\node (Lgradualp) at (4,4)  {\large \LangCast{}};
-\node (Llambdapp) at (8,4)  {\large \LangProxy{}};
-\node (Llambdaproxy) at (12,4)  {\large \LangPVec{}};
-\node (Llambdaproxy-2) at (12,2)  {\large \LangPVec{}};
-\node (Llambdaproxy-3) at (8,2)  {\large \LangPVec{}};
-\node (Llambdaproxy-4) at (4,2)  {\large \LangPVecFunRef{}};
-\node (Llambdaproxy-5) at (0,2)  {\large \LangPVecFunRef{}};
-\node (F1-1) at (0,0)  {\large \LangPVecFunRef{}};
-\node (F1-2) at (4,0)  {\large \LangPVecFunRef{}};
-\node (F1-3) at (8,0)  {\large \LangPVecFunRef{}};
-\node (F1-4) at (12,0)  {\large \LangPVecAlloc{}};
-\node (F1-5) at (12,-2)  {\large \LangPVecAlloc{}};
-\node (F1-6) at (8,-2)  {\large \LangPVecAlloc{}};
-\node (C3-2) at (4,-2)  {\large \LangCLoopPVec{}};
+\node (Lpoly) at (0,4)  {\large \LangPoly{}};
+\node (Lpolyp) at (4,4)  {\large \LangInst{}};
+\node (Lgradualp) at (8,4)  {\large \LangCast{}};
+\node (Llambdapp) at (12,4)  {\large \LangProxy{}};
+\node (Llambdaproxy) at (12,2)  {\large \LangPVec{}};
+\node (Llambdaproxy-2) at (8,2)  {\large \LangPVec{}};
+\node (Llambdaproxy-3) at (4,2)  {\large \LangPVec{}};
+\node (Llambdaproxy-4) at (0,2)  {\large \LangPVecFunRef{}};
+\node (Llambdaproxy-5) at (0,0)  {\large \LangPVecFunRef{}};
+\node (F1-1) at (4,0)  {\large \LangPVecFunRef{}};
+\node (F1-2) at (8,0)  {\large \LangPVecFunRef{}};
+\node (F1-3) at (12,0)  {\large \LangPVecFunRef{}};
+\node (F1-4) at (12,-2)  {\large \LangPVecAlloc{}};
+\node (F1-5) at (8,-2)  {\large \LangPVecAlloc{}};
+\node (F1-6) at (4,-2)  {\large \LangPVecAlloc{}};
+\node (C3-2) at (0,-2)  {\large \LangCLoopPVec{}};
 
 
 \node (x86-2) at (0,-4)  {\large \LangXIndCallVar{}};
 \node (x86-2) at (0,-4)  {\large \LangXIndCallVar{}};
 \node (x86-2-1) at (0,-6)  {\large \LangXIndCallVar{}};
 \node (x86-2-1) at (0,-6)  {\large \LangXIndCallVar{}};
@@ -22174,31 +22175,33 @@ annotations and the body.
 \node (x86-5) at (8,-6) {\large \LangXIndCall{}};
 \node (x86-5) at (8,-6) {\large \LangXIndCall{}};
 
 
 
 
+\path[->,bend left=15] (Lpoly) edge [above] node
+     {\ttfamily\footnotesize resolve} (Lpolyp);
 \path[->,bend left=15] (Lpolyp) edge [above] node
 \path[->,bend left=15] (Lpolyp) edge [above] node
      {\ttfamily\footnotesize erase\_types} (Lgradualp);
      {\ttfamily\footnotesize erase\_types} (Lgradualp);
 \path[->,bend left=15] (Lgradualp) edge [above] node
 \path[->,bend left=15] (Lgradualp) edge [above] node
      {\ttfamily\footnotesize lower\_casts} (Llambdapp);
      {\ttfamily\footnotesize lower\_casts} (Llambdapp);
-\path[->,bend left=15] (Llambdapp) edge [above] node
+\path[->,bend left=15] (Llambdapp) edge [left] node
      {\ttfamily\footnotesize differentiate\_proxies} (Llambdaproxy);
      {\ttfamily\footnotesize differentiate\_proxies} (Llambdaproxy);
-\path[->,bend left=15] (Llambdaproxy) edge [left] node
+\path[->,bend left=15] (Llambdaproxy) edge [below] node
      {\ttfamily\footnotesize shrink} (Llambdaproxy-2);
      {\ttfamily\footnotesize shrink} (Llambdaproxy-2);
-\path[->,bend left=15] (Llambdaproxy-2) edge [above] node
+\path[->,bend right=15] (Llambdaproxy-2) edge [above] node
      {\ttfamily\footnotesize uniquify} (Llambdaproxy-3);
      {\ttfamily\footnotesize uniquify} (Llambdaproxy-3);
 \path[->,bend right=15] (Llambdaproxy-3) edge [above] node
 \path[->,bend right=15] (Llambdaproxy-3) edge [above] node
      {\ttfamily\footnotesize reveal\_functions} (Llambdaproxy-4);
      {\ttfamily\footnotesize reveal\_functions} (Llambdaproxy-4);
-\path[->,bend right=15] (Llambdaproxy-4) edge [above] node
+\path[->,bend right=15] (Llambdaproxy-4) edge [right] node
      {\ttfamily\footnotesize reveal\_casts} (Llambdaproxy-5);
      {\ttfamily\footnotesize reveal\_casts} (Llambdaproxy-5);
-\path[->,bend right=15] (Llambdaproxy-5) edge [right] node
+\path[->,bend right=15] (Llambdaproxy-5) edge [below] node
      {\ttfamily\footnotesize convert\_assignments} (F1-1);
      {\ttfamily\footnotesize convert\_assignments} (F1-1);
-\path[->,bend right=15] (F1-1) edge [below] node
+\path[->,bend left=15] (F1-1) edge [above] node
      {\ttfamily\footnotesize convert\_to\_closures} (F1-2);
      {\ttfamily\footnotesize convert\_to\_closures} (F1-2);
 \path[->,bend left=15] (F1-2) edge [above] node
 \path[->,bend left=15] (F1-2) edge [above] node
      {\ttfamily\footnotesize limit\_functions} (F1-3);
      {\ttfamily\footnotesize limit\_functions} (F1-3);
-\path[->,bend left=15] (F1-3) edge [above] node
+\path[->,bend left=15] (F1-3) edge [left] node
      {\ttfamily\footnotesize expose\_allocation} (F1-4);
      {\ttfamily\footnotesize expose\_allocation} (F1-4);
-\path[->,bend left=15] (F1-4) edge [left] node
+\path[->,bend left=15] (F1-4) edge [below] node
      {\ttfamily\footnotesize uncover\_get!} (F1-5);
      {\ttfamily\footnotesize uncover\_get!} (F1-5);
-\path[->,bend left=15] (F1-5) edge [below] node
+\path[->,bend right=15] (F1-5) edge [above] node
      {\ttfamily\footnotesize remove\_complex\_operands} (F1-6);
      {\ttfamily\footnotesize remove\_complex\_operands} (F1-6);
 \path[->,bend right=15] (F1-6) edge [above] node
 \path[->,bend right=15] (F1-6) edge [above] node
      {\ttfamily\footnotesize explicate\_control} (C3-2);
      {\ttfamily\footnotesize explicate\_control} (C3-2);
@@ -22301,7 +22304,7 @@ needed to compile \LangPoly{}.
 \index{subject}{interpreter}
 \index{subject}{interpreter}
 
 
 We provide interpreters for each of the source languages \LangInt{},
 We provide interpreters for each of the source languages \LangInt{},
-\LangVar{}, $\ldots$ in the files \code{interp\_Lint.rkt},
+\LangVar{}, $\ldots$ in the files \code{interp-Lint.rkt},
 \code{interp-Lvar.rkt}, and so on.  The interpreters for the
 \code{interp-Lvar.rkt}, and so on.  The interpreters for the
 intermediate languages \LangCVar{} and \LangCIf{} are in
 intermediate languages \LangCVar{} and \LangCIf{} are in
 \code{interp-Cvar.rkt} and \code{interp-C1.rkt}.  The interpreters for
 \code{interp-Cvar.rkt} and \code{interp-C1.rkt}.  The interpreters for
@@ -22316,10 +22319,9 @@ The utility functions described in this section are in the
 
 
 \paragraph{\code{interp-tests}}
 \paragraph{\code{interp-tests}}
 
 
-The \key{interp-tests} function runs the compiler passes and the
-interpreters on each of the specified tests to check whether each pass
-is correct. The \key{interp-tests} function has the following
-parameters:
+This function runs the compiler passes and the interpreters on each of
+the specified tests to check whether each pass is correct. The
+\key{interp-tests} function has the following parameters:
 \begin{description}
 \begin{description}
 \item[name (a string)] A name to identify the compiler,
 \item[name (a string)] A name to identify the compiler,
 \item[typechecker] A function of exactly one argument that either
 \item[typechecker] A function of exactly one argument that either
@@ -22365,11 +22367,11 @@ the same name with extension \key{.tyerr}.
 
 
 \paragraph{\code{compiler-tests}}
 \paragraph{\code{compiler-tests}}
 
 
-Runs the compiler passes to generate x86 (a \key{.s} file) and then
-runs the GNU C compiler (gcc) to generate machine code.  It runs the
-machine code and checks that the output is $42$. The parameters to the
-\code{compiler-tests} function are similar to those of the
-\code{interp-tests} function, and they consist of
+This function runs the compiler passes to generate x86 (a \key{.s}
+file) and then runs the GNU C compiler (gcc) to generate machine code.
+It runs the machine code and checks that the output is $42$. The
+parameters to the \code{compiler-tests} function are similar to those
+of the \code{interp-tests} function, and they consist of
 \begin{itemize}
 \begin{itemize}
 \item a compiler name (a string),
 \item a compiler name (a string),
 \item a type checker,
 \item a type checker,
@@ -22381,32 +22383,33 @@ machine code and checks that the output is $42$. The parameters to the
 
 
 \paragraph{\code{compile-file}}
 \paragraph{\code{compile-file}}
 
 
-Takes a description of the compiler passes (see the comment for
-\key{interp-tests}) and returns a function that, given a program file
-name (a string ending in \key{.rkt}), applies all the passes and
-writes the output to a file whose name is the same as the program file
-name with extension \key{.rkt} replaced by \key{.s}.
+This function takes a description of the compiler passes (see the
+comment for \key{interp-tests}) and returns a function that, given a
+program file name (a string ending in \key{.rkt}), applies all the
+passes and writes the output to a file whose name is the same as the
+program file name with extension \key{.rkt} replaced by \key{.s}.
 
 
 
 
 \paragraph{\code{read-program}}
 \paragraph{\code{read-program}}
 
 
-Takes a file path and parses that file (it must be a Racket program)
-into an abstract syntax tree.
+This function takes a file path and parses that file (it must be a
+Racket program) into an abstract syntax tree.
 
 
 \paragraph{\code{parse-program}}
 \paragraph{\code{parse-program}}
 
 
-Takes an S-expression representation of an abstract syntax tree and
-converts it into the struct-based representation.
+This function takes an S-expression representation of an abstract
+syntax tree and converts it into the struct-based representation.
 
 
 \paragraph{\code{assert}}
 \paragraph{\code{assert}}
 
 
-Takes two parameters, a string (\code{msg}) and Boolean (\code{bool}),
-and displays the message \key{msg} if the Boolean \key{bool} is false.
+This function takes two parameters, a string (\code{msg}) and Boolean
+(\code{bool}), and displays the message \key{msg} if the Boolean
+\key{bool} is false.
 
 
 \paragraph{\code{lookup}}
 \paragraph{\code{lookup}}
 
 
 % remove discussion of lookup? -Jeremy
 % remove discussion of lookup? -Jeremy
-takes a key and an alist and returns the first value that is
+This function takes a key and an alist and returns the first value that is
 associated with the given key, if there is one. If not, an error is
 associated with the given key, if there is one. If not, an error is
 triggered.  The alist may contain both immutable pairs (built with
 triggered.  The alist may contain both immutable pairs (built with
 \key{cons}) and mutable pairs (built with \key{mcons}).
 \key{cons}) and mutable pairs (built with \key{mcons}).