Re:Why We Use OCaml
by zem on Wednesday July 16, 2014 @03:25PM
(#8043973)
the "with-" pattern (originally from lisp, i believe, but ruby did a lot to bring it to the masses), where something like a filehandle manages its own lifecycle, and calls your closure in between. so rather than the C-like
you can do
where the definition of with-open-file-for-writing() would look like
the benefit of having this be a closure rather than just a function pointer can be seen in the write array to file example above, where the "array" variable is in the scope of the calling function, but when with-open-file-for-writing calls your closure it can make full use of its own local variables.
[ Parent
| on HN ]
Of course, you can build your own closure:
void do_stuff_with_file(struct relevant_data *, FILE *);
...
{
struct relevant_data data = { ... }
with_open_file_for_writing(do_stuff_with_file, data, filename);
}
IMO, the biggest downside there being how far it typically pushes the definition of that function from the call site. Small functions - a good practice anyway - ameliorates that a bit.you can, but it's sufficiently clunky that it simply doesn't feel like a natural thing to do in the language. good language design is a lot more about the things it makes easy and natural than the things it makes possible.
"you can, but it's sufficiently clunky that it simply doesn't feel like a natural thing to do in the language."
It does to me, but I've done enough functional programming that I easily reach for concepts from that space.
"good language design is a lot more about the things it makes easy and natural than the things it makes possible."
Of course. I don't know where you got the idea I was saying closures aren't a good thing to have language support for. I said precisely the opposite.
Re:Why We Use OCaml
by edwintorok on Wednesday July 16, 2014 @03:58PM
(#8044163)
You can also wrap the call-closure with an exception handler to make sure that 'f' is always closed when you leave with-open-file-for-writing.