Related issues: Issue DEFSTRUCT-SLOTS-CONSTRAINTS-NAME
Edit history: V1, 11 May 90, Sandra Loosemore
V2, 29 May 90, Sandra Loosemore (cross-references)
The use of non-keywords for slot names in #S reader/printer
syntax is ugly. The standard ought to encourage a cleaner
(1) Deprecate the use of non-keywords to name slots in #S syntax
for reading structures.
(2) Require that #S syntax for printing structures print slot
names as keywords.
This encourages a cleaner style while maintaining backward
compatibility for users.
Some implementations already use keywords for printing
structures, while some use unqualified symbols. Practice among
users is also mixed. Many users tend to follow the example of
whatever implementation they use most frequently.
Cost to Implementors:
The actual implementation cost of changing the #S printer
is trivial, but there may be more work involved in updating
Cost to Users:
Cost of non-adoption:
Using keywords is probably slightly more efficient than using
unqualified symbols, at least on the reader end.
The use of non-keywords to name slots in #s syntax is ugly.
Technically, there is no reason now why both users and
implementors cannot use keywords, but the fact that CLtL
goes out of its way to explain that it's not necessary to
do so, and that all of the examples of #s syntax use non-keywords,
has encouraged both users and implementors to follow this style.
Proposal DEFSTRUCT-SLOTS-CONSTRAINTS-NAME:DUPLICATES-ERROR made
it clear that DEFSTRUCT slot names must have unique
symbol-names. Therefore there is no possibility for conflicts
if the slot names are printed as keyword symbols.
Several people have voiced support for at least changing the
examples in the standard to use keywords, to encourage both
users and implementors to adopt the style.
Dan Pierson says:
Yes, YEs, YES! I've been wanting this fix for bogus implementations
since CLtL came out and ******lisp interpreted it the other way.