[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: issue COMPILE-ENVIRONMENT-CONSISTENCY
- To: Gail Zacharias <gz%spt.entity.com@NSS.Cs.Ucl.AC.UK>
- Subject: Re: issue COMPILE-ENVIRONMENT-CONSISTENCY
- From: Jeff Dalton <jeff%aiai.edinburgh.ac.uk@NSS.Cs.Ucl.AC.UK>
- Date: Mon, 5 Sep 88 15:48:03 BST
- Cc: sandra <@cs.utah.edu:sandra@defun>, email@example.com
- In-reply-to: sandra's message of Sat, 3 Sep 88 08:46:01 MDT
> Are there any implementations out there that actually *do* block
Yes: KCL. As you know, KCL compiles into C. So a Lisp procedure P
becomes a C procedure Ln that looks more or less like this:
... <C initialization> ...
TTL:; /* self-tail label */
... <C code for the body of P> ...
With the default optimize settings, the following optimizations are
1. Calls from P to itself are compiled as transfers to TTL rather
than as procedure calls.
2. Calls to P from other procedures in the same file are compiled
as direct calls to the C procedure rather than as
symlispcall(<ref to the symbol F>, <base>, <nargs>);
Omitting the symlispcall is faster (one C call rather than two)
and avoids saving any "invokation history" for backtrace.
> Does it happen by default?
Note, however, that AKCL works differently. It uses calls through a
link table (like translink in Franz) instead of direct calls to the
Jeff Dalton, JANET: J.Dalton@uk.ac.ed
AI Applications Institute, ARPA: J.Daltonfirstname.lastname@example.org
Edinburgh University. UUCP: ...!ukc!ed.ac.uk!J.Dalton