Various subjects [far36]
Francois-Rene Rideau
rideau@clipper
Thu, 24 Jun 93 22:44:04 MET DST
#--- begin manage/ideas/mailist.far ---
MOOSE messages
--------------
There haven't been many messages those times (or have I been missing it all).
I think the fact that we write messages in good english does slow the
discussion. Don't be reluctant to throw your ideas through the mail, even
if it's not finished.
#--- end manage/ideas/mailist.far ---
#--- begin manage/ideas/moose.far ---
(A-)Synchronousness
-------------------
let's have an occam-like SEQ/PAR construct in the system, and end
with the quarrel. When you want synchronous IO, you use SEQ mode;
when you want asynchronous IO, you use PAR mode. Both modes are
implemented. Really, I see no point in quarrel about synchronousness.
Please implement both sync&async and let the programmer choose. BOTH
are important (also remember you can hardly build PAR from SEQ, and
you can't feasably build SEQ from PAR).
Linking objects
---------------
Info objects must contain:
Code:
- what are the implicit or explicit parameters; what is read,
and what is changed.
- How it changes data.
- What other code is called; what other code calls me.
Data:
- who can read and who can write.
- what it can read or write.
- What other data is pointed at; what other data points at me.
Note again that code and data are the dual representations of the
objective computer world.
Garbage Collecting
------------------
Garbage collecting: a system global garbage collecting is good when and
only when every pointer use is trusted and/or checked. That shouldn't be
the general global case. Local GC is fine, and should be provided inside
a standard library for apps to use it. Global GC should be used only
through system descriptors, not with directly modifiable pointers.
This already has been talked about before, and no one saw any objection
about the memory system be modularly layered for each object indepently
from the others, with standard modules provided, with raw (on a 386, already
three layers, physical, paged then segmented) memory as standard implemented
devices above the which you can use stack, double stack (up and
down, not very useful with paged memory, but to save segment registers),
malloc, malloc/realloc, and/or GC managers etc.
From high level, better use name services, system descriptors and other
virtual stuff. The compiler is meant to simplify, find best implementation,
etc, whenever possible. Let's end with languages and compilers which can
only handle optimize code but not data. Let's have our data as virtual as
code, our code as handy as data.
This means standard compiler output including info on how they implemented
HL constructs into LLL/asm.
Demand paging & scheduling
--------------------------
Demand paging seams is ok, but the MacIntosh shows that sometimes you'd like
pages to be loaded BEFORE they are demanded, while the system is just
waiting, 'cause ye know they're _very_ likely to be demanded: else you'll
have to wait when you demand the pages. Example: when you load Word 5 for
the Mac, it won't fetch every (any?) command (that's good: you don't need
them all); it loads a command the first time you use it, so at this time,
you have to wait for disk access. But as the system waits for your commands,
it would have been nice if it used this idle time to fetch commonly used
commands as cursor displacement or block commands.
MUSIC
-----
What's Good With
* MS-LoseDoze: scroll bars that appear when and only when necessary (but
that's only a detail, and it's not perfect).
* MacIntosh: extension is just easy BUT requires complete rebooting to
take effect.
What's Wrong With
* MS-LoseDoze: everything that remains !
* MS-LoseDoze & MacIntosh
- it's a user-unextensible interface; you CAN'T program it at user level.
(ever tried a series of MANUAL search and replace ? I meant the same long
series to call for 20 different files). When something lacks in a software,
you just have to redo the software from scratch or wait hopefully for
your problem to solve in the next version.
- it's an screen only interface only software: you can easily share
anything that displays on a screen, but you just can't really efficiently
share generic objects. Actually, Apple & MicroShit think their product are
OSes, they just are naughty interfaces.
* Everything but Borland products:
- even a programmer can't program it without having read a (Mac: huge;
MS-LoseDoze, worse: buggy) documentation !
- even when the programmer manages anything, he can't append it to the app
he uses, so he all the same have to wait for next version of the app, or be
ready to rewrite and maintain his own app (true of all existing
systems) !!!!
What should be good about MUSIC
- included should be copy/paste sub-windows (physical aspect a/o logic),
w/ or w/out mask. Thus, if a utility offers some interesting icon, you
can duplicate it and put it where you want (example: hour, etc). There's
NO need for special functions to do that, because iconized objects have been
interfaced, thus have a descriptor, thus can have this descriptor duplicated.
This means each opened library should remember new descriptors on temporary
objects that should not be released.
- copy/paste should only be a specialization of push/pop and even
read/write to any object IO device understanding the copied/pasted object's
class.
#--- begin manage/ideas/moose.far ---
Let's begin Coding
------------------
* There seems nobody has anything fundamental to add about specs.
So let's begin coding. When one needs some implementation convention,
just publish it, and continue until some decision has been taken, then
modify code accordingly.
* languages used. For device programming, let's use ANSI C and
Assembly (I vote for TASM, but perhaps you'll prefer GAS).
TASM has got good macros et al. and uses standard Intel pseudo-code.
GAS seems to have good macros, but uses non-standard pseudo-code for
intel instructions.
The language team (including myself) will build a C to HLL compiler, and
an assembler into HLL embedder.
C code will have to include HLL directives inside comments.
* C writing conventions. I propose something like the code I'm sending.
* ASM writing conventions. It will depend on the assembler used, but
that's what I propose. We'll add info about parameters inside macros like
DefParam (char near *) Dest in eax
* Object support in C and Assembly.
I'm sending an Object description library in C. Its purpose is only for
booting a HLL compiler in the language itself from only C and ASM. But
actual implemented public MOOSE object are very likely to look like that
(remember that only public objects need descriptors). So please look at
the logical part of it and state what these objects lack, or what they have
and shouldn't.
Please comment. Problem:
what kind of pointers to use in MOOSE implementation: near pointers, far
pointers or system only pointers ?
* Presentation: we should all use the same style in programming, naming,
etc. First, let's not use tab characters, but 8 char long (and even then,
let's restrict ourselves) (oops ! I hope this file doesn't contain tabs )-8
Then, I propose we use uppercase for beginning of words (i.e. WriteToDisk
and suches), without underscores, but to define types when C of ASM wanted
a name (i.e. const zap zap_1 = { &zap_2,1 }, when C required named zap
structure). Well, we'll see and we'll vote.
* For IO (Especially disk I/O and SuperVGA programming), we can get
docs from Linux and/or XFree drivers code, and other PD code.
* Regularly publish your code, even tiny. Proceed by month release, then
diffs relative to it.
#--- end manage/ideas/moose.far ---
#--- begin manage/ideas/manage.far ---
Project Management
------------------
* Let's define a common MOOSE tree.
Here is what I propose.
MOOSE (
MANAGE (MAILLIST, ; for project management: mailing list contents,
WHODOESWHAT, ; what's done, what's to do, who does/did/will do it
IDEAS, ; lists of ideas, each subject managed by one person.
OLD), ; old stuff
SPECS (MOOSE, ; Generic MOOSE specifications
LANGUAGE, ; Low/High Level Language and compiler specs
386IMPL, ; 386 implementation specs
PROGRAMG, ; programming conventions
)
BIN (386),
386 (BOOT, ; how to boot from BIOS
NUCLEUS, ; nucleus
BASEOBJ (BASIC,CLASS,IO) ; management of basic objects
DRIVERS (MEM,TIME,DISK,SERIAL,GRX,FPU); hardware devices
; perhaps a XMS/VCPI/DPMI compatible version someday ?
),
LIBSRC (
OBJECTS(GENERIC,BASIC,CONTAINERS,IO), ;
MEM(GENERIC,GRAIN,FLAT,ALLOCRE,GC), ;
FILING(FAT,OOFS,HPFS,LINUXFS), ; (sub) file systems
GRX(RAW,WINDOWS), ; HL code for graphix
SYSTEM(THREAD,SPOOL), ; HL code for multi*
DBASES(GENERIC,DBA), ; relational databases
MATH(SETS,NUMBERS,LINEAR,ANALYSIS), ; math libraries
EMU(DOS,UNIX,APPLE2) ; emulate DOS, Unix, etc.
),
COMPIL (BOOT(386,CUTILS), ;booting stuff, C utilities
OSL, ;stack language to bootstrap compiler
TREES, ;internal object representation def.
PARSING, ;parsing= treeing text
CASTING, ;manage implicit type cast
OPTIMIZG, ;optimizing trees
GENERATG(OSL,386), ;generating code from trees
ASSEMBLE, ;assembling, unassembling
CTRANSLAT, ;C to (from) HLL translation
INTERPRET ;tree interpreter/debugger
)
)
* 'bout IDEAS directory, here's how it's going to be. Each subject has
a file (name:8 chars :-( ), maintained by only one person. Those who
want to add things write FILENAME.PER files, where Filename refers to
the file's name and PER is a personal three letters identifier. The
file maintainer will include new ideas in his file and is meant to heed
.PER file ideas, but he each one is free to maintain his .PER file and
to remove an idea from it only when he thinks it was well taken into
account in the main file.
I propose a subject file for each second order subdirectory of the MOOSE
directory
* Files may be posted using the following syntax: #--- begin FILENAME ---
at the beginning of a line, #--- end FILENAME --- at the end.
I'm sure someone is able to produce an awk script to manage that, or
even .BTM 4dos script. The same person should then also be able to produce
automatic unzip-ing and/or diff-ing :-). (I think I'll do the .BTM stuff).
* Posted files should use LF only format, whereas zipped files may contain
CRLF. See your local DOS2UNIX/UNIX2DOS converter to translate. See another
utility to keep datestamp (if you have one, please send it to me, I'd like
not to have to do it myself).
* I'm willing to maintain any such file. Please state your mind via
the mail list.
#--- end manage/ideas/manage.far ---
#--- begin manage/ideas/LANGUAGE.far ---
MOOSE language issue
--------------------
Some ideas:
- Let's have a standard compiler, providing standard services and virtual
classes, from HLL to binary, through MLL,LLL,ASM, etc (when exists).
- Let's have a unified preprocessor for everything. The preprocessor will
manage compiler modules. I begun the preprocessor in HLL, and I'm translating
it to C: it uses a generic symbol table manager and a generic character input
manager, and just find a symbol in the input, execute a procedure associated
to the symbol if found, a global procedure if not found. Typical procedures
will add/remove symbols, accept new symbols, open/push/close/pop structures,
etc.
- First compiler modules are tokenizers and detokenizers (useful for
compressing source parts, but possibly expand it back to text). This is
done by putting the right symbols and procedures in the preprocessor.
- Then come token interpreters. Note that the use of exceptions as a
language feature comes handy for error processing, or even simpler code
structuring. A standard generic interpreter is provided. This also can be
done directly by using the preprocessor's symbol table. Macros can be
used by inserting text before the preprocessor. This is done by having
an input stack between the preprocessor and the raw input.
- Here, we come interpreters or list/tree builders, which manage identified
entities.
- Then will certainly come a global tree analyser, that will fill
unsynthetized fields and decide each parsed object's destiny: delete
unreferenced objects, then compile end objects, etc. Object are grouped
by mutual reference for optimization.
* Please note that a standard generic library for tree algorithms is
provided, as for any common class. Please also note that a tree is an
abstract concept independant from implementation. Implementation will
depend on particular expected shapes of implemented objects.
- Tree simplifiers and translators then come, successively called by the
global tree manager. Simplifiers "optimize" trees; translator express them
in another "language".
- Remains data packing modules to transform simplified trees into code.
All that I say to define the global shape of the compiler, but mostly
to show that we can and must provide some standard compiling features.
- someone in the group said that people don't want to learn new things.
That's inaccurate. People hate having to learn a new syntax everytime
they use a new tool, when they know this knowledge will have to be
forgotten when using then next tool. What I propose is providing a unique
syntax for all MOOSE tools. At least, if different contexts require
very different syntactic styles, provide a standard syntax for each style,
allowing easy differenciation of one from the other (example: structured
functional notation is opposite to raw listing, but it's easy to provide
both notations for the same objects with the same compiler, changing only
the list/tree building part.
- not only end-users will appreciate a standard syntax and preprocessor
(which will encompass shelling, making, compiling, interpreting, analysing,
etc), but also programmers: programmers (who, as end-users already like it)
like being able to be able to reuse code; they don't have to write it
themselves, and they are able to communicate one with the other without
having to study the other one's implementation. But for code reuse to
happen, the system must ensure that you can trust other one's code; and
it must also ensure that code interface is understandable by the human
reusers. That's why the system preprocessor must include as a standard
commenting, multiple editing, cross-referencing. This being seen as the
fact that an object has multiple aspects and can itself have influence on
several other objects, we can view that as the fact that the preprocessor
can dispatch multiple objects to multiple aspect managers.
BOOTSTRAPPING THE COMPILER
--------------------------
(default is SEQ)
PAR
Define HLL
Write HLL libraries /** also helps defining HLL **/
SEQ
PAR
Design a format to describe objects
in 386 ASM,
Write a protected mode bootstrapper
Write managers for basic OSL objects
Write binary routines an OSL interpreter using these objects
in C,
Write an object manager
Write simple IO
Write symbol management
Write the preprocessor
Write an simple data compiler
Write routines to write data in MOOSE binary format or assembly
if using MOOSE binary, Write routines to get ASM routines' adresses
Use the data compiler to produce assembly source or MOOSE binary
Use the 386 booter + C object writer to write and debug binary code
PAR
SEQ
optionnally build a C to OSL compiler using the preprocessor.
Rewrite the C preprocessor code in OSL
Debug the OSL version of the preprocessor using
Write in OSL a HLL parser
Write in OSL a OSL code generator
Finish rewriting the HLL compiler with itself
Add features to the HLL compiler
Write HLL compiler modules for optimization
Write assembly code generator for the HLL, using HLL.
/*****
Has anyone got a complete C grammar to
*****/
/*****
OSL: objective stack language; a very simple language that allows
us using MOOSE objects, and that is very simply produced by our
preprocessor
*****/
/*****
the order in the PAR statements indicates the order to launch
the processes, which are no independent, and tend to interact in
that order
*****/
END
HLL LANGUAGE DEFINITION
-----------------------
Here are the basic ideas I'd include in the HLL definition.
Please state your mind.
I wrote it similar to natural english, but if you stick to
(*(int*)(++b->c))(&e)?x:d[++a] notations, I think it can
be included in the language too.
Basically, you define objects having subobjects and/or
operating on other objects. mutable objects can be modified,
the others can't and are constant (the default). You define
an object by constraining on it:
The compiler is meant to manage recursivity, so don't be reluctant
to ML-like functional notation.
- you define objects with some keywords like
Consider x
Define x
- you can define constraints on objects
x = 1
x : integer
- you can assume things about objects
assume that a is an integer
know that a>0
- You can define constraints while defining it.
Consider the integer x
let x be an integer
Define x: integer
Consider the integer x whose value is 1
let x be the integer 1
Define x :: integer = 1
Consider x = 1
let x = 1
Define x = 1
- You can access an object's export
a.b
a.c
- Objects have predefined exports
x.type
x.value
-
- you can define constraints on objects, which are boolean
x = 1
x+y = 0
IsEmpty(x)
x :: integer
x.type = integer
IsConstant(x)
x :: mutable integer
- you can give orders to the object
Check that a=1
a := 1
have a+b = 2 and a*b = 1
- You can define objects with a list syntax
LIST
a ; b ; c
LIST
a
b
c
LIST
LIST
a
b
c
d
e
- a list can be a list of orders
OBJECT
{
type = Point
x = 1
y = OBJECT { value = OBJECT{ Consider a,b :: integer , a+b=5 , a-b=1}.a }
}
- you can have objects operate on others
a [ b ]
prefix [+] [ a , b ]
- you can define how objects operate on others
let a [ b ] = b + 1
let a = function b -> b+1
let a [{}] = {}
let a [b::l] = A [b]::a [l]
let a [x ; y] = ...
let a [x ;y ;z ] = ...
let a otherwise fail
end a's definition
a operates on integers and returns an integer
a is a function
a is an abelian group law on integers
a returns an integer and a
a operates
a does not have any static variable
a reads b
a writes b
a depends only upon c,d,e
a does not depend upon e
e does not affect a
a writes only its result,d and f
a is independent from e
let a [b] = { PAR { Write [b] }
- you can give implementation details on objects
implement a with a list
a is implemented as a raw list of short integers
a is implemented as register esi
on entry b is in register eax
input b from register eax
output b in esi
- you can give concurrent forms of an object
a is function a::longint -> a+1
or inline i386 assembly {input eax, inc eax, output eax}
let b = function x -> x+1
know that b restricted to longints can be implemented as a
- you can comment objects using hypertext
note that a's purpose is to make you laugh
note that these comments are boredom
about fopen, note that _mode_(view "mode description") contains
comment "mode description" is "ghheh"
- you can use the compiler's services with a standard library.
compile ["comment \""+x+"\" is \""+y+"\""]
a=compile[x]
- you can define exceptions to an object's behaviour
exception Out_of_paper | Connection_failure can occur in
procedure print.
#--- end /manage/ideas/language.far ---
#--- begin /specs/language/cutils.doc ---
Here is the description of the C utility I'm programming to bootstrap
the MOOSE compiler.
It includes n parts: object management, symbol table management, IO
management, command line management, and a main (convert.c) program to mix
it all. All these libraries will be translated to OSL then HLL after the
first boot step is over.
- object management : it defines object, class and metaclass descriptors.
Roughly the same data format will be used for MOOSE objects. At least, the
same library will be used to process simple objects from C to MOOSE binary.
-
The uuencoded zipped C source (for BC 3.1) is given below in a zip.uu file.
#--- end /specs/language/cutils.doc ---
#--- begin /compil/boot/cutils/zip.uu ---
QUUNCD Ver. 1.2, by Theodore A. Kaldis.
BEGIN--cut here--CUT HERE--
begin 600 convert.zip
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
MY2N@S2YU\^85\^]X;><MNV7R$MCB#@!8LY51SVB(>7`36LSQ)2FZ6TMM3
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
M`````````0`@`````````$-/3E9%4E0N0U!+`0(4`!0````(`"AWV!H-3A$'
MA`,``+X,```+````````````(````!(&``!#3TY615)4+D132U!+`0(4`!0`
M```(`"AWV!H%/,&5V@<``"4=```+````````````(````+\)``!#3TY615)4
M+E!22E!+`0(4`!0````(`)V6UQJ)<4V1#P4``%X/```(``````````$`(```
M`,(1``!'151/4%0N0U!+`0(4`!0````(`"&7UQI?!IJ*R0,``%T(```(````
M``````$`(````/<6``!'151/4%0N2%!+`0(4`!0````(`$FFUQJKA7ZRC0``
M`,@````)``````````$`(````.8:``!-65194$53+DA02P$"%``4````"`#I
M;M@:2LF>J_P````@`@``!P`````````!`"````":&P``35E624\N0U!+`0(4
M`!0````(``EWV!JF^>41\@$``,@$```'``````````$`(````+L<``!-659)
M3RY(4$L!`A0`%`````@`;F_8&D1$H&'4!```-P\```D``````````0`@````
MTAX``$]"2D5#5%,N0U!+`0(4`!0````(`()NV!K.7`S.SP4``/\/```)````
M``````$`(````,TC``!/0DI%0U13+DA02P$"%``4````"``XF-<:S:,)MY$#
M``#P!P``"``````````!`"````##*0``4U125$]8+D-02P$"%``4````"`!;
MEM<:;?CRS,H!``!5`P``"``````````!`"````!Z+0``4U125$]8+DA02P$"
M%``4````"`#0F]<:HAZJ^ET```!L````"@`````````!`"````!J+P``5E-9
M34)/3%0N0U!+`0(4``H``````-.4UQH````````````````*``````````$`
M(````.\O``!64UE-0D],5"Y(4$L!`A0`"@``````D&C8&@``````````````
M``H``````````0`@````%S```%)364U"3TQ4+D-02P$"%``*``````"2:-@:
M````````````````"@`````````!`"`````_,```4E-934)/3%0N2%!+`0(4
M`!0````(`)%UV!HJ7^"_%P$``-`"```(``````````$`(````&<P``!&24Q%
M24\N0U!+`0(4`!0````(`*]QV!J44CD,F@```.\````(``````````$`(```
M`*0Q``!&24Q%24\N2%!+`0(4`!0````(`%1QV!J,6$6FS@```/X````'````
M``````$`(````&0R``!$159)3RY#4$L!`A0`%`````@`,''8&AQK6\R;````
M[0````<``````````0`@````5S,``$1%5DE/+DA02P4&`````!0`%`!&!```
&%S0`````
`
end
END--cut here--CUT HERE--
#--- end /compil/boot/cutils/zip.uu ---