[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
PROCLAIM and implicit EVAL-WHEN
- To: common-lisp@SU-AI
- Subject: PROCLAIM and implicit EVAL-WHEN
- From: David A. Moon <Moon%SCRC-TENEX%MIT-MC@SU-DSN>
- Date: Sat, 04 Jun 1983 00:24:00 -0000
- In-reply-to: The message of 3 Jun 83 17:52-EDT from Dir LCSR Comp Facility <HEDRICK at RUTGERS.ARPA>
Date: 3 Jun 83 17:52:01 EDT
From: Dir LCSR Comp Facility <HEDRICK@RUTGERS.ARPA>
A2. I think I am opposed to the details of the new PROCLAIM. I agree
with most of what is proposed, but I do not like the idea of an
implicit EVAL-WHEN, at least if I understand what is meant. I
would like PROCLAIM to be evaluated in exactly the same way as
DEFUN. That is, if you type it at the top level of Lisp, or it
is at the top level of a file, it would work in the expected
way. As I understand it, you are proposing that a PROCLAIM
could occur in a random place in the middle of code, and it
would still happen at COMPILE or LOAD time. I think this is a
bad idea. The whole idea of restricting DECLARE to the
beginning of blocks was to minimize this kind of thing.
I guess this wasn't explained very well; probably my fault. The implicit
EVAL-WHEN is to make PROCLAIM be evaluated in exactly the same way as DEFUN.
In other words, when the compiler sees PROCLAIM "at top level" it evaluates
it at compile time, rather than just pushing the form through into the "fasl"
file to be evaluated at load time. There are a bunch of functions and special
forms with this property, that the compiler knows to handle them at compile
time; hopefully the next edition of the manual will list them.
Precisely what "at top level" means seems to be still under discussion. But
clearly it means at least real top-level, inside PROGN, and inside COMPILER-LET.
It means inside some flavors of EVAL-WHEN too. But it doesn't mean at a
random place in the middle of code; there PROCLAIM is just a function like
any other.
By the way, would you allow us to set CALL-VALUES-LIMIT to 1?
No, for obvious reasons (there are functions in the manual that are
defined to return two values).