Okay, so I read the Honu paper more and more.

Honu *does* have a separate reader and macro-expander.

However, Honu's approach means that what Honu does is effectively turn
code like this:

function foo(x, y) { x + y; }

to this s-expression:

(honu-block function foo (x |,| y) ((x + y)) )

I'm *not* sure that the Honu reader actually does that - the Honu
reader probably emits just (function foo ....) and the Honu language
(using Racket's language system) tacks on the honu-block before it.

The honu-block macro is a Scheme-level (actually, Racket-level, since
RnRS macros are just syntax-rules) macro.

Honu-level macros are *different* from Racket macros and are handled
differently (by my understanding, using Racket's expansion-time
environment to somehow store them while honu-block processes things).

This works for Honu because of the Pratt parsing enforced by
honu-block, meaning that the (x + y) part will be seen by Honu-level
macros as something practically close to (+ x y).  Because of the
tacked-on honu-block keyword, honu-block has full control of what
Honu-level macros see.

Still, it seems that Honu significantly obscures the code-is-data part
of Lisp, because of the significant transformations that honu-block
performs on its input list.

1.  Honu is not very back-compatible with Lisp.  Our approach allows
valid parsing of "string->symbol", Honu seems likely to convert that
to three atoms, 'string '-> 'symbol.  Our approach also allows a large
amount of existing, typically-formatted Lisp code to be parsed
identically to existing 'read; Honu makes changes that prevent
existing Lisp code to be read in, in conjunction with Honu code (i.e.
you can't copy-paste existing Lisp code into a Honu language file; you
can copy-paste existing Lisp code into a sweet-expression file most of
the time)

2.  Actually, Honu *can* support quote.  It's just that the syntax of
lists in quote doesn't match the syntax in the rest of Honu.  In Honu
a list is [1,2,3].  But in a quote context it's (1 2 3) (I think).
I'm not sure what the term sequence "quote [1,2,3]" would expand to,
but I suspect it's something like (quote (honu-bracket 1 |,| 2 |.|
3)).  So, lose homoiconicity and generality just in this one stroke.

3.  Honu requires a macro-expansion pass to convert a + b to (+ a b).
Sweet-expressions does not require a macro-expansion pass to convert
{a + b} to (+ a b).  This may not seem significant, unless you're,
say, writing a 4X game where your unit descriptions may need small
amounts of interpreted code, and because this is a unit description
file and you don't want your users to suddenly e-mail /etc/passwd to
an undisclosed third party when all they wanted to do was try out a
neat new unit description file they got off the internet, you're not
interested in giving the full power of macros in the little bits of
code, but you *are* interested in allowing the unit description file
to say "define power(berserker) { power(scout) + 2 }" (i.e. Principle
of Least Power).

------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
_______________________________________________
Readable-discuss mailing list
Readable-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/readable-discuss

Reply via email to