Cobol Unterprogramme
- Dieses Thema hat 3 Antworten und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 19 Jahre vonGast.
- AuthorPosts
- 3. Juni 2004 um 12:12 Uhr #2394
Hallo zusammen,
hab mal eine ’non db2′ Frage und hoffe sie hier richtig zu platzieren:
Betreff: Cobol Unterprogramme
speziell: Call (statisch/dynamisch)
Frage:befindet sich die Working-Storage eines dynamisch gelinkten Unterprogrammes beim n-ten Call in dem selben Zustand wie beim GOBACK des n-ten Call -1.
Ich meine nein weil Unterprogramm nicht zwangsläufig im Arbeitsspeicher gehalten wird. Ich meine, die WSS hat beim 1-ten Call Initialzustand und bei folgenden Call’s undefinierten Zustand da ein Reload nicht unbedingt an die selbe Speicheradresse erfolgt.
Die Meinungen bei uns im Hause sind hierzu unterschiedlich, jedoch stets unsicher.
Wer hat hierzu eine sichere Aussage für mich.
Gruß
Rolf3. Juni 2004 um 16:29 Uhr #2877Hallo,
Auszug aus "ANS COBOL" Band 1 von Rolf und Karin Geißler aus dem HANSER-Verlag (Seite 271):
Dieses gerufene Programm hat bei seinem ersten Aufruf einen bestimmten Anfangs-Zustand. Später, bei allen weiteren Verzweigungen, ist es meistens verändert, doch kann man dieses dort gemachten Veränderungen weiter benutzen. Möchte man jedoch das Unterprogramm wieder in seiner Ursprungs-Fassung verwenden, dann muss man es zuvor "annullieren". Dazu verwendet man die Anweisung:
CANCEL <unterprogramm> bzw. <literal-1>
Soweit der Auszug. "meistens" — vielleicht war sich der Autor auch nicht ganz sicher! :-/
Gruß
Bunbury4. Juni 2004 um 17:01 Uhr #3234Hallo Rolf,
zumindestens bei den gängigen IBM-Compilern (siehe Auszug COBOL for Z/OS Programming Guide 3.1) kann man/frau sich darauf verlassen, dass auch dynamisch aufgerufene Unterprogramme ein "funktionierendes Gedächtnis" haben. Meines Wissens gilt diese Aussage aber für COBOL schlechthin, denn ansonsten wären COBOL-Sprachkonstrukte wie INITIAL oder LOCAL STORAGE SECTION unnötig.
When a dynamic CALL statement calls a subprogram that is not resident in storage,
the subprogram is loaded from secondary storage into the region or partition
containing the main program and a branch to the subprogram is performed. …The first dynamic call to a subprogram within a run unit obtains a fresh copy of
the subprogram. Subsequent calls to the same subprogram (by either the original
caller or any other subprogram within the same run unit) result in a branch to the
same copy of the subprogram in its last-used state, provided the subprogram does
not possess the INITIAL attribute. …If you call the same COBOL program under different run units, a separate copy of
working storage is allocated for each run unit.Vorsicht ist allerdings geboten, wenn in dem gleichen Programm ein Unterprogramm sowohl dynamisch als auch statisch aufgerufen wird:
When a dynamic CALL statement and a static CALL statement to the same
subprogram are issued within one program, a second copy of the subprogram is
loaded into storage. Because this arrangement does not guarantee that the
subprogram will be left in its last-used state, results can be unpredictable.MfG
Hansi8. Juni 2004 um 12:30 Uhr #3467Hallo Bunbury, hallo Hansi,
herzlichen Dank für eure Statements.
@Bunbury:
unsere Unsicherheit teilt Geißler mit seiner Aussage ‚meistens‘. Das ist natürlich in einem Lehrbuch -und vor allem in der Programmierung- nicht akzeptabel.@ Hansi:
Dem ist nichts hinzuzufügen (hab verloren und gewonnen, wei’s geht!):Subsequent calls to the same subprogram (by either the original caller or any other subprogram within the same run unit) result in a branch to the same copy of the subprogram in its last-used state, provided the subprogram does not possess the INITIAL attribute.
Gruß
Rolf - AuthorPosts
You must be logged in to reply to this topic.