Criticism ... synthesis?

Dr. J. Van Sckalkwyk (external) SCHALKW@odie.ee.wits.ac.za
Sat, 17 Dec 1994 10:29:58 SAT



This has three parts.

Part 1. A request.
-----------------

Can somebody _please_ forward me the communications from 14 - 16 
December,
as I was in transit from NZ to RSA and missed all, including 
responses to
my comm of 14 December (am).


Part 2. Response to Fare &c
---------------------------

>Hey, there. Please everyone tell what he thinks about it all, if he
>agrees with me (the no-kernel decentralized, but secure design), or
>Mike's (a monolithic hugeware centralized unsecure kernel, as I see 
it);
>or if you have other suggestions that show that we both are wrong, 
and
>how to correct our ideas so that they be right.

Mike has MY vote. I also think you're being _grossly_ unfair to him.

1. You use "monolithic" in criticism of an idea that is 
straightforward,
and instead postulate a more complex system!

2. "hugeware" ?
My initial statement (and it appears in Mike's compilation of our 
goals)
was that the core code should be +- 20 lines (with everything stemming
from this). Yours is obviously a completely new interpretation of the
word "huge"!

3. "centralised". This is again unfair. Sharing common characteristics
is not the same as being centralised. 

4. "unsecure". I cannot see why security should be better in your 
system
(with what seem to be great big wodges of uncheckable code) than in 
Mike's.



>If we ever upgrade our LLL (or support OSF's ANDF, etc), which we can
>*never be sure* we won't; or you so sure about yourself that you 
think you'll
>manage designing at the first time something that nobody ever will 
be able
>to beat ? I hope not.

In my mind, the _whole LLL idea_ is to have a symbolic low level 
language that
is independent of the machine. A sort of "C" without the fuckups, 
redundancies
and unnecessarily high-level constructs. Sure we can upgrade the LLL, 
but
this should never, ever, mean incompatabilities with prior code.



>   Why ? No one forces you to forget older modules, or to translate 
them.
>Remember we have a distributed system. There might be a "good virus" 
that
>would spread and translate everything to the new standard, etc.

And you call this 
secure???????????????????????????????????????????????????
You are introducing the potential (once we have worldwide "Joy") to 
destroy
the whole of civilisation with a single bad virus masquerading as a 
good
one. Your argument here is the best one yet _AGAINST_ your system.


>> The LLL should be fixed, period.
>   Fixed as much as possible. But our LLL should not be the dogma of 
a new
>computer religion. As long as our LLL is useful, we keep it; when it 
can
>be replaced by something better enough, it will. The only thing is we
>must strive to design it the best we can, so indeed, the better we 
succeed,
>the longer the LLL will survive.

Both wrong, both right. Very infrequently, one may need to EXTEND the 
LLL.
I cannot see any point in ever completely rewriting it - might as well
junk the whole system at that stage, and begin again (which is what 
you
would effectively be doing, anyway).


>> But if you start having many versions of our LLL language we have 
done
>> little to advance a unified coding/distribution standard.
>   I'm not saying everyone should have his own LLL. LLL is standard.
>I'm saying everyone *may* have a different version if it suits more 
his
>needs (and those of enough people so that supporting it is ok). And 
also
>and above all we should consider the *possibility* of upgrading it.

This is NUTS. It's completely CRAZY. The LLL _must_ be standard. That
does not imply that you cannot have "deeper" or "still lower level" 
ways
of implementing the LLL instructions on a particular machine. For 
example,
a primitive instruction in the LLL may be:

        SHL RR,4        ; shift RR register 4 bits left

On a 386, this could be implemented by 4 x (SHL EAX,1)
    or (MOV CL,4 | SHL EAX,CL) or (SHL EAX,4) or whatever. 

You might also have as "primitives" in the LLL items that at present 
are commonly regarded as being on a much higher level eg. compression 
etc.
We must sit down and decide what is desirable in this regard!!



>   I'm for a free world. Freedom allows selection of the fittest. By 
some
>authoritarian way, you may force some good thing to happen, but you 
break
>the dynamics, and won't be able to evolve.

FREEDOM DOESN'T IMPLY TOTAL ANARCHY.



> We want computing freedom.

Agreed. But that doesn't mean that everyone goes his own merry way. To
co-operate (which is really what this is all about) we need a core of
reasonable standards and a common "language"!


I THINK THAT A LOT OF THE PROBLEM IS THAT DIFFERENT PEOPLE ARE 
TALKING ON
DIFFERENT LEVELS. FARE SEEMS TO BE THINKING ON A VERY HIGH LEVEL, AND
CONCENTRATING ON THE HIGH-LEVEL OO SIDE OF THINGS. MIKE & MYSELF ARE
TENDING TOWARDS THE LOWER LEVEL. RATHER THAT ARGUING FOREVER, CAN WE
NOT ACHIEVE SOME SYNTHESIS?


>> Every computer runs machine language (please don't flame me for 
ignoring
>> neural nets and such!).
>   Know about LISP machines ? Or FORTH machines ? Yes they run 
machine
>language. But that does not mean the language is like machine 
languages
>*you* know. Let's define *useful abstractions*.

Agreed. It is vitally important to define a LLL that is sufficient 
for 
our needs, and has a minimum of redundancies. Let's do this.


>> Exactly.  We need to seperate[sic] the low-level goals from the 
high-level
>> goals.
>No ! Like JVS say, the two are closely linked one to the other. It's 
as
>crazy to design the LLL without taking into account its HLL use, as 
to
>design an HLL without taking into account how it may be implemented 
on
>actual machines.

The two complement one another. NEITHER has "priority". They work 
together!



>> Everyone, please refrain from saying anything sucks until you have 
a better 
>> version, otherwise all our time is wasted.

Agreed.



>   [...] Ok.
>   Our binary encoding format has some header that identifies the 
file format,
>its possible version, and the nature of the object inside, together 
with
>some annotation fields, containing, size, CRC, author/originator
>authentification, etc. Then some compressed table of contents, with 
a list
>of imported and exported objects, with their global names, and some
>indicative resource allocation information. Lastly, you have some 
custom
>compressed data that contains the actual code.

Fine. This is higher level stuff. Very high.




>   LLL will some kind of threaded code, with compressed pseudo-
pointers

I've been thinking along these lines. Yep.



>   Now, in-memory representation for the i386 code may be 16-bit or 
32-bit
>threaded code, or byte-code, according to the LLL flavor chosen (and 
needed
>speed). Objects using different calling conventions may easily 
communicate
>through standard gates.

You are introducing unnecessary complexity. Reiterate. Reiterate. 
Sigh.
LET'S FIRST IDENTIFY THE TYPES OF DATUM THAT WE WILL BE USING. SEE MY 
PREVIOUS
COMM. (14 Dec, 3am)



>   Objects are allocated in a GC-able heap or outside it.

Are you sure you need this? Why not (for example) have each object 
handle its own GC. (ie be given resources, and dispose of them as it
sees fit, returning all to pristine state on exit)?


>that by testing a simple bit pattern of the pointer. The parity bit 
may be
>used to differentiate pointers from integers (thus losing one -- or 
more --
>bit of precision; this trick is very commonly used in LISPs, and in
>caml-light); or the same bit pattern differentiates integers and 
constant
>pointers from GC-able pointers that may be relocated automatically. 
In any
>case, we lose some bit in integers (unless we have enough registers 
to
>completely isolate integers from pointers).

Ideas are good. We can do even better than this.
 Let's agree on data types and then discuss implementation.


>[....]

>> It's not aceptable to have the computer say "I can't understand 
Fred 
>> because I don't have the proper communications drivers"
>Just load them. You can have them together with Fred's stuff.

No, hang on a bit. I'm running on a 486. Fred has a 68030. Jane is 
tinkering with a Z80 just for the hell of it. Fred has a brilliant new
program he has just written. It uses a variety of low level drivers, 
that
work well on his system. Jane and I still need drivers for our system.
Are these drivers:
    A. Local to us?
    B. Written in a common low-level (kernel?) that all systems
        share?
Well? (Or must, gods forbid, Fred keep a copy for all possible 
systems???)


>Ok, so for "Object", say: "a unifying concept that encompasses just 
any
>computing abstraction. Objects are furtherly managed according to 
their
>useful properties, and not according to some unadapted arbitrary
>distinctions".

This is mind-numbingly vague. Whatever happended to inheritance,
encapsulation and polymorphism??




>> I think this open thing is thwarting our attempts to make
>> this thing work fast.
>   Why should it be at all ? I think the opposite.

I agree with Mike. But maybe we can achieve a synthesis.
[...lots of argument about 3-D game engines deleted...]







Part 3. A proposal.
-------------------
Rather than arguing in circles forever, let's:-


1. DEFINE "DATA TYPES"
    a. constants
    b. variables
    c. numbers
    d. blocks
    e. pointers (to blocks)
    f. verbs
    g. interpretable combinations of a..f. ("friends")
    h. objects
    [Please feel free to add or subtract, constructive
        criticism is welcome]


2. DEFINE OUR LLL
    a. symbolic registers, including "pointer registers"
    b. necessary flags
    c. Suggested primitives:
        ADD SUB MUL DIV SHR SHL ROL ROR OR XOR AND NOT NEG
        TEST_UNDER_MASK
        REQUEST / FREE "memory" block (in broadest sense)
        POINTER creation
        GET / PUT
        PUSH / POP
        CONDITIONAL_BRANCH (or skip)
        "CALL" / RETURN
        FORK / JOIN
        HOW_LONG
        (relevant graphic_display primitives)
        (relevant visual_perceptive primitives)
        (relevant speech primitives)
        (relevant sound_generation primitives)
        (relevant hearing_perceptive primitives)
        (? relevant spatial_descriptive&perceptual primitives)
        GET_FROM_STREAM / WRITE_TO_STREAM
        ? DO_CRC
        ? COMPRESS / DECOMPRESS ??!!
        ? RANDOM number generation
        ? INSERT into block
        ? EXCISE from block
        ? SEARCH / SORT
    etc....
    [Please feel free to add or ***subtract***, constructive
        criticism is welcome]


3. THEN REFINE.
    a. implementation of data types.
    b. Definitions of objects & how they communicate, in terms
        of the above...
    c. and so on...




Comments?

Bye for now, JVS.


PS. Apologies for the higgeldy-piggeldy text. The text editor I use
@ this end of the world does that sort of thing .. maybe I can tinker 
and fix it.
J.