A new version of Lexicons is now available at:
http://www.flownet.com/ron/lisp/Lexicons2.lisp
This version is a radical redesign from the previous version. It makes
extensive use of the built-in functionality of CL symbols. In fact,
this version of Lexicons can be viewed as a thin layer on top of
packages, where the token-to-symbol mapping is done at macroexpand time
instead of read time. The API is very nearly the same as the previous
version. Where it differs it adheres more closely to the semantics of
Common Lisp. So, for example, LDEFUN and LDEFCLASS no longer set the
value binding of the symbol being defined to the corresponding function
or class.
There are three major differences between this version and the original:
1. Arbitrary namespaces and Lisp-1 lexicons are no longer supported.
2. The syntax for semi-hygienic macros has changed. Instead of `(,foo
...) you now write `(^foo ...) to reference the top-level binding of FOO.
3. Because there is now a package corresponding to each lexicon,
package reader syntax can be used to access lexicon bindings.
If you look at the code you will also see that this version is radically
simplified from the previous version. It is also pure Common Lisp with
no external dependencies.
This code is still experimental, but all the features have been tested
at least once. (Demo code is at the end of the file.)
Bug reports, comments and feedback appreciated.
Ron Garret <·········@flownet.com> wrote on Sat, 01 Mar 2008:
> There are three major differences between this version and the original:
> 1. Arbitrary namespaces and Lisp-1 lexicons are no longer supported.
> Bug reports, comments and feedback appreciated.
Wasn't allowing a Lisp-1 lexicon one of your primary goals?
Is that a "to do" for later, or does the new implementation preclude
allowing Lisp-1 code?
Another suggestion: in your posted announcements, I'd still recommend that
you include at least one sentence -- or paragraph -- defining what you are
talking about: "Lexicons provide the functionality of [...]". I got this
part:
the token-to-symbol mapping is done at macroexpand time instead of
read time
but that's not really a statement of a problem. You ought to have something
like "Lexicons are a solution [..of this character...] to the problem [...]
that a Common Lisp programmer might have."
(In other words: if this posting is the first I've ever heard of your
lexicons, can I determine whether I'd be interested in learning more?
You haven't provided enough information to help readers decide whether
to look deeper.)
-- Don
_______________________________________________________________________________
Don Geddis http://don.geddis.org/ ···@geddis.org
If you ate pasta and antipasta, would you still be hungry?
In article <··············@geddis.org>, Don Geddis <···@geddis.org>
wrote:
> Ron Garret <·········@flownet.com> wrote on Sat, 01 Mar 2008:
> > There are three major differences between this version and the original:
> > 1. Arbitrary namespaces and Lisp-1 lexicons are no longer supported.
> > Bug reports, comments and feedback appreciated.
>
> Wasn't allowing a Lisp-1 lexicon one of your primary goals?
Yes. But making lexicons a less radical departure from CL semantics
also has its advantages, so it might turn out to be a worthwhile
tradeoff. (Cue Mick Jagger: "I saw her today at the re-cep-shawn..."
:-)
> Is that a "to do" for later, or does the new implementation preclude
> allowing Lisp-1 code?
I'm not sure. I have not figured out an easy way to implement Lisp-1
lexicons using the new design, but I also haven't given it a whole lot
of thought so just because I haven't thought of a way doesn't mean it's
not possible.
Also, there may be a happy medium where e.g. the LDEF* forms just assign
the value binding to whatever is being defined, or something like that.
That's not really Lisp-1, but it might be good enough. (In fact, it
might be even better, because it would possibly give you the best of
both worlds: the name-collision protection of Lisp-2 and the ability to
refer to functions without having to type #' all the time. How often do
people really use the same name to refer to two different things at the
top level?)
> Another suggestion: in your posted announcements, I'd still recommend that
> you include at least one sentence -- or paragraph -- defining what you are
> talking about: "Lexicons provide the functionality of [...]". I got this
> part:
> the token-to-symbol mapping is done at macroexpand time instead of
> read time
> but that's not really a statement of a problem. You ought to have something
> like "Lexicons are a solution [..of this character...] to the problem [...]
> that a Common Lisp programmer might have."
>
> (In other words: if this posting is the first I've ever heard of your
> lexicons, can I determine whether I'd be interested in learning more?
> You haven't provided enough information to help readers decide whether
> to look deeper.)
The main reason I didn't do that this time is that this code is not
quite ready for prime time. So my target audience with this
announcement was people who were already interested and wanted to see
the latest bleeding-edge stuff. But your point is well taken.
rg