I would be cautious about making all modules internal, just as I would be
cautious about making all modules external:
- If they need to be internal because you need access to a variable pool
or for performance, do so. If a module is only called once, or only under
certain conditions, making it internal is unnecessary with little benefit.
- If you don't need to make a module external , don't. It's a
maintenance headache.
I've seen people go to both extremes. They were sorry!
Compiling is generally a good idea from a performance point of view. Under
CMS and TSO, you get the added benefit of seeing all your errors at once,
identifying uninitialized variables, etc., etc. But it's an extra step.
For real fun under TSO, compile using an ISPF edit macro, and merge any
error messages into the edit session at =NOTE= lines just before the line
in error. It's a real productivity boost.
If you want performance benefits while keeping the module external, you
have these options:
- Under CMS EXECLOAD. Compile first, if you can.
- Under TSO, write your own EXECLOAD: If not already allocated,
allocate a dd (e.g. EXECLOAD) to VIO PDS /* else continue */. Compile the
EXEC and place the CEXEC into this DD. See LMCOPY. It will scream and, if
done right, will confuse your capacity planners. :-)
- Under Windows, use SysREXXMacroLoad() /*I think?*/
- Under Linux, I'm not sure.
I would say the advice about literals produces minimal improvement at the
expense of clarity and maintainability.
Note that for PDSEs, the coded BLKSIZE is only the buffer size. The
physical block is always 4096. Strange, but true. There is no need to go
for track optimal blocking. The highest allowed multiple of 4096 will give
you the best I/O performance, possibly at the expense of a larger working
set.
--
OREXXMan