Browse thread
[OSR] OCaml Standard Recommandation Process
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Brian Hurt <bhurt@j...> |
| Subject: | Re: [Caml-list] [OSR] OCaml Standard Recommandation Process |
Jon Harrop wrote:
>On Monday 28 January 2008 14:23:01 you wrote:
>
>
>>Jon Harrop wrote:
>>
>>
>>>There are also many features that I would like to steal from other
>>>languages:
>>>
>>>. The IDisposable interface from .NET and F#'s "use" bindings.
>>>
>>>
>>Is there a reason that Gc.finalise doesn't work?
>>
>>
>
>Absolutely: Gc.finalise is only probabilistic whereas IDisposable is
>deterministic. IDisposable guarantees deallocation of resources by a certain
>point. (This is why you should never use Gc.finalise alone to manage the
>collection of external resources!)
>
>So you write a "use" binding:
>
> let read_first_line file =
> use ch = open_in file in
> input_line ch
>
>and it gets translated into:
>
> let read_first_line file =
> let ch = open_in file in
> try input_line ch finally
> ch#dispose
>
>
What happens when I write:
let broken file =
use ch = open_in file in
(fun () -> input_line ch)
? Or some other tricky way to let ch escape the scope?
Monads strike me as being a better way to do this, but again, we're
talking about deep changes to Ocaml. The alternative- wait until the
object is garbage collected, depends upon the form of the garbage collector.
Brian