Hi Ludo',
Sorry for reading more into your words than was intended.
At a minimum, we could provide a Scheme primitive to allow users to
explicitly ask system asyncs to run (and that's just a few lines of C to
add). What do you think?
If it's easy, a "force-asyncs" may be useful in general. I worry first
that it is a sort of representation exposure, and that the promise (they'll
get run very soon) should be good enough. More importantly, short of a
busy-wait loop, I don't see how it would help the alarm case. Where would
I invoke it?
The common case is something like
(with-timeout 60 (lambda () (http-get "http://some.url/"))
(lambda () (throw 'server-timeout)))
which boils down to
(alarm 60)
(block-waiting-for-input inet-port)
which in testing I chose to simulate as:
(alarm 60)
(sleep 100)
In both the blocking and the sleep case, even a busy wait feels like it
would want to run in a separate thread or something, constantly calling
force-asyncs. In the blocking case, perhaps there are games to play with
select but that forces the code to be timed out to cooperate. If someone
didn't write their library with this in mind...
I haven't written much multithreaded code, and none in guile, so I'm
probably misunderstanding something. How would force-asyncs help?
Many thanks,
Grem
Hi,
Gregory Marton <[EMAIL PROTECTED]> writes:
As I suggested earlier [0], I think it's just a matter of
non-determinism: there's no guarantee as to when system asyncs are run.
And as I suggested earlier, I think it is very valuable to have
guarantees about when alarms in particular are handled -- that being
what they're for.
Yes, I understand the rationale---and sorry if my message sounded harsh!
At a minimum, we could provide a Scheme primitive to allow users to
explicitly ask system asyncs to run (and that's just a few lines of C to
add). What do you think?
Ludo'.
--
------ __@ Gregory A. Marton http://csail.mit.edu/~gremio/
--- _`\<,_ .
-- (*)/ (*) A programming language is a very dangerous data structure.
~~~~~~~~~~~~~~~~-~~~~~~~~_~~~_~~~~~v~~~~^^^^~~~~~--~~~~~~~~~~~~~~~++~~~~~~~