[e-lang] Announcing E-on-Common-Lisp (was Re: Is send DeepFrozen?)
Kevin Reid
kpreid at attglobal.net
Sun Dec 12 20:02:11 EST 2004
On Dec 12, 2004, at 12:18, Dean Tribble wrote:
>> Rather, I am writing E-on-Common-Lisp from scratch.
>
> This is great.
>
>> So far I have implemented almost the entire Kernel-E language (except
>> for escape-catch and meta.getState()) via translation to CL, and
>> enough of ELib to run interesting code (though no IO as yet).
>
> In EonSqueak, I'm translating E (or rather Kernal E) to essentially
> equivalent Squeak code. Is that what you mean by translating?
Yes.
> I have a translator from Kernel E to and intermediate for eslang which
> has a lot of the guards compiled away, all the nested scoping
> collapsed, etc. Squeak then loads that (through a simple grammar) and
> generates corresponding Squeak code. How is your architecture
> different, and would the intermediate representation and/or compiler
> be useful? IT sounds like you already have a similar logic, but I
> can't quite tell.
I have no intermediate representation (yet). ENodes are translated
directly to CL forms via depth-first traversal, passing leafward (call)
lexical scope information and passing rootward (return) variable names
to create 'let' forms at the outermost scope a given locally (treewise)
defined variable can be visible.
>> Parsing of E source is handled by a Java-E subprocess.
>
> Cute. I was planning to do somethign similar, but I just have an E
> program run in Java the translates all the modules to eslang. What
> representation do you hand between E and CL, and is that
> representation processed by E code or CL code?
I have an emaker which converts the term-tree produced by
<elang:visitors.makeConvertENode2Term> to a S-expression, which is sent
over a pipe to the CL process. I then use the CL reader (S-expression
parser) to load that, and convert the resulting tree into ENodes
(represented as CLOS objects).
>> I am attempting to write as much of the non-primitive ELib code as I
>> can in E, so that it is not specific to this implementation, and not
>> 'part of the TCB'.
>
> Good. That's really the biggest thing from what I can tell. It's
> also the place where we can share a lot of code. Because I compile to
> eslang, I can potentially write in E parts of the system required to
> run E at all. I will write up my boot strategy to allow secure boot,
> even though low level parts of E are written in E.
I have no plans to make this system self-hosting to any degree, *yet*.
It is essentially structured the same as E-on-Java, except that more of
the non-primitive code is written in E rather than Java.
Specifically, so far, the List, Tuple, Union, Intersection, DeepFrozen,
nullOk, and PassByCopy guards, PackageLoader, BaseGuard, ProtocolDesc,
TypeLoader, and simple__quasiParser.
(The List guard is nonprimitive since Kernel-E list patterns coerce to
ConstList primitively. (If this seems a wart, consider that 'if'
expressions and such-that patterns coerce to boolean primitively.))
> Can you send me a copy of what you have so far?
I plan to publish the source "soon" after cleaning it up. If the
cleanup isn't done in a reasonable time, I'll send it to you anyway.
--
Kevin Reid <http://homepage.mac.com/kpreid/>
More information about the e-lang
mailing list