• This page will include the following, as I get around to them ; Contents.
  • (a) Introduction.
    (b) Unique features.
    (c) Implementation so far.
    (d) Possible implementation methods.
    (e) Format.
    (g) How it works.
    (h) What it does.
    (i) What it can do. (enough of the technical stuff I think)
  • (a) Introduction.
    The basic object, or what would form the `Kernel' (even though the system is essentially Kernelless) is an assembler, or cross-assembler. What it does is to read in a script file (called the VMS or Virtual Machine Specification) which contains information about the both the current computer, and the `ideal' or `simple' computer, and converts, quickly, from one to the other, effectively compiling, or assembling the program (there are no programs really though - everthing is an object, thus there is no `huge 1 meg programs' to load, compile and run, instead everything is made up of objects which communicate with each other).
  • Programs need not necessarily be written in assembler. With a better basic VMS assembler, programs may be written in Native C, and compiled at run time (everything is essentially compiled at run-time, but there are some additions to this rule).
  • The format of the assembler programs is also defined in the VMS (to a fashion), so different VMS' can be used simultaneously, with the assembler finding the one which matches the format of the file its trying to run. C and pascal programs may be run from the command line. Thus, instead of writing compilers , you would simply write a VMS for your language, and design an IDE (or not if there is already a good one out there) for the programmer. Compiling and running the program is as simple as sending it to the assembler, and perhaps giving reference to the appropriate VMS.
  • The VMS language/script file is an integral part of the system, and is thus itself Object Oriented. If you want to add a few of your own assembly instructions to the current VMS, you simple overlay another VMS with the additions. You instantly gain the features of the parent VMS. This is however covered in Part C of the overall design page (on VMS's) so I won't go into it more here.
  • (b) Unique features.
  • The most unique thing about the assembler (or perhaps just one of the unique things) is that it is Object Oriented to the core. When programs are assembled, they are left in an Object Oriented form, using Virtual Method Tables, and look ups for everthing. Even the Process Control Blocks should be Object Oriented. The good thing about this, though, is that, because its only compiled at run time, we can do a few tricks to speed up execution. For example, if an objects methods are simple/small enough, we can have the assembler embed them in the code which uses them. No calls required - programs can Grow, or shrink, depending on how fast the user wants the system, or each individual program, to run.
  • Code can (and should) also be stored in macro form - thus removing redundent code and data (data perhaps could be stored in macro form as well - examples are ; cosine/sine look up tables for graphics programmers - let the OS produce them at run time), compressing the stored code, and making it re-useable.
  • Code can also be stored in snippets - thus a method can have several embedded methods, which may be reused by other programs. A simple examples is a setpixel routine. ; First there is the address calculation. Then the pixel colour is put to that address. We may even include an initial step of loading a pointer to the screen.
  • Thus each bit of this code may be given a name, and another object/method may use any or all of the snippets of code. The above example might not be too interesting, but in effect, if an object uses .ZIP style compression, any other program may simply pull that out for its own use, including the ability to pull out only parts of the compression method, which are appropriate to its case. And none of this is in the eventual stored program - which has two main advantages. Firstly it will probably save space in the eventual program. Secondly, if a better/faster method of ZIP is installed, the program will either be unaffected, but most probably run faster, or use better compression.
  • I'm also thinking at this very moment of the idea of there being data in and data out for each program, and thus you could get a compressed program of 300K, but because your computer has better compressor installed, once that program is run, it could shrink itself down to 250K. Something like that - good idea though.
  • (c) Implementation so far.
  • This is unfortunately not how this has been actually implemented so far, but instead how I have decided/looked at implementing it so far. There are a lot of ideas in there, they could easily be lost or ruined by badly designed implementation, so I want to look at as many possible angles before going to the keyboard.