turn off let floating

Hi all, In the documentation for System.IO.Unsafe it says: Make sure that the either you switch off let-floating, or that the call to unsafePerformIO cannot float outside a lambda. My question is how can you turn off let floating? I can't seem to find a flag that suggests this behaviour. Cheers, Bernie.

Hi,
you can turn off let-floating by compiling without optimizations,
i.e. without using a -O flag or using -O0 explicitly.
The disadvantage is that most of all other optimizations
are turned off too.
Another possibility would be to compile your program with HasFuse
http://www.ki.informatik.uni-frankfurt.de/~sabel/hasfuse/
which is a modification of GHC, that performs only such transformations
that are compatible with the use of unsafePerformIO.
(no common subexpression elimination,
no let-floating out,
more restrictive inlining)
In fact, HasFuse guarantees more than compiling SAFE uses of
unsafePerformIO correctly (it fulfills the FUNDIO-semantics),
but HasFuse can also be used to compile 'normal' Haskell programs.
David
------
JWGU Frankfurt, Germany
----- Original Message -----
From: "Bernard James POPE"
Hi all,
In the documentation for System.IO.Unsafe it says:
Make sure that the either you switch off let-floating, or that the call to unsafePerformIO cannot float outside a lambda.
My question is how can you turn off let floating? I can't seem to find a flag that suggests this behaviour.
Cheers, Bernie. _______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

On Fri, Apr 09, 2004 at 03:27:01PM +0200, David Sabel wrote:
you can turn off let-floating by compiling without optimizations, i.e. without using a -O flag or using -O0 explicitly. The disadvantage is that most of all other optimizations are turned off too.
That is exactly what I'm doing at the moment. The module that has the nasty impure bits in it is not compiled with optimisations. I will improve this when GHC regains the non-let floating flag.
Another possibility would be to compile your program with HasFuse
http://www.ki.informatik.uni-frankfurt.de/~sabel/hasfuse/
which is a modification of GHC, that performs only such transformations that are compatible with the use of unsafePerformIO. (no common subexpression elimination, no let-floating out, more restrictive inlining)
That is a possibility, but the code is part of buddha, my debugger. I would have to require the user of buddha also to have HasFuse. Cheers, Bernie.
participants (2)
-
Bernard James POPE
-
David Sabel