[R6RS] safe and unsafe; declarations

William D Clinger will at ccs.neu.edu
Tue Mar 7 14:29:51 EST 2006

> > The macro expander wraps all code that results from
> > expanding a local or library [macro] within a
> > .larceny:internal:ignore-unsafe-declarations form.
> Well, why didn't you say so?  :-)

Because I hadn't figured out exactly what I'd have to do,
but I was sure some hack would work.

Were you there when Mike Powell presented a paper on his
Modula-2 compiler at PLDI, probably back when it was the
ACM Conference on Compiler Construction?  To illustrate
his "best simple" philosophy, he explained how all of his
compiler's loop optimizations were based on reducible flow
graphs.  You could see and hear the buzz in the audience,
and the first question was the one everyone was asking
each other: "But doesn't Modula-2 have gotos?"

Powell said, "Oh, yeah, I forgot to mention that.  Well,
if a program uses goto, I just don't optimize it."  The
entire audience stood up and applauded, cheering wildly.

> I'm not sure whether this is a valid implementation if we include
> identifier-priority, but I don't want to debate identifier-priority or
> even think it through at this point.  As I said, it's not part of the
> model, just something we might or might not want to add later if we adopt
> the model.

Fine with me.  I have deleted identifier-priority from the
current draft.  The discussion is in the r6rs archives, so
we can bring it back later if we want.

> Agreed.  But if you promise too much about fast, small, and debug
> declarations in your documentation, you might get caught violating the
> semantics.  For example, you probably shouldn't promise that all calls to
> debug-priority 3 primitives are logged in a backtrace log.

Historically, Larceny's documentation has been pretty good
about not promising too much.  And we have delivered on the
non-promises, if not on the promises.


More information about the R6RS mailing list