From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from weis@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id QAA27560 for caml-redistribution; Tue, 18 Feb 1997 16:54:41 +0100 (MET) Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id QAA26808 for ; Tue, 18 Feb 1997 16:28:29 +0100 (MET) Received: from cri.ens-lyon.fr (cri.ens-lyon.fr [140.77.1.32]) by nez-perce.inria.fr (8.7.6/8.7.3) with ESMTP id QAA23937 for ; Tue, 18 Feb 1997 16:28:27 +0100 (MET) Received: from bellecour (bellecour [140.77.191.101]) by cri.ens-lyon.fr (8.8.5/8.8.1) with ESMTP id QAA07653; Tue, 18 Feb 1997 16:28:25 +0100 (MET) Date: Tue, 18 Feb 1997 16:26:24 +0100 (MET) From: David Monniaux X-Sender: dmonniau@bellecour To: Jean-Christophe Filliatre cc: caml-list@inria.fr Subject: Re: compilation In-Reply-To: <199702131524.QAA03489@anjou.ens-lyon.fr> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=ISO-8859-1 Content-Transfer-Encoding: 8BIT Sender: weis [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