Version française
Home     About     Download     Resources     Contact us    
Browse thread
compilation
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: David Monniaux <David.Monniaux@e...>
Subject: Re: compilation
[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