On Fri, 26 Nov 2004, Jules Bean wrote:

On 26 Nov 2004, at 12:08, George Russell wrote:

> Yes, you need to explicitly initialise it; but you don't need then to
> pass the initialized handle all around your code. The painful plumbing
> goes away.
I think this is either unwieldy or inefficient. Imagine a large library
containing lots of these things which need to be initialised if used. Then
I predict that one of two things will happen
(a) people will end up writing boilerplace code at the start of the main
action which does
initialise1
initialise2
... blah blah ...
(b) (more likely). There will be a single initialisation function for the
library, which initialises everything, even the stuff you don't actually
want.

To me this seems perfectly fine. Ian's proposal gets us TWIs, which I can see the need for. Implicit initialisation (i.e. stateful initialisation functions happening non-deterministicly, like java static{} blocks or C++'s similar feature) is a can of worms I currently see no value in opening.

It's true that ACIO only does some things: and that includes global variables initialized with values. I think that's pretty useful; but it's true that we don't get initializing with arbitrary IO activity.


Even when you do want to open the can of worms, things are better: unsafePerformIO needs an accompanying NOINLINE pragma, whereas pushing things through assertIOisACIO will guarantee execution no more than once.

I.
_______________________________________________
Haskell-Cafe mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to