[
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: | Xavier Leroy <xleroy@p...> |
| Subject: | Re: CAML Light system functions etc. |
> (1) Is there an interface to "tempnam" or something similar? (For creating
> unique temporary filenames). I looked in the "unix" library but couldn't
> find anything -- I think it'd be a convenient addition.
It is a SMOP (Small Matter Of Programming). Here is the function I use:
let temp_file base suffix =
let rec try_name counter =
let name = "/tmp/" ^ base ^ string_of_int counter ^ suffix in
if Sys.file_exists name then try_name (counter + 1) else name
in try_name (Unix.getpid())
> (2) I'm not really convinced that integrating signal and exception handling
> is a good idea;
Signal handlers registered with Unix.signal are arbitrary functions;
They can raise exceptions, or do anything else a function can do.
However, it is true that there is only one way to abort other
computations from a signal handler, which is to raise an exception.
> it's neither pleasant nor efficient to always have to worry
> about signal exceptions popping up.
Shall I read this as ``I use (try ... with _ -> ...) all the time because
I'm too sloppy to figure out exactly which exceptions I should trap'' ?
That's a dangerous thing to do, since any heap allocation can trigger
the Out_of_memory exception.
> Is it possible to make SIGINT terminate
> the evaluation of the current toplevel phrase, without passing a signal
> exception to the currently executing function?
I'm afraid not. The language has only one non-local control structure:
exceptions.
> (3) Is there some hook to allow a user-defined function to be called after
> the evaluation and printing of each toplevel phrase? This would be nice for
> reporting run statistics etc.
No, there isn't.
Regards,
- Xavier Leroy