language (you can't use case statements in Lava, since they would be
executed only once during circuit generation) and extra notational overhead.
-\fxnote{There should be a section on DSLs here}
-
We will now have a look at the existing hardware description languages,
both conventional and functional to see the fields in which Cλash is
operating.
simplify program verification.
\stopitemize
- \section{Existing functional hardware description languages}
+ \placeintermezzo{}{
+ \defref{EDSL}
+ \startframedtext[width=8.5cm,background=box,frame=no]
+ \startalignment[center]
+ {\tfa Embedded domain-specific languages (\small{EDSL})}
+ \stopalignment
+ \blank[medium]
+
+ \startcitedquotation[hudak96]
+ 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.
+ \stopcitedquotation
+
+ \todo{ref: http://portal.acm.org/citation.cfm?id=352035\&dl=}
+
+ An embedded \small{DSL} is a \small{DSL} that is embedded in
+ another language. Haskell is commonly used to embed \small{DSL}s
+ in, which typically means a number of Haskell functions and types
+ are made available that can be called to construct a large value
+ of some domain-specific datatype (\eg, a circuit datatype). This
+ generated datatype can then be processed further by the
+ \small{EDSL} \quote{compiler} (which runs in the same environment
+ as the \small{EDSL} itself. The embedded language is then a, mostly
+ applicative, subset of Haskell where the library functions are the
+ primitives. Sometimes advanced haskell features such as
+ polymorphism, higher order values or type classes can be used in
+ the embedded language.
+ \stopframedtext
+ }
+
+ \section[sec:context:fhdls]{Existing functional hardware description languages}
As noted above, we're not the first to walk this path. However, current
embedded functional hardware description languages (in particular those
using Haskell) are limited by:\todo{Separate TH and EDSL approaches
\setupcaption[intermezzo][location=top,number=no] % Put captions on top
\setupheads[aligntitle=float]
+
+% A variant of \startquotation that puts a citation directly after the
+% quote.
+\long\def\startcitedquotation[#1]#2\stopcitedquotation
+ {\bgroup \par
+ \startnarrower
+ \symbol[leftquotation]%
+ #2\removeunwantedspaces
+ \symbol[rightquotation]%
+ \mbox{ }\cite[#1]
+ \stopnarrower
+ \par \egroup}
+
% vim: set sw=2 sts=2 expandtab: