1722 Isabelle's inference kernel, i.e. by a combination of resolution and |
1722 Isabelle's inference kernel, i.e. by a combination of resolution and |
1723 simplification. Unfortunately, this approach is rather inefficient. |
1723 simplification. Unfortunately, this approach is rather inefficient. |
1724 A more efficient way of executing specifications is to translate |
1724 A more efficient way of executing specifications is to translate |
1725 them into a functional programming language such as ML. |
1725 them into a functional programming language such as ML. |
1726 |
1726 |
1727 Isabelle provides two generic frameworks to support code generation |
1727 Isabelle provides a generic framework to support code generation |
1728 from executable specifications. Isabelle/HOL instantiates these |
1728 from executable specifications. Isabelle/HOL instantiates these |
1729 mechanisms in a way that is amenable to end-user applications. |
1729 mechanisms in a way that is amenable to end-user applications. Code |
1730 *} |
1730 can be generated for functional programs (including overloading |
1731 |
1731 using type classes) targeting SML \cite{SML}, OCaml \cite{OCaml}, |
1732 |
1732 Haskell \cite{haskell-revised-report} and Scala |
1733 subsection {* The new code generator (F. Haftmann) *} |
|
1734 |
|
1735 text {* This framework generates code from functional programs |
|
1736 (including overloading using type classes) to SML \cite{SML}, OCaml |
|
1737 \cite{OCaml}, Haskell \cite{haskell-revised-report} and Scala |
|
1738 \cite{scala-overview-tech-report}. Conceptually, code generation is |
1733 \cite{scala-overview-tech-report}. Conceptually, code generation is |
1739 split up in three steps: \emph{selection} of code theorems, |
1734 split up in three steps: \emph{selection} of code theorems, |
1740 \emph{translation} into an abstract executable view and |
1735 \emph{translation} into an abstract executable view and |
1741 \emph{serialization} to a specific \emph{target language}. |
1736 \emph{serialization} to a specific \emph{target language}. |
1742 Inductive specifications can be executed using the predicate |
1737 Inductive specifications can be executed using the predicate |