Re: compilation

From: David Monniaux (David.Monniaux@ens-lyon.fr)
Date: Tue Feb 18 1997 - 16:26:24 MET


Date: Tue, 18 Feb 1997 16:26:24 +0100 (MET)
From: David Monniaux <David.Monniaux@ens-lyon.fr>
To: Jean-Christophe Filliatre <Jean-Christophe.Filliatre@ens-lyon.fr>
Subject: Re: compilation
In-Reply-To: <199702131524.QAA03489@anjou.ens-lyon.fr>

[ENGLISH FURTHER IN THE TEXT]

On Thu, 13 Feb 1997, Jean-Christophe Filliatre wrote:

> 1. J'aimerai savoir si :
>
> let b = true
> let f = if b then f1 else f2
>
> est compilé en f1, c'est-à-dire si la branche d'un "if" est
> directement sélectionnée lorsque le booléen est "true" ou "false"
> (sans l'évaluer, bien sûr ; simplement directement égal à "true" ou
> "false" au moment de la compilation)
> La raison de ma question est que cela permettrait d'avoir des options
> de compilation directement en Caml sans perdre d'efficacité.

A ma connaissance, le compilateur ne fait pas de réductions même
triviales... Par exemple
let f=5;;
let g () = 3 * f;;
compile g vers une fonction qui est sémantiquement une constante, mais qui
en pratique prend f (lié =3), le multiplie par 3...

Un bon compilateur C, par contre, simplifierait les expressions...
Cela dit, les systèmes d'analyse de flot et d'optimizations des
compilateurs C réellement utilisés sont énormes...

> =english=====================================================================
>
> 1. I would like to know if
>
> let b = true
> let f = if b then f1 else f2
>
> is compiled as f1, that is if the branch of an "if" expression is
> directly selected when the boolean expression is "true" or "false"
> (without performing any computation on it, of course; just directly
> equal to the constructor "true" or "false").
> The reason of this question is that it would allow compile options in
> Caml without any loss of efficiency.

To my knowledge, the Ocaml compiler doesn't perform any kind of reduction,
even trivial. For instance,

let f=3;;
let g () = f*4;;
compiles g to a function that is semantically a constant, but that in
effect takes f (lié =3) and multiplies it by 4.

A good C compiler, nevertheless, would simplify those expressions... But
the flow analysis and optimization part of a "real" C compiler is huge...

"Si l'informatique marchait, cela se saurait."
http://www.ens-lyon.fr/~dmonniau



This archive was generated by hypermail 2b29 : Sun Jan 02 2000 - 11:58:09 MET