In August 1982 we observed great inconvenience in the simple cycle of changing source code and testing that code. We call this activity the development cycle. We will gather ideas here for a solution of this problem. We use "user" here to refer to the application developer.
My ideas are predicated on the idea that all but trivial objects are constructed by user supplied programs. Where an OS programmer would write a half page of JCL we anticipate a half page of PL/I.
The Binder Project
I had to copy the PL/I program libraries from another computer. AUXFILE did this for me.
I wrote a program to read each of the members of this library and caused the binder to ingest them. I wrote a program to concatenate the block-lists into one and perform other operations on the binder.
The end product of this effort should support the incorporation of revisions to IBM's library without great pain.
We will concentrate first on the sub problem of development of the code that runs in one domain. We assume at least that such code is a collection of assembler and compiler code. I will concentrate on PL/I because I know it better but will try to avoid placing other languages at unnecessary disadvantage.
A sub-sub goal is to be able to write and test a program designed to instruct a domain.
Until recently Gnosis design has focused mainly on the production environment. We also need an environment in which to develop and support production programs.
I first define the term "source":
Augment files are an exciting candidate for application sources.
Interpreting the source (compiling, assembling the programs and carrying out any other special instructions),
Monitoring and analyzing the execution of the application.
The form of the source must be:
Understood by editors that support browsing and changing the source in a manner satisfying the ergonomic and intellectual human requirements,
Copyable and archivable (not all things in Gnosis are),
Subject to some sort of version and update control.
Understood by compilers or interpreters.
We also need a means of breaking the following recursion:
To record the state of the set of smart producers that belong to the source of an application, it suffices to note the .function and .space of each. In most applications the .space of each producer would be the same. The .functions would each be a start key to a GC or perhaps a requestor's key to another Smart producer.
Perhaps a conversational program is needed that has the only plumbing tools and is able and willing to tell you all there is to know about who is connected to what. I think that the plumbing tools consist of only the builder's keys to each of the smart producers.
If the copying is virtual the optimizations can occur.
If the application software is highly parameterized we may be faced with a situation where two different instances of the application (with different parameter values) share the sources except for a few "macros" that hold the parameters.
The smart producers are themselves very small and need not be {and cannot be} shared. The .functions that they depend on are in fact typically references to CG's that may be shared.
Recall that when one of these .functions run the have access to components that are local to the application instance and which have already been parameterized correctly.
Perhaps we can run the application build programs in an environment where observe and record what depends on what. In this way we know what must be rerun when something has changed.
Imagine a virtual directory from which application build programs could fetch keys. In fact there is a watcher program between the application build program and the directory. This program learns what depends on what.
As a concrete example imagine an assembler fetching a macro definition from a library. Our demon would know that a change to that macro definition would require reexecution of the assembly.