| The basic problem in designing a
fourth generation language is in the trade off between creating a system which produces
programs quickly and simply but which then provides a resource efficient execution
environment. Systems which rely on code-generation tend to produce
reasonably efficient run-time performance but at the cost of an inflexible development
environment. In the worst cases the whole application has to be recompiled in batch to
implement even the smallest change.
Systems which are interpreted usually provide a fast response to
development changes but at the cost of huge overheads in execution.
PRO-IV takes an intermediate approach which results in the best of both
worlds - a flexible and responsive development environment coupled with good run-time
performance with minimal system overheads. PRO-IV uses a combination of semi-compilation
and interpretation to produce a "table driven" system.
The PRO-IV run-time system (known as the kernel) is a memory resident
library of re-entrant code containing approximately 150 routines. These are written in
"C" or Assembler. The total size of the kernel is between 250 and 450 Kbytes
depending on the implementation and is shared between all users. These routines are
activated by parameters set in PRO-IV object code (known as a linkage-table). This
indicates the sequence in which the modules are called and the parameters which are to be
passed. The individual modules handle specific operations such as opening a file,
displaying information to the screen, controlling a scrolling area and so on. The result
is that a minimal amount of time is spent in interpreting and a maximum amount of time
executing optimised low level code. The linkage tables themselves can be created very
quickly in the development environment, and separate tables are created for every program
("function" in PRO-IV terminology) thus allowing a very flexible development
environment. PRO-IV does not have to generate and compile any intermediate code.
The actual linkage table is transparent to the developer. The linking
requirements are established as the data definition and function screens are completed by
the developer. The completed linkage table will execute the kernel modules required in
accordance with the design of the application.
An additional advantage of the two stage system is that individual
routines can be distributed a "run-only" format, where they can be executed
without the source code being available. This means that PRO-IV can be used to create
software packages for distribution to third parties or to ensure that changes are only
made on a development system and that no "quick fixes" are applied directly to a
live system !
Systems can be directly transported from one machine architecture to
another, since the machine specific coding is contained in the kernel rather than in the
linkage tables themselves.
The success of this approach can be seen from an exercise carried out
during a user evaluation where an on-line application was developed under CICS in PRO-IV
and COBOL. Taking the project from analysis to implementation PRO-IV produced productivity
gains of 5.3 to 1 over COBOL and produced an equivalent or faster response time in
executing tested transactions ! |