Cleanup Issue PROCLAIM-SCOPE

Status
For Internal Discussion
Category
ADDITION
References
PROCLAIM (pp156-157)

Problem Description

It would be useful to be able to do PROCLAIM without worrying about cleaning up afterward. For example, a file containing:

In some cases, such as SPECIAL, there is no way to disable the effect of a proclamation.

In other cases, such INLINE and SAFETY, it is possible but inconvenient to change the declaration later. Even so, there is no way of inquiring about the previous value in order to correctly restore it.

Proposal (ADD-KEYWORD-PERVASIVE)

Introduce a :LOCALLY keyword parameter to PROCLAIM which controls the scope of a proclamation.

(PROCLAIM proclamation :LOCALLY T) In a file, this would put the PROCLAMATION into effect for the entire rest of time during which the file was being loaded (including recursive loads).

Interactively, it would be the same as :LOCALLY NIL.

(PROCLAIM proclamation :LOCALLY NIL) In a file or interactively, this would put the PROCLAMATION into effect permanently. (The declaration would not be retracted when the file was done loading.)

Proposal (ADD-KEYWORD-NON-PERVASIVE)

Introduce a :LOCALLY keyword parameter to PROCLAIM which controls the scope of a proclamation.

(PROCLAIM proclamation :LOCALLY T) In a file, this would put the PROCLAMATION into effect for the entire rest of the current file. Recursive loads or compilations would rebind this to the global default.

Interactively, this would affect interactive work but would not affect the default for files loaded.

(PROCLAIM proclamation :LOCALLY NIL) In a file or interactively, this would put the PROCLAMATION into effect permanently, affecting the default for files in which no local proclamation overrode it. (The declaration would not be retracted when the file was done loading.)

Test Cases

Given a file "FOO" containing:

(PROCLAIM '(OPTIMIZE (SPEED 0) (SAFETY 3)) :LOCALLY T) ...

Doing

(LOAD "FOO")

would not clobber the global default for SPEED/SAFETY.

Rationale

This would address several existing problems with CL... - Declarations of optimize qualities such as speed/safety - Absence of UNSPECIAL declaration

Macsyma has a lot of files which do (PROCLAIM '(SPECIAL ...)) at the top of the file and then does an implementation-specific (PROCLAIM '(UNSPECIAL ...)) at the bottom for implementations that support it. It would be both more modular and more portable to do something such as what is proposed here.

Current Practice

Symbolics Cloe binds optimization qualities (SAFETY, SPEED, COMPILATION-SPEED) in file compilations and doesn't allow them to affect the global default.

Cost to Implementors

[I imagine the level of difficulty in providing this feature is in the low to intermediate difficulty range. It's not likely to be trivial for anyone, but I doubt anyone is going to claim that it is prohibitively expensive if we can get the details right and show that it satisfies a real need. -kmp]

Cost to Users

None. This is a compatible change.

Cost of Non-Adoption

Programmers would continue to clobber each others environments with pervasive SPEED and SAFETY proclamations.

Benefits

It would be possible to proclaim SPEED/SAFETY information locally in a file without worrying about the pervasive effect on other code compiled/loaded subsequently in the same environment.

Aesthetics

Probably people would find that this kind of flexibility had a beneficial effect on program aesthetics.

Discussion

Pitman has no firm opinion on this issue at this time, but believes that something like this might be quite useful if we could iron out the details.

Edit History