caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] initializers and destructor
@ 2002-03-31 21:09 Stefano Zacchiroli
  2002-03-31 21:41 ` Remi VANICAT
  0 siblings, 1 reply; 4+ messages in thread
From: Stefano Zacchiroli @ 2002-03-31 21:09 UTC (permalink / raw)
  To: Inria Ocaml Mailing List

Hi all,
  I know and frequently use "initializer" construct in classes, but I'm
not able to find something like destructor that works exectly like an
initializer but that is invoked just before an object last reference is
lost.

Is this somewhat difficult to implement in relation with the OCaml GC or
I'm simply missing something?

TIA,
Cheers.

-- 
Stefano Zacchiroli - undergraduate student of CS @ Univ. Bologna, Italy
zack@cs.unibo.it | ICQ# 33538863 | http://www.cs.unibo.it/~zacchiro
"I know you believe you understood what you think I said, but I am not
sure you realize that what you heard is not what I meant!" -- G.Romney
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Caml-list] initializers and destructor
  2002-03-31 21:09 [Caml-list] initializers and destructor Stefano Zacchiroli
@ 2002-03-31 21:41 ` Remi VANICAT
  2002-04-01  7:45   ` Stefano Zacchiroli
  0 siblings, 1 reply; 4+ messages in thread
From: Remi VANICAT @ 2002-03-31 21:41 UTC (permalink / raw)
  To: caml-list

Stefano Zacchiroli <zack@cs.unibo.it> writes:

> Hi all,
>   I know and frequently use "initializer" construct in classes, but I'm
> not able to find something like destructor that works exectly like an
> initializer but that is invoked just before an object last reference is
> lost.
> 
> Is this somewhat difficult to implement in relation with the OCaml GC or
> I'm simply missing something?

there is the finalise function in the module Gc of the standard
library. 

one can write a destructor using it :
# class foo =
    let f x = print_string "test"; print_newline () in
  object(s)
    initializer
      Gc.finalise f s
  end;;
class foo : object  end
# new foo;;
- : foo = <obj>
# Gc.full_major ();;
test
- : unit = ()
# 

but you should know that there is some pitfall with finalise :

# class foo =
  object(s)
    val bar = "test"
    initializer
      Gc.finalise (fun x -> print_string bar; print_newline ()) s
  end;;
class foo : object  end
# new foo;;
- : foo = <obj>
# Gc.full_major ();;
- : unit = ()
# Gc.full_major ();;
- : unit = ()

here, the created object is reachable from the closure of
finalisation, so it's reachable, and never garbage collected.

You should carefully read it's documentation

-- 
Rémi Vanicat
vanicat@labri.u-bordeaux.fr
http://dept-info.labri.u-bordeaux.fr/~vanicat
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Caml-list] initializers and destructor
  2002-03-31 21:41 ` Remi VANICAT
@ 2002-04-01  7:45   ` Stefano Zacchiroli
  2002-04-01 10:15     ` Remi VANICAT
  0 siblings, 1 reply; 4+ messages in thread
From: Stefano Zacchiroli @ 2002-04-01  7:45 UTC (permalink / raw)
  To: caml-list

On Sun, Mar 31, 2002 at 11:41:23PM +0200, Remi VANICAT wrote:
> there is the finalise function in the module Gc of the standard
> library. 

Thanks, this is ok for me.

Anyway you probably agree with me that this kind of destructor are a bit
tricky: what about adding some syntactic sugar to hide the Gc usage to
who wants to use destructors? In that way we can also avoid the problem
of wrong usage of "finalise" using let binding correctly.

What do you think about it?

Cheers,
Thanks again.

-- 
Stefano Zacchiroli - undergraduate student of CS @ Univ. Bologna, Italy
zack@cs.unibo.it | ICQ# 33538863 | http://www.cs.unibo.it/~zacchiro
"I know you believe you understood what you think I said, but I am not
sure you realize that what you heard is not what I meant!" -- G.Romney
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Caml-list] initializers and destructor
  2002-04-01  7:45   ` Stefano Zacchiroli
@ 2002-04-01 10:15     ` Remi VANICAT
  0 siblings, 0 replies; 4+ messages in thread
From: Remi VANICAT @ 2002-04-01 10:15 UTC (permalink / raw)
  To: caml-list

Stefano Zacchiroli <zack@cs.unibo.it> writes:

> On Sun, Mar 31, 2002 at 11:41:23PM +0200, Remi VANICAT wrote:
> > there is the finalise function in the module Gc of the standard
> > library. 
> 
> Thanks, this is ok for me.
> 
> Anyway you probably agree with me that this kind of destructor are a bit
> tricky: what about adding some syntactic sugar to hide the Gc usage to
> who wants to use destructors? In that way we can also avoid the problem
> of wrong usage of "finalise" using let binding correctly.
> 
> What do you think about it?

In fact, it should be more than syntactic sugar, because of the
pitfall of finalise. So may be it would be useful, but there is a lot
of work for it.

-- 
Rémi Vanicat
vanicat@labri.u-bordeaux.fr
http://dept-info.labri.u-bordeaux.fr/~vanicat
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2002-04-01 11:19 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-03-31 21:09 [Caml-list] initializers and destructor Stefano Zacchiroli
2002-03-31 21:41 ` Remi VANICAT
2002-04-01  7:45   ` Stefano Zacchiroli
2002-04-01 10:15     ` Remi VANICAT

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).