[log in to unmask] wrote:
> > It would be interesting to know what it is about Ada Generic Programming
> > that is is not done well.
James Giles replied:
> Copying the Ada model in Fortran ignores the number of generic
> mechanisms already in Fortran rather than integrating with them.
Au contraire! The reason for wanting parameterized modules in Fortran --
the equivalent of Ada generic packages -- is that there's a hole big
enough to drive a truck through in the integration of type-bound
procedures and parameterized derived types (exactly as Richard Maine
predicted, about four years ago): One can declare objects of a
parameterized type, giving kind type parameter values such that the data
component declarations make perfectly good sense, but the spectrum of
type-bound procedures is insufficient to cover the specified kind type
parameter values. By encapsulating a type and its type-bound procedures
in a parameterized module, and using module parameters instead of type
parameters consistently within the type and its related procedures, one
can guarantee that the type and its type-bound procedures are
consistently parameterized. Had we required to define type-bound
procedures within the type, instead of defining them elsewhere and then
binding them to the type, this wouldn't have been a problem. So copying
the Ada model in Fortran **DOES NOT** ignore the number of generic
mechanisms already in Fortran, it **INTEGRATES** them. Had Fortran had
parameterized modules earlier, parameterized derived types wouldn't have
been necessary, but we are where we are.
> For example, Fortran already has CLASS(*) generics (not tied to
> the hierarchy either, as far as I can tell). Like it or not,
> that's the appropriate place to start integrating more features
> to support generic programming.
CLASS(*) objects aren't generic, they're unlimited polymorphic. There's
a difference. The type of a CLASS(*) entity is variable at run time.
The precise procedure to be invoked is decided at run time. The existing
Fortran generic procedure mechanism resolves to a specific procedure at
compile time. Like it or not, run-time resolution can introduce a
substantial performance penalty. Compile-time resolution almost
certainly does not. CLASS(*) is NOT the place to start integrating more
features to support generic programming in Fortran.
> .... A way to require that two CLASS(*)
> arguments must actually be the same type would be another.
It's called SAME_TYPE_AS. See subclause 13.7.101. If you want to do it
in declarations, one needs an exception handler to make the facility
sufficiently robust to be useable in real code. After the previous
failed attempts to integrate blockwise exception handling into Fortran
without causing inevitable performance penalties, even when it's not
used, they're not even on the list for consideration in the next
revision. Trying to introduce anything that depends on exception
handlers is a nonstarter.
> .... Also, as I recall, Ada is not really what I would call generic. It
> provides a way to specify lots of different procedures with a
> common code body, not a single procedure (by name or operator) with
> several different type signatures.
Both can be done in Ada. The Ada 95 standard is online. A printed
version is available without charge from AJPO. There are excellent
textbooks by J.G.P. Barnes and Norman H. Cohen.
> The Ada copying feature can be accomplished with a
> rather minimal macro capability (which would have added advantages
> in that macros would be useful for more than just parametrized code).
Is it impossible to
> create multiple redundant instances of
> a procedure with the same type signature simply because instance
> names happened to be different
using a macro facility?
I don't see how a macro facility prevents any of the problems Giles
laments for the Ada generic package facility. Macro facilities are
notorious for silently introducing unexpected mistakes, not checking
syntax or semantics, and being so cryptic as not to be understood by
anybody but the author (m4 comes immediately to mind).
--
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.
|