> >> - I'd like to see a standard way to call the GC from C
> >> 
> >> http://www.mail-archive.com/ffi@haskell.org/msg00565.html
> >> 
> >> Note that Hugs and GHC have had this for ages except that we call
> >> the function 'performGC' and there's no way to control how many
> >> generations are collected.
> 
> > I don't have a strong opinion on this one.
> 
> Maybe SimonM and Malcolm do.  
> 
> I know GHC has an interface already and I suspect that NHC will too.
> GHC and Hugs both call it performGC but this doesn't match the naming
> convention used in the ffi and it is expensive to use with
> generational GC (since there is no way to indicate that a partial GC
> may be enough).

System.Mem.performGC does a major GC.  When would a partial GC be
enough?

Isn't the property you really want "a full garbage collection has been
performed and all finalizers have been run to completion"?  Note this
would be non-trivial to implement in GHC.  We currently don't
distinguish between finalizer threads and normal threads, preferring to
leave it to the programmer to implement any synchronisation on
finalizers using MVars.

> >> - I see the question of Function prototypes as a portability
> >> problem waiting to happen.  Either Hugs and GHC are right (you
> >> should use the user-supplied header file or NHC is right (you
> >> should ignore the header file).  They can't both be right if we
> >> want portable code so the report should be clear about which one is
> >> right.

I think the spec should be clarified along these lines:

  Header files have no impact on the semantics of a foreign call,
  and whether an implementation uses the header file or not is
  implementation-defined.  Some implementations may require a header
  file which supplies a correct prototype for the function in order
  to generate correct code.

I'd be equally happy (perhaps happier) if the header file spec was
removed altogether.  In a sense, this would leave the Haskell part of a
foreign binding even more portable, because it doesn't have to specify
the names of header files which might change between platforms.  There
are already "external" parts of a binding such as the names of link
libraries, I think I'm arguing that header files also fall into that
category.

> >> - Changes to hs_init
> >> 
> >> http://www.mail-archive.com/ffi@haskell.org/msg00539.html
> 
> > I am ok with that.  Currently, there is a problem with the version
> > that is in the spec and GHC in that GHC requires an extra argument
> > to initialise modules.  So, it all depends a bit on how far SimonM
> > thinks its implementable.
> 
> Hugs doesn't have anything resembling hs_init at the moment so I can't
> say for sure.  I think it can be done as a thin layer on top of the
> the existing spec though so I don't think it's that hard.

Perhaps on GHC you should be required to "register" the top module in
your program first, maybe something like

        registerModule(__stginit_Main);

that way you can register multiple modules (which isn't possible at the
moment, you have to have another module which imports all the others).

Cheers,
        Simon
_______________________________________________
FFI mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/ffi

Reply via email to