On 9-Jun-09, at 10:24 PM, Alex Queiroz wrote:
Puzzle #2: why did Gambit chose to define timeouts that are not relative to the moment that an I/O function is called?
I know this is ancient, but I missed the question when I first received the email. Well, why? :)
Because it does not work in the presence of abstraction. Let's suppose that timeouts were relative to when the primitive is called and that the timeout is 3 seconds. Then how would you write read-line so that the timeout will work consistently (that is, it will timeout 3 seconds after the call to read-line)?
read-line cannot be written like this:
(define (read-line port) (let loop (...) ... (read-char port) ... (loop ...)))
because for each call to read-char a timeout of 3 seconds relative to that particular call to read-char will happen. So, read-line will keep reading characters as long as the time between reading each char is less than 3 seconds. So read-line can execute for arbitrarily long... it does not timeout 3 seconds after it is called.
Absolute timeouts eliminate this issue.
Marc