[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
- To: Scott E. Fahlman <Fahlman@CMU-CS-C.ARPA>
- Subject: with-output-to-string query
- From: David A. Moon <Moon@SCRC-STONY-BROOK.ARPA>
- Date: Sun, 18 Aug 85 14:59 EDT
- Cc: robbins@DEC-HUDSON.ARPA, common-lisp@SU-AI.ARPA
- In-reply-to: <FAHLMAN.12135647246.BABYL@CMU-CS-C.ARPA>
Date: Fri, 16 Aug 1985 15:41 EDT
From: "Scott E. Fahlman" <Fahlman@CMU-CS-C.ARPA>
The definition of WITH-OUTPUT-TO-STRING given in the Common Lisp
reference manual states that:
"If string is specified ... the output is incrementally appended to the
string, as if using VECTOR-PUSH-EXTEND if the string is adjustable, and
otherwise as if using VECTOR-PUSH."
This implies that after a non-adjustable output string is "filled" any
extra characters output to it will simply be dropped and no error will
be signalled. Is this correct?
Yeah, given that VECTOR-PUSH is documented not to complain when a
non-adjustable string overflows, it seems to follow that
WITH-OUTPUT-TO-STRING should just ignore excess output in this case and
not signal an error. This seems like a treacherous mechanism that could
screw the unwary, but in the vast majoirty of cases users will let the
system create the string or will use an adjustable one if this meant to
implement some sort of non-consing buffer.
I'm not sure why we decided that VECTOR-PUSH should fail silently, but
we must have had some good reason at the time. Probably we just copied
Zetalisp and THEY had a good reason.
VECTOR-PUSH doesn't fail silently, it returns a value to say whether or not
it was able to store into the vector. I don't remember why this Zetalisp design
decision, made in 1974 or 1975, was done this way. Actually I wasn't around then.
It seems clear to me that no one intended WITH-OUTPUT-TO-STRING to throw away
characters if given a non-adjustable string to fill. Since it can't return
a value to say whether it filled the string, it should signal an error. I
think this is just looseness in the manual, not a real language issue. If
someone else disagrees they should speak up!