Cours de la semaine
This commit is contained in:
parent
e74c3a6dc8
commit
cc8094acc0
10 changed files with 792 additions and 3 deletions
18
cmp/20120221-typage.tex
Normal file
18
cmp/20120221-typage.tex
Normal file
|
@ -0,0 +1,18 @@
|
|||
\chapter{Types}
|
||||
|
||||
\section{Pourquoi utiliser des types}
|
||||
|
||||
Au niveau du langage d'assemblage, il n'y a pas de type.
|
||||
|
||||
Toutes les variables du shell sont des chaînes de caractères, il n'y a qu'un
|
||||
seul type, on ne parle donc pas de typage.\\
|
||||
|
||||
Les types permettent d'aider le programmeur pour lui montrer lorsqu'il fait
|
||||
quelque chose d'incorrect.
|
||||
|
||||
Cela permet également d'ajouter des variables plus abstraites : tableaux,
|
||||
records, ...
|
||||
|
||||
\section{Le concept des types}
|
||||
|
||||
\section{Introduction au calcul des séquents}
|
111
cmp/20120306.tex
Normal file
111
cmp/20120306.tex
Normal file
|
@ -0,0 +1,111 @@
|
|||
\chapter{Représentation intermédiaire}
|
||||
|
||||
void : () : sxp const 0
|
||||
|
||||
\section{Gestion de la mémoire}
|
||||
|
||||
On distingue cinq types de mémoire~:
|
||||
\begin{itemize}
|
||||
\item \textbf{Les registres~:} dans les 32 registres sur les processeurs
|
||||
MIPS.\\
|
||||
C'est une mémoire très rapide mais très chère.
|
||||
\item \textbf{Cache de niveau 1~:} dans les 8ko
|
||||
\item \textbf{Cache niveau 2~:} de l'ordre d'une 10aine de cycles
|
||||
\item \textbf{Mémoire principale~:} 100 fois plus lent
|
||||
\item \textbf{Disque de stockage~:} 1M fois plus lent
|
||||
\end{itemize}
|
||||
|
||||
Le but est d'avoir le plus d'informations dans le haut pour perdre le moins de
|
||||
vitesse possible (d'où échappement des variables, \ldots).
|
||||
|
||||
\subsection{Pas assez de registres~?}
|
||||
|
||||
On le verra dans un prochain cours.
|
||||
|
||||
Lorsque l'on a pas de récursion, cela signifie qu'il y a au plus autant de
|
||||
fonctions présentes en mémoire que de fonctions écrite~; donc on peut avoir une
|
||||
mémoire parfaitement statique où chaque fonction peut être bornée statiquement.
|
||||
|
||||
À partir du moment où l'on a besoin de récursion, on a besoin d'une pile
|
||||
d'appel de fonction qui est une forme d'allocation dynamique.
|
||||
|
||||
|
||||
\subsection{Allocation dynamique de la mémoire}
|
||||
|
||||
\verb+libgc+ : implémentation d'un grabage collector en C.
|
||||
|
||||
Utilisé par GCJ.
|
||||
|
||||
\subsection{Modèle mémoire de \texttt{spim}}
|
||||
|
||||
Entre 0x0 et 0x400000, l'espace est réservé, pour être sûr que 0x0 soit ni
|
||||
lisible ni modifiable.
|
||||
|
||||
Ensuite, il y a le code, puis les datas (variables statiques, tout ce qui est
|
||||
global).
|
||||
|
||||
Tout en haut, il y a la pile qui descend (et sous Linux, une emplacement
|
||||
mémoire réservé au noyau.)
|
||||
|
||||
\subsection{Blocs d'activation (Activation blocks/Stack Frame)}
|
||||
|
||||
Une activation désigne une simple instance d'une fonction.
|
||||
|
||||
Toutes les variables locales sont libérés automatiquement, c'est plus
|
||||
efficasse que de faire appel à \verb+malloc+.
|
||||
|
||||
\subsubsection{Contenu}
|
||||
|
||||
Dans la stack, on trouve~:
|
||||
\begin{itemize}
|
||||
\item Les arguments,
|
||||
\item les variables locales,
|
||||
\item l'adresse de retour~: pour que la fonction sache où revenir,
|
||||
\item une sauvegarde des registres~: selon l'architecture.
|
||||
\end{itemize}
|
||||
|
||||
L'ordre dans lequel ces éléments sont mis dans la pile sont imposés (en vrai
|
||||
pas vraiment, mais si on fait notre tambouille, on est plus compatible avec la
|
||||
libc du coup ça sert un peu à rien).
|
||||
|
||||
La pile esr délimité par \verb+sp+ (Stack Pointer), toujours l'adresse la plus
|
||||
basse (le plus haut élément de la pile) et par le \verb+fp+ (Frame Pointer),
|
||||
qui correspond au début de la fonction courante.
|
||||
|
||||
Lorsque l'on quitte une fonction, on replace \verb+sp+ et \verb+fp+ dans l'état
|
||||
précédent.
|
||||
|
||||
\subsubsection{\texttt{std::auto\_ptr}}
|
||||
|
||||
Lié aux exceptions en C++.
|
||||
|
||||
Quand on lève des exceptions, on balance des pointeurs, du coup, on risque
|
||||
perdre cette mémoire.\\
|
||||
|
||||
Dans le nouveau standard, il est plutôt conseillé d'utiliser
|
||||
\verb+std::unique_ptr+ ou \verb+std::shared_ptr+.
|
||||
|
||||
\section{Traduction vers HIR}
|
||||
|
||||
\subsection{\texttt{temp}~: gestion des étiquettes}
|
||||
|
||||
Génération de temporaires anonymes ou nommées.
|
||||
|
||||
\verb+endo_map+~: un peu comme \verb+std::map+, pour l'allocation de registre,
|
||||
plus tard.
|
||||
|
||||
\subsection{Actors}
|
||||
|
||||
Pour A. Apple, il utilise \verb+Exp+, chez nous c'est \verb+Sxp+ pour plus de
|
||||
clareté.
|
||||
|
||||
\verb+Seq+ c'est une liste d'instruction (Pair chez A. Apple).
|
||||
|
||||
\subsection{\texttt{frame}}
|
||||
|
||||
Gestion de la mémoire associé à une fonction (des variables, ...)
|
||||
|
||||
\verb+local_alloc+~: réservation de la mémoire.
|
||||
|
||||
|
||||
Le langage Tree n'est pas au courant du static link.
|
7
cmp/main.tex
Normal file
7
cmp/main.tex
Normal file
|
@ -0,0 +1,7 @@
|
|||
\title{Construction des compilateurs}
|
||||
\author{Rolland}
|
||||
\date{ING1}
|
||||
|
||||
\maketitle
|
||||
|
||||
\input{20120306}
|
Reference in a new issue