James Giles wrote:
> Alvaro Fernandez wrote:
> > But what Van Snyder said was that he had a _single version_ which he
> > wrote for all kinds and selected internally. That's at least what I
> > understood.
>
> There is a proposal for that (two, so far, although I've not officially
> submitted mine yet since it overlaps with several other proposals
> and I want to see how they fare). Mine goes something like this:
>
> Function mean(r1,r2)
> integer, inferred :: k1, k2
> real(^k1)::r1 ! k1 is implicitly set to the value of r1's KIND
> real(^k2)::r2 ! k2 in implicitly set to the value of r2's KIND
> real(kind(0.0_k1+0.0_k2)) :: mean ! mean's KIND is determined by the
> usual rule
>
> mean = (r1+r2)/2
> end function mean
>
> This function is now generic with respect to KIND. The definition of
> the named constants in that form is called "inference".
At meeting 167, after a convincing tutorial by Aleksandar Donev, J3 voted
not to remove the general topic of "Generic Programming" from the list of
candidates that J3 will advocate to WG5 are worthy of future consideration.
We managed to reduce the list from about 150 proposals to about 120. We
still need another factor of six or so reduction in order to fit the next
revision into the schedule (tentatively, frozen in 2008 and published in
2009).
Aleks and I are now advocating essentially the same thing, with different
details in the spelling: A program unit "template" that has parameters.
The user is required explicitly to instantiate the template. My proposal
is consciously modeled on Ada generic packages, in that I propose to
generalize modules. Aleks wants a new program unit spelled differently
from modules. This is a detail we can settle later. We each have our
preferences; I obviously prefer my approach, but I would be far happier to
have what Aleks proposes than to have nothing. I can't speak definitively
for Aleks, but I think his view of my proposal is similar.
Dan Nagle also proposed an "Assumed-kind" procedure, which is similar
to what James proposes, but with "*" instead of "^k1" for the kinds.
What James and Dan are proposing is a bit simpler in the special case of
kind, but (at least as far as I can tell) doesn't handle the more general
cases that Aleks and I want to handle.
Aleks and I both propose that package parameters not be limited to
integers. We propose that package parameters can be and kind of value,
types, procedures, and packages. The procedures can be either specific
or generic, and the packages can be instances or "templates."
My paper is ftp://ftp.j3-fortran.org/doc/meeting/167/04-153.ps.gz. Aleks
has two similar papers, .../04-239.txt.gz and .../04-247.txt.gz. Dan's
paper was .../04-237.txt.gz. My paper has examples of the general cases
that Aleks and I hope to address, in its section 7.
--
Van Snyder | What fraction of Americans believe
[log in to unmask] | Wrestling is real and NASA is fake?
Any alleged opinions are my own and have not been approved or disapproved
by JPL, CalTech, NASA, Sean O'Keefe, George Bush, the Pope, or anybody else.
|