[MLton-devel] Re: finalization in MLton
   
    Ken Friis Larsen
     
    kfl@it.edu
       
    19 May 2003 10:01:21 +0100
    
    
  
Stephen Weeks <sweeks@sweeks.com> writes:
> Yes.  The implementations are somewhat similar, although I used
> closures to hide the type of the value while you used exceptions.  One
> problem I see with your withValue implementation is that it doesn't
> ensure the finalizer runs after the function completes.
Hmm, I don't think I understand exactly what your point is.  So let me
state what my intentions for withValue are:
  (1) I don't want to ensure that the finalizer runs after the
      function completes.  I fact I think that would be wrong becase
      the finalized value might not be dead at that point.
  (2) I want to ensure that that the finalizer don't run while in the
      "body" of a withValue.
> That is essential -- imagine if the finalizable value were a pointer
> to a C structure that were freed by the finalizer before the
> function could complete.
This corresponds with my intention (2) above.  Hence I agree.  But I
don't understand *why* my withValue function don't work.  Example,
let's say tha v is a finalized value:
  withValue (fn x => ...) v 
can v be collected in the ... part?  I guess that is what you are
saying.  Is that because MLton with inline withValue and then realise
that v can be collected?  If so, how should I "obfuscate" my code so
that v is protected?
Trying to adobt your code I get:
        fun wind(thunk, cleanup) =
            let val a = thunk()
            in cleanup(); a
            end handle exn => (cleanup(); raise exn)
        fun touch v =
            case v of
                Domain => raise Fail "Finalized.touch bug\n"
              | _      => ()
	    
        fun withValue f (v as {value, getVal}) =
            wind (fn () => f(getVal value),
		  fn () => touch value)
Would this be enough to protect v?  Or is MLton smart enough to
eliminate the whole touch call, because can v never be the Domain
exception.
> > The example works with mlton-20030419 but if I try to use yesterdays
> > CVS mlton, then MLton spews tons of SSA SML at me and ends with:
> >       unhandled exception: TypeError
> 
> I've checked in a fix for that bug.
Thanks.  I checked that it works for my code.
> Hmmm.  I compiled and ran this with 20030419 without problems.
That is strange.
I just verified that I get the error I reported:
$ /home/kfl/programming/ml/mlton-20030419/install/usr/bin/mlton 
MLton 20030419 (built Sun Apr 27 23:00:53 2003 on vips)
$ /home/kfl/programming/ml/mlton-20030419/install/usr/bin/mlton omega-mlton.cm
shrinker raised Prim.apply raised assertion failure: SmallIntInf.fromWord
> So, you must either be using an SML/NJ-compiled version or modified
> sources.
Nope, it was compiled with the MLton from Debian sid.  And the only
file I've modified is mlton-20030419/install/usr/bin/mlton where I've
changed what $lib points to.
> I would like to check my guess though, so could you please send more
> details on the configuration of MLton with which you generated the
> error.
OK.  What do you want me to send?  I usually just compile mlton with
the command:
        make clean bootstrap install
and then edit install/usr/bin/mlton by hand.  Is this the intended
procedure?
> > If you want it I can send you my implementation together with test
> > program.
> 
> Sure, we can take a look.  The MLton.FFI structure is under active
> development as we speak.
I'll package it up and send it during the week.
> Excellent.  You can alpha test our new stuff. :-)
I shall (and I'm looking forward to do so, expect lots of feedback
next week ;-)
Cheers,
--Ken
-------------------------------------------------------
This SF.net email is sponsored by: If flattening out C++ or Java
code to make your application fit in a relational database is painful, 
don't do it! Check out ObjectStore. Now part of Progress Software.
http://www.objectstore.net/sourceforge
_______________________________________________
MLton-devel mailing list
MLton-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mlton-devel