Macros[by implementor of toy compiler]
Alan Bawden
Alan@LCS.MIT.EDU
Tue, 8 May 2001 03:15:06 -0400 (EDT)
Date: Mon, 7 May 2001 17:48:47 +0200 (CEST)
From: Michal Gajda <mg169780@zodiac.mimuw.edu.pl>
* Introduction of general hygienic macro's as you propose, forces us to
cope with following problems:
1. Full typechecking of macros(in place of definition) seems to need
second-rank polymorphism. (Decidable, but harder to implement) Of course
you can delay typechecking until you expand all macros, but then
error-messages become unreadable.
...
An interesting option is to allow the macro writer to supply his own
type-checker that is then run before macro-expansion. Type errors can then
be presented to the user using the pre-expansion source code.
I can hear you all boggling over the lack of safety in what I have just
proposed. Suppose the macro-writer provides a bogus type-checker? Ack!
Unsafe code! Mid-air collisions! Nuclear melt-downs! Am I nuts!?
Actually no. Just do a separate type-check of the fully expanded code
using only the built-in type-checkers. If this verification check comes up
with a different answer, then one of your macros has a buggy type-checker.
(What you do about finding -that- bug and reporting it to the author of the
macro is another issue...)
A student did a Masters thesis for Olin Shivers and me at MIT last year
trying to work out the kinks in a macro facility that would work
approximately this way. The results were interesting, but not yet ready
for prime time.