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

Features



Three opinions on this subject:

(1) If we are going to order things by kludginess, I think #, is
    kludgier than #., and that #. is kludgier than #+.

(2) I don't think
	#+#.pred form
    should work, partially because this is combining two evils at the
    same time (as opposed to #+pred #.form2 which is two evils at
    different times!)

(3) I'm not vehement about this one, but I think features should be in
    the keyword package.  This allows a relatively simple impmentation
    of #+ in that it simply binds *package* to the keyword package,
    turns off #. (ours doesn't right now), does a READ and parses the
    result.  This leads to a slight inconsistency in our implementation:
    #+3600 causes 3600 (in base 10, because #+ also binds *read-base* to
    10) and this simply causes 3600 to be read in as an integer.  Since
    our test on *features* is EQ (should be EQL), this still works.

Independent of the above, I think the following needs to be made clear
to implementors (which probably means it has to go into CLtL, even
though that isn't an implementors guide).  The conditional read
construct (currently it is #+/#-) must turn of package errors and
probably #. and #, while reading forms for effect.  Example:
	(defun frob-net ()
	  #+Symbolics (neti:frob-net)
	  #+Spice (spice-network:frob-net)
	  #-(or Symbolics Spice) (error "I see no network here."))
I think it is important for portability to have a read time conditional.

How about this proposal (this is very serious and not intended to be a
flame):  Features are in the keyword package.  This means they need to
be registered because the keyword package is flat.  Registered
trademarks can appear as-is, E.g., #+3600, #+Symbolics, #+LMI, etc.
(Maybe this should extend to major organizations (maybe they're already
registered?)?  #+MIT, etc.)  Another set of keywords is globally agreed
upon by this group, or by the yellow pages group, e.g., #+Flavors.
Non-registered keywords must be prefaced with the name of the group that
supports the implementation, e.g., #+Symbolics-Rel-6, #+MIT-System-99,
etc.