#

## Issue STRUCTURE-READ-PRINT-SYNTAX Writeup

    Issue:              STRUCTURE-READ-PRINT-SYNTAX
    References:         DEFSTRUCT
    Related issues:     Issue DEFSTRUCT-SLOTS-CONSTRAINTS-NAME
    Category:           CHANGE
    Edit history:       V1, 11 May 90, Sandra Loosemore
                        V2, 29 May 90, Sandra Loosemore (cross-references)

    Problem description:

    The use of non-keywords for slot names in #S reader/printer
    syntax is ugly.  The standard ought to encourage a cleaner
    style.

    Proposal (STRUCTURE-READ-PRINT-SYNTAX:KEYWORDS):

      (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.

    Rationale:

      This encourages a cleaner style while maintaining backward
      compatibility for users.

    Current Practice:

      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
      documentation.

    Cost to Users:

       None.

    Cost of non-adoption:

      See "esthetics".

    Performance impact:

      Using keywords is probably slightly more efficient than using
      unqualified symbols, at least on the reader end.

    Benefits:

      See "esthetics".

    Esthetics:

      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.

    Discussion:

      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.

Copyright 1996-2005, LispWorks Ltd. All rights reserved.