%; whizzy-master "developpeur.tex"

\chapter{Introduction}

\framac (Framework for Modular Analyses of \C) is a software platform which
helps the development of static analysis tools for \C programs thanks to a
plug-ins mechanism. 

This guide aims at helping developers program within the \framac platform,
in particular for developing a new analysis or a new source-to-source
transformation through a new plug-in. For this purpose, it provides a
step-by-step tutorial, a general presentation of the \framac software
architecture, a set of \framac-specific programming rules and an overview of the
API of the \framac kernel. However it does not provide a complete documentation
of the \framac API and, in particular, it does not describe the API of 
existing \framac plug-ins. This API is documented in the \html source code
generated by \texttt{make doc} (see
Section~\ref{doc:rules} for additional details about this
documentation). 

This guide introduces neither the use of \framac which is the purpose of the
user manual~\cite{userman} and of the reference articles~\cite{sefm12,fac15},
nor the use of plug-ins which are documented in separated and dedicated
manuals~\cite{slicing,wp,value,rte,aorai}.  We assume that the reader of this
guide already read the \framac user manual and knows the main \framac concepts.

The reader of this guide may be either a \framac beginner who just finished 
reading the user manual and wishes to develop his/her own analysis with the help
of \framac, an intermediate-level plug-in developer who would like to have 
a better understanding of one particular aspect of the framework, 
or a \framac expert who wants to remember details about one specific point 
of the \framac development.

\framac is fully developed within the \ocaml programming
language~\cite{caml}. Motivations for this choice are given in a \framac
experience report~\cite{framac-experience}. However this guide \emph{does not}
provide any introduction to this programming language: the World Wide Web
already contains plenty resources for \caml developers (see for instance
\url{http://caml.inria.fr/resources/doc/index.en.html}).

\section{About this document}

To ease reading, section heads may state
the category of readers they are intended for and a set of prerequisites.

Appendix \ref{chap:changes} references all the changes made to
this document between successive \framac releases.

In the index, page numbers written in bold italics (e.g.  
\textcolor{red}{\textit{\textbf{1}}}) reference the defining sections for the
corresponding entries while other numbers (e.g. \textcolor{red}{1}) are
less important references. 
Furthermore, the name of each \caml value
in the index corresponds to an actual \framac value.
In the \framac source code, the
\ocamldoc documentation of such a value contains the special tag
\texttt{@plugin development guide} while, in the \html documentation of the
\framac API, the note ``\textbf{Consult the Plugin Development Guide} for
additional details'' is attached the value name.


\begin{important}
  The most important paragraphs are displayed inside gray boxes like this one.
  A plug-in developer \textbf{must} follow them very carefully.
\end{important}

\begin{important}
  There are numerous code snippets in this document. Beware that copy/pasting
  them from the PDF to your favorite text editor may prevent your code from
  compiling, because the PDF text can contain non-ASCII characters.
\end{important}

\section{Outline}

This guide is organised in four parts.

\begin{description}
\item[Chapter~\ref{chap:tutorial}] is a step-by-step tutorial for developing a
  new plug-in within the \framac platform. At the end of this tutorial, a
  developer should be able to extend \framac with a simple analysis available
  as a \framac plug-in. 
\item[Chapter~\ref{chap:archi}] presents the \framac software
  architecture. 
\item[Chapter~\ref{chap:advance}] details how to use all the services provided
  by \framac in order to develop a fully integrated plug-in. 
\item[Chapter~\ref{chap:refman}] is a reference manual with complete
  documentation for some particular points of the \framac platform.
\end{description}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Local Variables:
%%% TeX-master: "main"
%%% ispell-local-dictionary: "english"
%%% End:
