Global variables?

Fergus Henderson fjh@cs.mu.OZ.AU
Mon, 3 Feb 2003 14:28:45 +1100


On 02-Feb-2003, Jon Cast <jcast@ou.edu> wrote:
> Claus Reinke <claus.reinke@talk21.com> wrote:
> > It is the programmer's responsibility to verify that none of these
> > problems matter in the particular case of usage. Since many advances
> > in compiler technology tend to invalidate those verifications, it is
> > almost impossible to guarantee safety in such cases
> 
> Even with sufficiently liberal use of {-# NOINLINE #-}?

Haskell Report, Appendix E (Compiler Pragmas):
"An implementation is not required to respect any pragma".

> > There you went.. into one of the many available traps in this
> > mine-field:
> 
> > You argue that unallocated IORefs don't matter as long as "the" IORef
> > is allocated before it is dereferenced. But that's just part of the
> > problem - what about inlining globalVar, creating multiple IORefs?
> 
> {-# NOINLINE globalVar #-} :)

What about creating two copies of globalVar, neither of them inlined?
A compiler could do that to improve performance on some architectures,
e.g. by allowing the function to be called via a short jump instruction
rather than a long jump instruction.

-- 
Fergus Henderson <fjh@cs.mu.oz.au>  |  "I have always known that the pursuit
The University of Melbourne         |  of excellence is a lethal habit"
WWW: <http://www.cs.mu.oz.au/~fjh>  |     -- the last words of T. S. Garp.