[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Here are the editorial comments I have culled from the messages we
received. After some of the comments I put my own opinion in brackets.
From: Dan L. Pierson <pierson%mist@multimax.ARPA>
Page 1-9, Add to the list of things provided by slot options and
o Specifying the legal data types of the slot contents.
(Of course, this can be found elsewhere in the document,
but my impression on reading this introductory list was
that for some reason you couldn't do this.)
Page 1-11, Paragraphs 3 and 7
Why are reader, writer, and with-slots *required* to be
implemented using SLOT-VALUE? I don't doubt that you have
a good reason, but it's not obvious to a relative novice.
[These must call slot value because the implementation of slot-value for
a particular class can be changed using the MOP. We don't want to go
into that at this point in the document, but perhaps a simple forward
reference would be appropriate.
Paragraphs 7 and 8
This implies that WITH-SLOTS can access slots without
accessors but WITH-ACCESSORS can't. This is reasonable
but should probably be made explicit. Some people may
feel that this makes WITH-SLOTS unsafe.
[Yes this needs to be made explicit.]
Page 1-26, Paragraph 2, Sentence 2
The following are my exact notes as I read this section:
What about methods in both old and new? Are they "added"?
If so, in what way is this definition different from
saying that the "contents" of the old generic function are
trashed and replaced by the new generic function? AHA!
Some methods could have been defined by DEFMETHOD, but the
wording is still confusing.
Paragraph 6, Sentence 3
The wording is a bit confusing.
Page 1-28, Paragraph 2, Sentence 4 and example line
Has this been submitted to cleanup? I don't recognize it.
[He is confused by the use of the expression "This proposal" to describe
the CLOS specification. That should be clarified somehow.]
Page 1.29, Paragraph 1
The wording implies that:
(EQUAL '(A (B C)) '((A B) C))
is T, which is certainly false. Note that cleanup is
entertaining proposal to flush EQUAL and EQUALP.
[Just change this to the lists of qualifiers are EQUAL?]
Page 1-32, At this point I made a note:
In general, this draft details the complex, general case
before the simpler, common special case. This *may* be
appropriate for a standards document but it certainly
isn't for a manual.
[Sonya already explained to him that this wasn't a manual. I will
include this criticism in the ones we respond to in written form so that
we can answer it for everyone.]
Page 2-27, Next to last paragraph
Can extension slot options appear more than once in a
single slot description (it appears reasonable, but it's
not clear from this whether it's legal).
[Make it clear that extension slot options can appear more than once.]
The slot can also be accessed by WITH-SLOTS, since
WITH-SLOTS uses SLOT-VALUE.
[Sonya doesn't feel it is necessary to make this explicit.]
Page 2-35, Paragraphs 7 and 8
These paragraphs don't specify how to distinguish a
predicate from the first keyword option since they are
both distinguished by being symbols other than * (or NIL).
[The predicate is distinguished by position. Either it or the list of
qualifiers or () or * must be in the same position. Somehow the text
should make this clear.]
Date: Fri, 15 Apr 88 13:43 PDT
From: David N Gray <Gray@DSG.csc.ti.com>
On page 2-8, the description "... of the form S or of the form S*" is a
little confusing because S is not defined.
I think it would be helpful if locally defined macros and functions (such
as CALL-METHOD and CALL-NEXT-METHOD) had a syntax line that said "Local
Macro" or "Local Function" instead of just "Macro" or "Function".
[I think this is a good idea.]
On page 2-25, third paragraph, the sentence "The slot name argument is a
symbol that can be used as a Common Lisp variable name." is confusing. It
seems to be saying that the name becomes defined such that it can be
accessed just like a variable (as in flavors), but this is only true
through the use of WITH-SLOTS, which is not mentioned here. Probably what
was intended was that the slot name must satisfy the same syntactic
requirements as a variable name, i.e. a symbol which is not a keyword,
nil, or t.
Date: Wed, 13 Apr 88 10:32 PDT
From: Sonya E. Keene <skeene@STONY-BROOK.SCRC.Symbolics.COM>
The section "Determining the Class Precedence List" has examples where
defclass is used to define classes, and the CPL is computed from those
definitions. However, the CPLs shown don't include standard-object
(they do include t). We should really fix this.
The table in Figure 1-1 has two columns, labelled "Predefined Common
Lisp Type" and "Class Precedence List". The first column heading isn't
right; actually, it is correct, but it misses the point. They are
Common Lisp types, but the important thing is that CLOS has classes
corresponding to those types. I think that column heading should be
simply "Classes" or "Predefined Classes" (since "Classes Corresponding
to Common Lisp Types" is too long).
Also, the section "Standard Meta-objects" says "The class named
standard-object is an instance of the class standard-class and is a
superclass of every class that is an instance of standard-class except
itself." I believe that the MOP (p 3-10) contradicts this statement,
since the class structure-object is an instance of the class
standard-class, yet it doesn't have standard-object as a superclass.
[The draft of the MOP you were reading was wrong here. structure-object
is an instance of structure-class.]
Date: Thu, 21 Apr 88 19:32:30 JST
From: Masayuki Ida <ida%aoyama.cc.aoyama.junet@UTOKYO-RELAY.CSNET>
Comments on CLOS ch1 and ch2.
1. explanation around the mixture of defmethod and defun.
I could not find the specification on the mixture of
defmethod and defun with the same name.
is it error ? is it allowed in what sense?
[Somehow we need to make the following clear.
defun calls setf of symbol-fucntion, so defun totally wipes out what
used to be in the symbols `function cell'. If the symbol used to name a
function it now names a new function. If the symbol used to name a
generic function, that generic function is gone and the symbol now just
names the new function
defmethod calls ensure-generic-function which signals an error if the
symbol already names an ordinary function or macro.
Here is the state table, it might be a good idea to put this in the
function macro generic function
defun | fn is macro is generic function
| replaced replaced is replaced
defmacro | fn is macro is generic function
| replaced replaced is replaced
defmethod | error error method is added to
| signalled signalled generic function,
| existing method may
| be replaced
5. 2-79 symbol-macrolet examples
;;; not (let 'foo (let (('foo 'bar)) 'foo)).
;;; not (list 'foo (let (('foo 'bar)) 'foo)).
6. 2-8 line 9
Osub1 | ... | Osubn
and line 14
.... for some 1 <= k <= n, ...
'n' is ambiguous to the 'n' of line 13.
Osub1 | ... | OsubN
and line 14
... for some 1 <= k <= N, ...
replacing small 'n' to large 'N'.