(j3.2006) Did we intend to prohibit this?
Cohen Malcolm
malcolm
Fri Mar 10 02:13:30 EST 2017
Van Snyder writes:
>On Fri, 2017-03-10 at 15:38 +0900, Cohen Malcolm wrote:
>> >Sure. So why is F(X) a function result *variable* in
>> >
>> > v = f(x)
>>
>> It is not.
>
>I thought you said it was.
No I did not, I said the exact opposite:
"The result of a function with an allocatable result variable is not itself
a
variable and therefore not allocatable. It's just a value."
>So how does it get deallocated?
"it" is not a variable, so does not get deallocated (in the Fortran language
sense of "deallocated").
You know what the function result variable is, and it is not the value that
is returned by the function, nor has it ever been. The result variable is
what gets deallocated.
Damian writes:
<<<
?When execution of the function is complete, the value of the function
result is available for use in the expression that caused the function to be
invoked.?
I imagine that the availability the of the value supports the first usage
above but not the second.
>>>
Quite so.
The design of functions with allocatable result variables was discussed in
detail during the design of the "allocatable component" feature (which also
added allocatable dummy arguments and allocatable result variables). The
end result was that the result variable is allocatable within the function
body, the value of the function was merely a value. The purpose of this was
to make it easier to write array-valued functions where you only decide what
shape array to return during execution of the function. To that end, on
return from such a function, we require the result variable to be both
allocated and given a value ("defined").
Yes, this design is very different from that of pointer functions, which
return an association rather than a value per se. We were trying for
"improved array-valued functions", not "limited pointer-valued functions".
Cheers,
--
.............Malcolm Cohen, NAG Oxford/Tokyo.
More information about the J3
mailing list