LLL subproject

Dan Moniz dnm@pobox.com
Mon Feb 3 02:02:02 2003


At 03:36 PM 1/26/2003 -0800, Brian T Rice wrote:

>Thanks, Dan, for bothering with this. It's not really my cup-of-tea to
>discuss systems-level stuff. Anyway...

No problem. I'm happy to help in whatever way I can. My time is pretty 
limited these days though, so please don't expect timely responses. I 
apologize up front for this, but until I complete more of my long-standing 
projects, and until my daily life can accommodate it, I'm drastically 
reducing the amount of time I allot to efforts outside that scope.

>The LLL project area is intended to cover both the initial implementation
>of the HLL as well as the subsequent bootstrap and eventually all
>low-level code within Tunes.
>
>I have been adjusting Fare's notes on this at http://tunes.org/new/LLL/

Just to be clear, I'm only commenting on what's found at that URL, and 
related topics.

>Generally, it should not be viewed as a language, but a set of utilities
>which in combination are very expressive. Once bootstrapped, the LLL would
>be somewhat similar to how I envision the HLL meta-architecture and its
>instances: there are a set of components which work together to provide a
>whole system that we think of as a "language". In the case of the LLL,
>there would be object types which deal with object-identification spaces,
>memory-management, code-generation, scheduling, device-drivers, and
>low-level implementation modules and encoding systems. These would be
>composed into a run-time-system instance, which may have several
>components in the same category running side-by-side.

Here's how I think of this. It's probably wrong.

The HLL is a set of semantics and a computable expression of those 
semantics (i.e. a programming language) with which the TUNES system is 
constructed.

The LLL is a set of semantics and a computable expression of those 
semantics (i.e. a programming language) which the HLL manipulates to get 
things done with the hardware layer (I'm obscuring the i386 and O'TOP 
abstractions underneath the LLL, which I have not studied).

>With that frame in mind, we need to develop a clear outline on the website
>that allows us to put together a code framework that does what we need.
>However, for the initial implementation of the HLL, any system is really
>allowed, although Common Lisp and Maude are my top choices. Also, a
>predecessor of Maude was written in CL, and may also be a good choice to
>implement with.

I'm not really familiar with Maude beyond a few papers I've read on it, so 
I'm not going to comment on it. I know you've been working with it some time.

Common Lisp may be a nice choice, but you'll have to write a Common Lisp 
that melds well with the LLL. If you're willing to do that, then great -- 
it's a pretty big project. I certainly think you'll have better adoption 
with Common Lisp over Maude, but I could be wrong. I would strongly suggest 
staying away from writing your own language for the purposes of either the 
LLL or HLL if at all possible. This warning can be ignored (to some extent) 
if you implement a language inside a suitable host language, as is commonly 
done with Common Lisp, Scheme, ML, etc. Maude may also apply.

>So, what are your first thoughts?

The LLL page mentions starting with the words of ANS Forth, except those 
related to I/O, parsing, and definition. This (by itself) creates a sort of 
virtual instruction set or p-code, analagous to a virtual machine. If the 
i386 and O'TOP layers sit underneath this LLL, and the HLL manipulates LLL 
objects (compiles down to LLL -- LLL code generation), then you have a nice 
isolation between the actual hardware interface layers and everything else, 
at what would seem to be a higher level than say x86 assembly. Forth has 
certainly been used in this space for a long time (Forth-on-a-chip, Forth 
as Chuck Moore would have it, etc.)

In general, I'm confused about the actual execution of the various stages, 
but this might just be due to lack of information about the rest of the 
project in general. I don't see anything that says something along the 
lines of "we're going to write this abstraction layer in X to get Y, which 
has the semantics of ANS Forth minus these bits. Then, we're going to build 
the HLL using Z which interfaces with Y". There is a mention of using 
Scheme to generate assembly and using C as a portable assembler. Does that 
mean you're going to be writing x86 assembly? Wouldn't that be at the x86 
level? Shouldn't you be using Scheme to generate the LLL? I don't know, 
it's not clear.

There's a number of issues mentioned dealing with relatively high-level 
concepts that are to some degree hardware dependent, like garbage 
collection. I think those could probably be dealt with elsewhere. Low level 
to me means things like bit-order, instruction set, chip architecture, 
execution, memory esoterica, etc.

Replies welcome, especially on places where I've grossly misunderstood 
something. I'll keep active on this thread as much as possible, keeping all 
other TUNES traffic under the caveat mentioned at the beginning of this email.

Congratulations on the new site launch!


-- 
Dan Moniz <dnm@pobox.com> [http://www.pobox.com/~dnm/]