\contentsline {chapter}{\numberline {1}Programming language design}{1}
\contentsline {chapter}{\numberline {2}Overview}{3}
\contentsline {section}{\numberline {2.1}Abstract programming language design}{3}
\contentsline {subsection}{\numberline {2.1.1}Surface language}{3}
\contentsline {subsection}{\numberline {2.1.2}Kernel language}{3}
\contentsline {subsection}{\numberline {2.1.3}Type language}{3}
\contentsline {subsection}{\numberline {2.1.4}Intermediate language}{3}
\contentsline {subsection}{\numberline {2.1.5}Execution backend}{3}
\contentsline {subsubsection}{Semantic language: Runtime objects}{3}
\contentsline {subsubsection}{Type-directed Display manager}{3}
\contentsline {subsubsection}{Type-directed Data Reader}{3}
\contentsline {subsection}{\numberline {2.1.6}Pragmatics}{3}
\contentsline {subsubsection}{Concrete {\em vs.}\ abstract error handling}{3}
\contentsline {subsubsection}{Concrete {\em vs.}\ abstract Vocabulary}{3}
\contentsline {chapter}{\numberline {3}The kernel language}{5}
\contentsline {section}{\numberline {3.1}Kernel expression}{5}
\contentsline {section}{\numberline {3.2}Processing a kernel expression}{5}
\contentsline {subsection}{\numberline {3.2.1}Sanitizer}{6}
\contentsline {subsection}{\numberline {3.2.2}Typechecker}{6}
\contentsline {subsection}{\numberline {3.2.3}Compiler}{6}
\contentsline {section}{\numberline {3.3}Description of kernel expressions}{7}
\contentsline {subsection}{\numberline {3.3.1}Constant}{11}
\contentsline {subsection}{\numberline {3.3.2}Abstraction}{12}
\contentsline {subsection}{\numberline {3.3.3}Application}{13}
\contentsline {subsection}{\numberline {3.3.4}Local}{14}
\contentsline {subsection}{\numberline {3.3.5}Parameter}{14}
\contentsline {subsection}{\numberline {3.3.6}Global}{14}
\contentsline {subsection}{\numberline {3.3.7}Dummy}{14}
\contentsline {subsection}{\numberline {3.3.8}Definition}{14}
\contentsline {subsection}{\numberline {3.3.9}IfThenElse}{14}
\contentsline {subsection}{\numberline {3.3.10}AndOr}{14}
\contentsline {subsubsection}{And}{15}
\contentsline {subsubsection}{Or}{15}
\contentsline {subsection}{\numberline {3.3.11}Sequence}{16}
\contentsline {subsection}{\numberline {3.3.12}Let}{16}
\contentsline {subsection}{\numberline {3.3.13}Loop}{16}
\contentsline {subsection}{\numberline {3.3.14}ExitWithValue}{17}
\contentsline {subsection}{\numberline {3.3.15}Assignment}{19}
\contentsline {subsection}{\numberline {3.3.16}NewArray}{19}
\contentsline {subsection}{\numberline {3.3.17}ArraySlot}{19}
\contentsline {subsection}{\numberline {3.3.18}ArraySlotUpdate}{19}
\contentsline {subsection}{\numberline {3.3.19}ArrayExtension}{19}
\contentsline {subsection}{\numberline {3.3.20}ArrayInitializer}{19}
\contentsline {subsection}{\numberline {3.3.21}Tuple}{19}
\contentsline {subsection}{\numberline {3.3.22}NamedTuple}{19}
\contentsline {subsection}{\numberline {3.3.23}TupleProjection}{19}
\contentsline {subsection}{\numberline {3.3.24}TupleUpdate}{19}
\contentsline {subsection}{\numberline {3.3.25}NewObject}{19}
\contentsline {subsection}{\numberline {3.3.26}DottedNotation}{19}
\contentsline {subsection}{\numberline {3.3.27}FieldUpdate}{21}
\contentsline {subsection}{\numberline {3.3.28}Homomorphism}{21}
\contentsline {subsection}{\numberline {3.3.29}Comprehension}{24}
\contentsline {subsubsection}{Comprehension}{25}
\contentsline {chapter}{\numberline {4}The type language}{49}
\contentsline {section}{\numberline {4.1}Overview}{49}
\contentsline {subsection}{\numberline {4.1.1}Polymorphism}{49}
\contentsline {subsection}{\numberline {4.1.2}Multiple Type Overloading}{50}
\contentsline {subsection}{\numberline {4.1.3}Currying}{50}
\contentsline {subsection}{\numberline {4.1.4}Standardizing}{50}
\contentsline {subsection}{\numberline {4.1.5}Copying}{51}
\contentsline {subsection}{\numberline {4.1.6}Equality}{51}
\contentsline {subsection}{\numberline {4.1.7}Unifying}{51}
\contentsline {subsection}{\numberline {4.1.8}Boxing/Unboxing}{51}
\contentsline {section}{\numberline {4.2}The type system}{52}
\contentsline {section}{\numberline {4.3}Static types}{53}
\contentsline {subsection}{\numberline {4.3.1}Primitive types}{53}
\contentsline {subsubsection}{Boxable types}{53}
\contentsline {subsubsection}{Boxed types}{53}
\contentsline {subsection}{\numberline {4.3.2}Type constructors}{53}
\contentsline {subsubsection}{Function types}{53}
\contentsline {subsubsection}{Tuple types}{53}
\contentsline {subsubsection}{Array types}{54}
\contentsline {subsubsection}{Collection types}{54}
\contentsline {subsubsection}{Class types}{54}
\contentsline {subsection}{\numberline {4.3.3}Polymorphic types}{56}
\contentsline {section}{\numberline {4.4}Type definitions}{56}
\contentsline {subsection}{\numberline {4.4.1}Type aliasing}{57}
\contentsline {subsection}{\numberline {4.4.2}Type hiding}{57}
\contentsline {section}{\numberline {4.5}Dynamic types}{57}
\contentsline {subsection}{\numberline {4.5.1}Extensional types}{58}
\contentsline {subsection}{\numberline {4.5.2}Intensional types}{58}
\contentsline {subsubsection}{Example: non-negative numbers}{58}
\contentsline {chapter}{\numberline {5}The intermediate language}{59}
\contentsline {section}{\numberline {5.1}Do-nothing instruction}{59}
\contentsline {section}{\numberline {5.2}Push instructions}{59}
\contentsline {section}{\numberline {5.3}Subroutine instructions}{60}
\contentsline {section}{\numberline {5.4}Pop instructions}{61}
\contentsline {section}{\numberline {5.5}Relocatable instructions}{61}
\contentsline {section}{\numberline {5.6}Conversion instructions}{61}
\contentsline {section}{\numberline {5.7}Assignment instructions}{62}
\contentsline {section}{\numberline {5.8}Tuple component instructions}{62}
\contentsline {section}{\numberline {5.9}Array/Map allocation instructions}{62}
\contentsline {section}{\numberline {5.10}Array/Map slot instructions}{63}
\contentsline {section}{\numberline {5.11}Field instructions}{64}
\contentsline {section}{\numberline {5.12}Built-in operations}{64}
\contentsline {subsection}{\numberline {5.12.1}Arithmetic operations}{64}
\contentsline {subsection}{\numberline {5.12.2}Arithmetic relations}{65}
\contentsline {subsection}{\numberline {5.12.3}Boolean operations}{66}
\contentsline {subsection}{\numberline {5.12.4}Map and Size operations}{66}
\contentsline {subsection}{\numberline {5.12.5}Container operations}{66}
\contentsline {subsection}{\numberline {5.12.6}Set operations}{67}
\contentsline {subsection}{\numberline {5.12.7}Set relations}{67}
\contentsline {subsection}{\numberline {5.12.8}Set element operations}{67}
\contentsline {subsection}{\numberline {5.12.9}Range operations}{68}
\contentsline {subsection}{\numberline {5.12.10}String operations}{68}
\contentsline {subsection}{\numberline {5.12.11}I/O operations}{68}
\contentsline {section}{\numberline {5.13}Dummy instructions}{69}
\contentsline {chapter}{\numberline {6}The backend system}{71}
\contentsline {section}{\numberline {6.1}The runtime system}{71}
\contentsline {section}{\numberline {6.2}The runtime objects}{72}
\contentsline {section}{\numberline {6.3}The display manager}{72}
\contentsline {section}{\numberline {6.4}The error manager}{72}
\contentsline {chapter}{\numberline {7}A full example---\textsc {\texttt {hak\_ll}}}{73}
\contentsline {chapter}{\numberline {8}Conclusion}{75}
\contentsline {chapter}{\numberline {A}A word on traceability}{77}
\contentsline {section}{\numberline {A.1}Relating concrete and abstract syntax}{77}
\contentsline {subsection}{\numberline {A.1.1}Syntax errors}{77}
\contentsline {subsection}{\numberline {A.1.2}Static Semantics errors}{77}
\contentsline {subsubsection}{Typing errors}{77}
\contentsline {subsubsection}{Other Static Semantics errors}{77}
\contentsline {subsection}{\numberline {A.1.3}Dynamic Semantics errors}{77}
\contentsline {subsubsection}{Runtime errors}{77}
\contentsline {subsubsection}{Java errors}{77}
\contentsline {section}{\numberline {A.2}Displaying and reading}{77}
\contentsline {subsection}{\numberline {A.2.1}Displaying}{78}
\contentsline {subsection}{\numberline {A.2.2}Reading}{78}
\contentsline {subsection}{\numberline {A.2.3}Concretizing abstract syntax down}{78}
\contentsline {subsection}{\numberline {A.2.4}Abstracting concrete syntax away}{78}
\contentsline {chapter}{\numberline {B}A four-panelled architecture}{79}
\contentsline {section}{\numberline {B.1}The Complete Kernel}{79}
\contentsline {subsection}{\numberline {B.1.1}Sanitizing}{79}
\contentsline {subsection}{\numberline {B.1.2}Type checking {\em vs.}\ inference}{79}
\contentsline {subsection}{\numberline {B.1.3}Compiling}{79}
\contentsline {section}{\numberline {B.2}The Complete Type System}{80}
\contentsline {subsection}{\numberline {B.2.1}The type prover}{81}
\contentsline {section}{\numberline {B.3}Structure of the \texttt {TypeChecker}}{81}
\contentsline {subsection}{\numberline {B.3.1}The type constructs}{82}
\contentsline {subsection}{\numberline {B.3.2}Defining new types}{82}
\contentsline {section}{\numberline {B.4}The Basic Instruction Set}{82}
\contentsline {section}{\numberline {B.5}The Complete Backend}{82}
\contentsline {subsection}{\numberline {B.5.1}The \texttt {Runtime} class}{82}
\contentsline {subsection}{\numberline {B.5.2}The \texttt {RuntimeObject} class}{82}
\contentsline {subsection}{\numberline {B.5.3}The \texttt {DisplayManager} class}{82}
\contentsline {subsection}{\numberline {B.5.4}The \texttt {ErrorManager} class}{82}
