On Oct 26, 2013, at 5:27 PM, Bernd Oppolzer wrote:

Subject changed ...

In our shop we have no static linkage at all - all modules are linked dynamically during run time by means of MVS LOAD and BASR - this is done by home grown interface modules which do the transfer of program control. This was first implemented for an ASSEMBLER only environment and then promoted to PL/1 and C - with PL/1 in the beginning, dynamic calls were not supported over more than one level, but
with our interface modules, it was always possible.

This enables us to use the same modules in online environments like IMS and in batch, no difference. The batch main programs only do the global control, normally, and for the detail work, they call the modules dynamically - which are the same as
in the online environment.

Good examples. Way back when (1970's) COBOL modules for the most part were "standalone" (except for one assembler subroutine which handled "database" calls). The subroutine was not used extensively in all cobol programs. My memory says it was dynamic (but I could be wrong) so 90++ percent of programs were statically linked. That was true that when the routine changes (very sporadically and nobody had to be consulted) I don't recall of the routine ever having an issue (I probably only would have known if it bombed) the code was well written.

Ed




Modules can be changed without changing the callers, as long as the interfaces (parameters etc.) stay the same. To minimize errors with parameter communication, we generate macros from a repository which have to be included by the callers and by the called modules - so there is no misunderstanding about the interfaces. The interfaces do some sort of version control. There is even some kind of automatic version switching, if interface versions are different (only for a limited amount of time, to support a smooth interface migration - if desired). The language of the caller and the callee can be any of the three supported
languages - doesn't matter.

Static linkage is no option for us, because the modules which are used in many contexts would be duplicated this way - and because, if a module is changed which is used in some hundred batch programs, you would have to relink them all. We never
have to do this.

BTW: NORENT option in PL/1 and C, no DLLs. The load libraries are traditional PDS datasets (no PDSE at the moment). The interface modules which do the transfer support PDSEs and the RENT option, because we had it from 2003 to 2006 - with an early version of the PL/1 Enterprise Compiler - but at the moment
we don't use it.

Regarding error handling: we have home grown error diagnostic routines (LE exits) that do a pretty good job in diagnosing and recovering errors, so it is no problem for our developers to diagnose the errors - if any - which come from possible parameter or interface differences. It is necessary to do this, because due to the large applications we have, there are some ten or twenty persons involved in every single batch application (of course, there are also some simple applications
which are coded by only one person, but that is the exceptional case).

Kind regards

Bernd




Am 26.10.2013 22:52, schrieb Ed Gould:
John.

The companies I have worked (except for one) were all COBOL.
They learned early on that when one of the COBOL subroutines abended (started with the ILC modules if memory serves me)) at 0030 in the AM someone got rolled out of bed to fix it. COBOL programmers that I have worked for are risk adverse and did not want things like this to happen. They wanted an environment that once tested it worked *FOREVER* which was likely not to happen with DYNAM. Forget load module size they wanted write once run forever. They would much rather have a S0C4 in the daytime hours to debug than at 0030 . I have worked in banking (granted 40 years years ago) and the few COBOL programs that I was exposed to were linked statically and thus was standard.

I personally have been rolled out at 0100 many times because of a S0CX in one of the cobol subroutines (I didn't write it the main program) since it was an IBM module I got called and had to hand hold the programmer to get it it running again. It was *usually* a combination of relinking a cross release of ILC programs that were were not friendly.

Statically linked programs were also at risk but usually not to badly and were not fun to track down as a result, so there are no universal rules). It was simple to just recompile and relink all the programs in question.

Assembler programmers were less likely to have issues as they were well aware of "foreign" changes and were not likes to point the finger at IBM software.

I would have to disagree (to a point) about measurements for loadlibs because at several places I had QCM and it would publish numbers at step termination time about I/O times about JOBLIB/ STEPLIB times and you could actually tell how how much time fetch took for each library. Granted QCM is no longer sold but we did use it to its full use when it was available.

Ed

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

Reply via email to