Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] How to avoid compiling some code (like #ifdef in C)
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Xavier Leroy <xavier.leroy@i...>
Subject: Re: [Caml-list] How to avoid compiling some code (like #ifdef in C)
> --begin--
> open Printf
> 
> let compile_code = false
> 
> let a () = printf "toto\n"
> 
> let _ = if compile_code then let t = 1 in a ()
> --end--
> 
> In above code, if compile_code is true, then the auto-test is executed,
> otherwise not. But if compile_code is false, is the code corresponding
> to 'let t = 1 in a ()' generated?

With ocamlopt, that code is eliminated as part of constant
propagation.

With ocamlc, the code of "let t = 1 in a()" is generated.

> Does anybody see a better approach to do such a thing?

Others mentioned preprocessing with the tool of your choice.  Camlp4
can do #ifdef-style conditional compilation, but in a pinch you can
even use cpp as your preprocessor.

Whether this is a "better" approach is open to debate.  With a
preprocessor, you can remove not just code for expressions, but also
other kind of code, e.g. code for the toplevel binding "let a() = ...".
So, you get more flexibility, but at the expense of less static
checking.  In particular, code that is #ifdef-ed out is not
type-checked, while it is type-checked in your solution above.

- Xavier Leroy

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners