A module is a nonrunnable object (type *MODULE) that
is the output of an ILE compiler. It is the basic building block of an ILE program.
An
ILE RPG module consists of one or more procedures, and the file control
blocks and static storage used by all the procedures in the module. The procedures
that can make up an
ILE RPG module are:
- an optional cycle-main procedure which
consists of the set of H, F, D, I, C, and O specifications that begin the
source. The cycle-main procedure has its own LR semantics and logic
cycle; neither of which is affected by those of other ILE RPG modules in the
program.
- zero or more subprocedures, which are
coded on P, D, and C specifications. Subprocedures do not use the RPG cycle.
A subprocedure may have local storage that is available for use only by the
subprocedure itself. One of the subprocedures may be designated as a linear-main
procedure, if a cycle-main procedure is not coded.
The main procedure (if coded) can always be called by other modules in
the program. Subprocedures may be local to the module or exported. If they
are local, they can only be called by other procedures in the module; if they
are exported from the module, they can be called by any procedure in the program.
Module creation consists of compiling a source member, and, if that is
successful, creating a *MODULE object. The *MODULE object includes a list
of imports and exports referenced within the module. It also includes debug
data if you request this at compile time.
A module cannot be run by itself. You must bind one or more modules together
to create a program object (type *PGM) which can then be run. You can also
bind one or more modules together to create a service program object (type
*SRVPGM). You then access the procedures within the bound modules through
static procedure calls.
This ability to combine modules allows you to:
- Reuse pieces of code. This generally results in smaller programs. Smaller
programs give you better performance and easier debugging capabilities.
- Maintain shared code with little chance of introducing errors to other
parts of the overall program.
- Manage large programs more effectively. Modules allow you to divide your
old program into parts that can be managed separately. If the program needs
to be enhanced, you only need to recompile those modules which have been changed.
- Create mixed-language programs where you bind together modules written
in the best language for the task required.
For more information about the concept of modules, refer to ILE Concepts.