[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Random metaclasses for CL types

    Date: Thu, 11 May 89 06:28:56 PDT
    From: Jon L White <jonl@lucid.com>

    re: . . . or any other implementation-defined
	class that is no more restrictive than a {\bit built-in class\/}.

    I liked your first version better -- I don't remember  88-002R having
    a well-ordered scale for "restrictiveness" of metaclasses, so this
    phrase (for me) causes much more confusion than it clears up.  But
    it's not a big point.

"restrictive" refers to the immediately following paragraph in 88-002R,
which documents the restrictions of built-in-class.  The idea is that
if a user program assumes it might be a built-in-class, an implementation
can't screw the user over by coming with an implementation-defined class 
that's even worse (can't appear as the cdr of a cons or something).

How about changing "is no more restrictive" to "has no more restrictions"?

    On a related theme -- I was wondering if everyone agrees that the
    following is also permitted by "Integrating Types And Classes" section.
    An implementation may have a subset of some built-in class being 
    implemented by a different meta-class than the rest of the set.

1-16 says additional type specifiers can have classes, so I think
everyone agrees that the built-in classes can have implementation-defined
subclasses.  I assume the metaclass of those can be anything that works.

    For example, in most implementations we probably have:

       (class-name (class-of (find-class 'integer))) --> BUILT-IN-CLASS

    But some implementation might also have a FIXNUM class such that:

       (class-name (class-of (find-class 'fixnum))) --> FAST-ARITH-CLASS

    where FAST-ARITH-CLASS is not a subclass of BUILT-IN-CLASS.  Of course, 
    the FIXNUM class is a still a subclass of INTEGER.

I can't understand why FAST-ARITH-CLASS wouldn't be a subclass of
BUILT-IN-CLASS.  Maybe the example you really meant was

       (class-name (class-of (find-class 'integer))) --> SLOW-ARITH-CLASS
       (class-name (class-of (find-class 'fixnum))) --> FAST-ARITH-CLASS

where SLOW-ARITH-CLASS and FAST-ARITH-CLASS are disjoint subclasses

    [don't take this example too seriously -- I'm more concerned about
    subclasses of the FUNCTION class.]

Or maybe you really meant that 
       (class-name (class-of (find-class 'function))) --> BUILT-IN-CLASS
       (class-name (class-of (find-class 'generic-function))) --> FUNCALLABLE-STANDARD-CLASS
which is specified either by 88-002R or the draft metaobject protocol,
I forget which.  Anyway this example shows that you don't have to worry.