Fix spelling as suggested by aspell.
[matthijs/master-project/report.git] / Chapters / Context.tex
index a12fe73e0f09260efa52a0cc04e9226a18b90909..7323b5b42f60b0f3d4243d4c523d30f3281ddcf8 100644 (file)
@@ -9,11 +9,10 @@
       \blank[medium]
      
       \startcitedquotation[deursen00]
-      A domain-specific language (\small{DSL}) is a program-
-      ming language or executable specification language
-      that offers, through appropriate notations and ab-
-      stractions, expressive power focused on, and usu-
-      ally restricted to, a particular problem domain.
+      A domain-specific language (\small{DSL}) is a programming language
+      or executable specification language that offers, through
+      appropriate notations and abstractions, expressive power focused
+      on, and usually restricted to, a particular problem domain.
       \stopcitedquotation
 
       An embedded \small{DSL} is a \small{DSL} that is embedded in
@@ -29,7 +28,7 @@
       polymorphism, higher-order values or type classes can be used in
       the embedded language. \cite[hudak96]
 
-      For an \small{EDSL}, the definitions of compiletime and runtime
+      For an \small{EDSL}, the definitions of compile-time and run-time
       are typically fuzzy (and thus hard to define here), since the
       \small{EDSL} \quote{compiler} is usually compiled by the same
       Haskell compiler as the \small{EDSL} program itself.
   this not been done before?}. Using a functional language for describing hardware
   is not a new idea at all. In fact, there has been research into functional
   hardware description even before the conventional hardware description
-  languages were created. Examples of these are µFP \cite[sheeran83] and
+  languages were created. Examples of these are µFP \cite[sheeran83]\ and
   Ruby \cite[jones90]. Functional languages were not nearly as advanced
   as they are now, and functional hardware description never really got
   off. 
 
   Recently, there have been some renewed efforts, especially using the
-  Haskell functional language. Examples are Lava \cite[claessen00] (an
-  \small{EDSL}) and ForSyde \cite[sander04] (an \small{EDSL} using
-  Template Haskell). \cite[baaij09] has a more complete overview of the
+  Haskell functional language. Examples are Lava \cite[claessen00]\ (an
+  \small{EDSL}) and ForSyde \cite[sander04]\ (an \small{EDSL} using
+  Template Haskell). \cite[baaij09]\ has a more complete overview of the
   current field.
 
   We will now have a look at the existing hardware description languages,
       define limitations on values, making it easier to find violations
       and thus bugs.
       \item Easy to process. Functional languages have nice properties like
-      purity \refdef{purity} and single binding behaviour, which make it easy
+      purity \refdef{purity} and single binding behavior, which make it easy
       to apply program transformations and optimizations and could potentially
       simplify program verification.
     \stopitemize
   
+  \section[sec:context:fhdls]{Existing functional hardware description languages}
+    As noted above, this path has been explored before. However, current
+    embedded functional hardware description languages (in particular
+    those using Haskell) are limited. Below a number of downsides are
+    sketched of the recent attempts using the Haskell language.
+    \cite[baaij09]\ has a more complete overview of these and other
+    languages.
+    
+    This list uses Lava and ForSyDe as examples, but tries to generalize
+    the conclusions to the techniques of embedding a \small{DSL} and
+    using Template Haskell.
+
     \placeintermezzo{}{
       \defref{Template Haskell}
       \startframedtext[width=8.5cm,background=box,frame=no]
       \stopalignment
       \blank[medium]
       
-      Template Haskell is an extension to the \GHC compiler that allows
+      Template Haskell is an extension to the \GHC\ compiler that allows
       a program to mark some parts to be evaluated \emph{at compile
       time}. These \emph{templates} can then access the abstract syntax
       tree (\small{AST}) of the program that is being compiled and
       generate parts of this \small{AST}.
 
       Template Haskell is a very powerful, but also complex mechanism.
-      It was inteded to simplify the generation of some repetive pieces
+      It was intended to simplify the generation of some repetitive pieces
       of code, but its introspection features have inspired all sorts of
       applications, such as hardware description compilers.
       \stopframedtext
     }
 
-  \section[sec:context:fhdls]{Existing functional hardware description languages}
-    As noted above, this path has been explored before. However, current
-    embedded functional hardware description languages (in particular
-    those using Haskell) are limited. Below a number of downsides are
-    sketched of the recent attempts using the Haskell language.
-    \cite[baaij09] has a more complete overview of these and other
-    languages.
-    
-    This list uses Lava and ForSyDe as examples, but tries to generalize
-    the conclusions to the techniques of embedding a \small{DSL} and
-    using Template Haskell.
-
     \startitemize
       \item Not all of Haskell's constructs can be captured by embedded domain
       specific languages. For example, an \hs{if} or \hs{case}
       expression is typically executed once when the Haskell description
       is processed and only the result is reflected in the generated
-      datastructure (and thus in the final program). In Lava, for
+      data-structure (and thus in the final program). In Lava, for
       example, conditional assignment can only be described by using
       explicit multiplexer components, not using any of Haskell's
       compact mechanisms (such as \hs{case} expressions or pattern
       with an \small{EDSL} approach, it can get confusing when to use
       \small{TH} and when not to.
       \item Function hierarchies cannot be observed in an \small{EDSL}.
-      For example, Lava generates a single flat \VHDL architecture,
+      For example, Lava generates a single flat \VHDL\ architecture,
       which has no structure whatsoever. Even though this is strictly
       correct, it offers no support to the synthesis software about
       which parts of the system can best be placed together and makes