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

**DRAFT** issue PROCLAIM-ETC-IN-COMPILE-FILE (version 4)



I favor PROCLAIM-ETC-IN-COMPILE-FILE:NEW-MACRO, primarily because this
allows programs to be clear about the scope of the proclamation:
whether they are making a proclamation for purposes of compile-file or
to affect the running Lisp.  If you call the macro at top-level, you're
clearly doing it for compilation.  If you call the function at any level,
you're clearly doing it with global scope.

In PROCLAIM-ETC-IN-COMPILE-FILE:NO there is no way to say whether a
PROCLAIM inside an (EVAL-WHEN (COMPILE...) ...)  is intended to persist
after the compilation is over, which is just about the only reason
why I prefer PROCLAIM-ETC-IN-COMPILE-FILE:NEW-MACRO over :NO.

I'd like PROCLAIM-ETC-IN-COMPILE-FILE:NO better if it also proposed
to add an optional argument to PROCLAIM that expressed the intended
scope of the proclamation.  I'd suggest NIL (the default) for the
global scope and the symbol COMPILE-FILE to limit it to the compilation.
Given this, users who liked DEFPROCLAIM could trivially write it
themselves.

The only thing PROCLAIM-ETC-IN-COMPILE-FILE:YES has going for it is
that it's the status quo, in a subset of implementations.  I don't like it.

I agree with Barrett's comments quoted in the discussion section.

The proposal says:
  As with other defining macros, it is 
  unspecified whether or not the compile-time side-effects of a 
  DEFPROCLAIM persist after the file has been compiled.
but never says this about PROCLAIM.  In all three proposals,
this needs to be said about PROCLAIM.  But as you can see from my
comments above, I would rather that we did not leave this unspecified.

The proposal says:
  Current Practice:
  
    The Symbolics compiler has special top-level handling for PROCLAIM,
    although the details are not clear.

I'm not sure what you thought was not clear.  Symbolics Genera does the
same thing that the current practice section says IIM does.  In addition
(and I couldn't tell whether IIM does this too or not), the scope of the
PROCLAIM is only the compilation-unit if the PROCLAIM appears at
top-level, but is global and persists forever if the PROCLAIM appears in
an (EVAL-WHEN (COMPILE...) ...).  We might change that.