Does this mean that,
in the cases where the argument fits within the width of the parameter list, PL/X passes the actual value somehow? (which IMO means: the value goes into the parameter list). Or does it also in these cases only rely to the interface definition (and calls by reference)?

Sorry about that: when I was at the (oral) exam for my computer science grade, I only got "good" and not "very good"; my prof told me that's because I'm a technician and not a scientist; I'm always focused on the implementation too much :-) my bad ... but that doesn't change any more
after 40 years.

I would like to compare this to C, because IMO, in C, it is up to the programmer to decide if he or she wants larger parameters to be copied in the call by value case or if they should be
passed by reference for performance reasons.

BTW: you are using C for z/OS development, too, as I am told. Would you tell us if you use C with
the standard C linkage or with something like #pragma linkage (...,OS)?

Thank you, kind regards

Bernd


Am 01.04.2023 um 15:34 schrieb Peter Relson:
I was taught long ago that "call by value" meant simply that whatever the 
target routine did to a parameter was not reflected back to the caller's argument. There 
are multiple possible implementations. One is to make a copy and pass the argument by 
reference to the copy. Another is to pass the actual value (somewhere, somehow).

For what it's worth, the internal PL/X that much of z/OS is written in only supports call by value for the 
cases where the argument fits within the "width" of a parameter list entry (by convention, 4-bytes 
for an AMODE 31 call, 8-bytes for an AMODE 64 call). PL/X's "call by value" never copies 
(accompanied by passing the copy by reference). We have many places where our dynamic storage is strictly 
limited such that "copy" is often not a possibility. So what happens if you have something larger 
than fits but don't want it changed? Too bad.  Or make your own copy. The interface definition shared by the 
source and target identifies whether the parameter is to be treated as input-only or not. It is up to the 
compiler to help identify places where the target code writes into something that is input-only and passed by 
reference.



----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to