4ba3766dae37f24910db8b9bfdc0d5559db34ce0
[barrelfish] / tools / fof / Introduction.tex
1 \chapter*{Introduction}
2 \epigraph{The Filet-o-Fish contains a battered fish patty made mostly
3           from pollock and/or hoki.}{Wikipedia}
4
5
6 Filet-o-Fish, abbreviated \emph{FoF} hereafter, is a tool for the
7 working language designer. Developed in the context of
8 Barrelfish\cite{mmcs-barrelfish}, FoF aims at easing the development
9 of Domain-Specific Languages (DSL) as well as enhancing their
10 safety. As a side effect of FoF's design, it also becomes easier for
11 the user of a DSL to understand ``what is going on''.
12
13 To achieve this goal, Filet-o-Fish defines a set of
14 \emph{combinators}. A combinator is a Haskell function manipulating
15 some Haskell data-types. In this case, our combinators manipulate an
16 abstraction of the C language constructs, such as integers, floats,
17 structures, arrays, etc. Altogether, this set of combinators defines
18 an \emph{embedded language} in Haskell. To avoid the confusion with
19 the DSLs we are willing to implement, we term this embedded language
20 the \emph{meta-language}. 
21
22 You seems confused now. Listen. The Hamlet compiler is implemented
23 with Filet-o-Fish. Hamlet is a Domain-Specific Language. In Hamlet's
24 compiler, we use FoF to \emph{get the job done}, ie. to get the actual
25 C code out of our capability system description. Hence, the Hamlet
26 compiler is partly developed in the FoF meta-language. Understood?
27
28 However, Filet-o-Fish is much more than a language to get the job
29 done: being able to compile the meta-language to C is just one
30 side-effect of our work. By writing a DSL compiler with FoF, you
31 actually define the \emph{semantics} of the DSL. Whereas the syntax
32 defines the set of legal expressions of a language, the semantics
33 assign a meaning to the terms of the language. Note that the C
34 language does not have any formal semantics. And, no, this is not
35 normal. This is Evil.
36
37 For a DSL, the benefit of having a formal semantics is twofold. First,
38 the semantics of your DSL is the most precise and accurate description
39 of the behavior of your domain-specific constructs. An informal,
40 in-English specification of the DSL might fail to capture some
41 specific points. The formal semantics is an ultimate documentation,
42 which doesn't lie. Second, defining a formal semantics is a necessary
43 step before any compiler correctness proof, be it mechanized or on
44 paper. Therefore, thanks to FoF, you get a formal, mechanized
45 semantics of your DSL. And this is for free.
46
47 Finally, this document is the literate Haskell code of Filet-o-Fish:
48 the code described in the following pages is the one that is compiled
49 by the Haskell compiler. Therefore, this is the most accurate,
50 up-to-date documentation of Fof's internals.
51
52 So much marketing, let us look at the code.
53