Can compiler macros make use of type declarations?
Antoniotti Marco
antoniotti.marco at disco.unimib.it
Tue Nov 7 08:26:53 UTC 2017
There is a portable (*) re-implementation of the Environment API (including the re-normalization of Franz return values switch) in CLAST.
http://clast.sf.net
Cheers
--
MA
> On Nov 7, 2017, at 06:00 , Steve Haflich <shaflich at gmail.com> wrote:
>
> A compiler-macro, just like a regular macro, receives an &environment
> argument which is supposed to contain (amongst other things) the
> lexical and global properties of bindings in the environment in which
> the macro is expanded. In the original language definition proposed
> by CLtL there was an environment access interface with functions
> like variablle-information which could return (for instance) what is
> known about the type of A in the lexical environment in which FOO is
> expanded.
>
> Unfortunately, the environment access system in CLtL was
> underspecified, there were no existing implementations, and no one was
> sure an implementation was even possible without imposing large
> efficiency hits at compile time. So we of X3J13 removed it from the
> standard.
>
> Duane Rettig of Franz later implemented a portable open-source sane
> environment module inspired by the original CLtL specification. This
> can be used to write a portable CL code walker of any kind, but it
> won't do you any good unless the code walker that is your favorite
> implementation's compiler happens to use it. But fortunately, several
> implementations provide documented environment access interfaces built
> into their compilers. Unfortunately, these interfaces are not defined
> by the standard, so their use generally makes code nonportable.
>
> BTW, a plain INTEGER type declaration is often not as effective as
> you'd expect because INTEGER type is the union of FIXNUM and BIGNUM.
> Arithmetic on the former can generally be inlined in a few machine
> instructions (particularly if the integer range can be narrowed
> further) but if any arguments or the result could be bignums, further
> runtime type tests and/or callouts will be generated.
>
>
> On Mon, Nov 6, 2017 at 12:43 PM, Chaitanya Gupta
> <mail at chaitanyagupta.com> wrote:
>> Let's say I have created a function called `FOO`:
>>
>> (defun foo (x)
>> ...)
>>
>> To optimize this function, I write a compiler macro. Can I make use of
>> type declarations that users of `FOO` might have made for the argument
>> `X` that is passed in to it?
>>
>> That is, let's say `FOO` is used like this:
>>
>> (let ((a (something-that-returns-an-integer)))
>> (declare (integer a))
>> (foo a))
>>
>> The compiler macro for `FOO` cannot make any optimizations on the
>> value of `A`, but can it take advantage of the fact that `A` is
>> declared as in `INTEGER` here?
>>
>> Chaitanya
>>
>
--
Marco Antoniotti, Associate Professor tel. +39 - 02 64 48 79 01
DISCo, Università Milano Bicocca U14 2043 http://bimib.disco.unimib.it
Viale Sarca 336
I-20126 Milan (MI) ITALY
Please check: http://troncopackage.org
Please note that I am not checking my Spam-box anymore.
Please do not forward this email without asking me first (cum grano salis).
More information about the pro
mailing list