CLHS: Issue CHARACTER-VS-CHAR Writeup

#

## Issue CHARACTER-VS-CHAR Writeup

    Issue:        CHARACTER-VS-CHAR
    Forum:	      Editorial
    References:   Character Proposal 2.3.1,  MAKE-DISPATCH-MACRO-CHARACTER (p363),
    	      GET-MACRO-CHARACTER (p362), SET-MACRO-CHARACTER (p362)
    	      GET-DISPATCH-MACRO-CHARACTER (p364),
    	      SET-DISPATCH-MACRO-CHARACTER (p364)
    Category:     CHANGE
    Edit history: 12-Nov-90, Version 1 by Pitman
    	      14-Nov-90, Version 2 by Pitman (minor mods to Rationale, Discussion)
    	      15-Mar-91, Version 3 by Pitman (one new proposal, some endorsements)
    Status:	      For Internal Discussion

    Problem Description:

     Character proposal 2.3.1 adds the names BASE-CHARACTER and
     EXTENDED-CHARACTER.  These are naming-wise inconsistent with
     STANDARD-CHAR.

    Proposal (CHAR-VS-CHARACTER:INCONSISTENTLY-STATUS-QUO)

     Leave things as they are.

    Proposal (CHAR-VS-CHARACTER:LESS-INCONSISTENT-SHORT)

     Rename BASE-CHARACTER to BASE-CHAR.
     Rename EXTENDED-CHARACTER to EXTENDED-CHAR.

    Proposal (CHAR-VS-CHARACTER:LESS-INCONSISTENT-LONG)

     Rename STANDARD-CHAR to STANDARD-CHARACTER.

    Proposal (CHAR-VS-CHARACTER:CONSISTENTLY-CHAR)

     Rename BASE-CHARACTER to BASE-CHAR.
     Rename EXTENDED-CHARACTER to EXTENDED-CHAR.

     Rename MAKE-DISPATCH-MACRO-CHARACTER to MAKE-DISPATCH-MACRO-CHAR.
     Rename SET-MACRO-CHARACTER to SET-MACRO-CHAR.
     Rename GET-DISPATCH-MACRO-CHARACTER to GET-DISPATCH-MACRO-CHAR.
     Rename SET-DISPATCH-MACRO-CHARACTER to SET-DISPATCH-MACRO-CHAR.
     Rename GET-MACRO-CHARACTER to GET-MACRO-CHAR.

    Proposal (CHAR-VS-CHARACTER:REALLY-FIX-THINGS-UP)

     Rename BASE-CHARACTER to BASE-CHAR.
     Rename EXTENDED-CHARACTER to EXTENDED-CHAR.

     Rename MAKE-DISPATCH-MACRO-CHARACTER to MAKE-DISPATCH-MACRO-CHAR.

     Remove the functions GET-MACRO-CHARACTER, SET-MACRO-CHARACTER,
      GET-DISPATCH-MACRO-CHARACTER, and SET-DISPATCH-MACRO-CHARACTER.

     Create setfable functions MACRO-CHAR and DISPATCH-MACRO-CHAR,
     such that:

      - (MACRO-CHAR c [r]) means what (GET-MACRO-CHARACTER x r)
        used to mean.

        (SETF (MACRO-CHAR c [r]) (VALUES fn [nt])) means what
        (SET-MACRO-CHARACTER c fn nt r) used to mean.

      - (DISPATCH-MACRO-CHAR d s [r]) means what
        (GET-DISPATCH-MACRO-CHAR d s [r]) used to mean.

      - (SETF (DISPATCH-MACRO-CHAR d s [r]) fn) means what
        (SET-DISPATCH-MACRO-CHAR d s fn [r]) used to mean.

    Rationale:

     We've enumerated the positions that people were likely to have
     so that they could refer succinctly to their position by name.

      INCONSISTENTLY-STATUS-QUO:  Leaves the language unchanged.

      LESS-INCONSISTENT-SHORT:  Changes only that part of the language
        which is not in CLtL, and which users probably aren't using
        much yet anyway.  At least makes all the type names use
        "-CHAR" consistently.  (Stops short of addressing why there
        is a name SET-SYNTAX-FROM-CHAR but another name
        GET-MACRO-CHARACTER only to preserve the status quo.)

      LESS-INCONSISTENT-LONG:  Changes only one name  At least makes
        all the type names use "CHARACTER" consistently.  (Stops
        short of addressing why there is a name SET-SYNTAX-FROM-CHAR
        but another name GET-MACRO-CHARACTER only to preserve the
        status quo.)

      CONSISTENTLY-CHAR:  Changes even some things which were in
        CLtL, but does so in a manner that is predictably consistent:
        The word "CHARACTER" is shortened to "CHAR" whenever it appears
        hyphenated together with other words.  This would be harder
        on existing programs, but easier for new users.

      REALLY-FIX-THINGS-UP:  Like CONSISTENTLY-CHAR, but also takes
        advantage of a last opportunity to make the language use SETF more
        consistently.  Probably the reason this didn't originally use SETF
        was the lack of clarity in the managing of multiple values.
        Also, SET-MACRO-CHARACTER and SET-DISPATCH-MACRO-CHARACTER are the
        only two symbols in CL which begin with the substring "SET-" but
        are not set-manipulation primitives.

    Current Practice:

     No one does this.

    Cost to Implementors:

     Small, in all cases.

    Cost to Users:

     INCONSISTENTLY-STATUS-QUO:  None.

     LESS-INCONSISTENT-SHORT:  Very small.

     LESS-INCONSISTENT-LONG:  Small.

     CONSISTENTLY-CHAR and REALLY-FIX-THINGS-UP: It's very easy to
       write the requisite compatibility functions in order to support the
       old names during a transition period.  With all the other things
       people are having to do to convert, this is relatively little extra
       burden.

    Cost of Non-Adoption:

     See aesthetics.

    Benefits:

     Aesthetic and Mnemonic.

    Aesthetics:

     If this is adopted...      The affected parts of the language will be...

     INCONSISTENTLY-STATUS-QUO  glaringly unaesthetic
     LESS-INCONSISTENT-SHORT    tolerable, but not pretty
     LESS-INCONSISTENT-LONG	    tolerable, but not pretty
     CONSISTENTLY-CHAR          reasonable
     REALLY-FIX-THINGS-UP       very pretty

    Discussion:

     KMP prefers (in decreasing order of preference) REALLY-FIX-THINGS-UP,
     then CONSISTENTLY-CHAR, then LESS-INCONSISTENT-SHORT or
     LESS-INCONSISTENT-LONG, then INCONSISTENTLY-STATUS-QUO.
     Scott Cyphers (Symbolics) concurs with this ordering, except his first
     choice would be for the [non-existent] option REALLY-FIX-THINGS-UP-CHARACTER.
     Scott McKay (Symbolics) likes CONSISTENTLY-CHAR but would thinks
     REALLY-FIX-THINGS-UP would be ok.

     Bob Cassels at Symbolics asked why there isn't a CONSISTENTLY-CHARACTER
     option.  KMP replies:
      In general, we have tried to spell out words in the language. There
      are, of course, some glaring exceptions.  However, I feel that
      certain English words (like "paren", "char", "info", and "demo")
      have acquired such high frequency usage in the Computer Science
      arena that we are basically just waiting for the dictionary-makers
      to catch up with the natural-language phenomenon of shortening of
      higher frequency words by its speakers.  As such, I feel the issue
      is not one of either "char" or "character" being more correct, but
      rather one of choosing the names in such a way that users can
      reliably remember which name is used in which situation.

     Masinter supports REALLY-FIX-THINGS-UP.

     Moon and Sandra prefer the long name CHARACTER to the short name CHAR.
     (Moon voiced implicit support for LESS-INCONSISTENT-LONG, even though
     the option didn't exist yet.)

     JonL says he and others at Lucid think that changing a lot of names at
     this point is a bad idea.  [It is for this reason that option
     LESS-INCONSISTENT-LONG was added in v3 of this proposal--to offer a
     minimalist fix that might satisfy them.]

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