\documentclass[nocolor,memo]{j3}
\renewcommand{\hdate}{13 March 2004}
\renewcommand{\vers}{J3/04-273}
\usepackage{lineno}
\usepackage{longtable}
\usepackage{xr}
\externaldocument{007}
\input pdftest
\begin{document}
\vspace{-10pt}
\begin{tabbing}
Subject: \hspace*{0.25in}\=Resolve generic without invoking a procedure
or evaluating arguments\\
From: \>Van Snyder\\
\end{tabbing}
\pagewiselinenumbers
\leftlinenumbers
\linenumbers*
\section*{Number}
TBD
\section*{Title}
Resolve generic without invoking a procedure or evaluating arguments
\section*{Submitted By}
J3
\section*{Status}
For consideration.
\section*{Basic Functionality}
Given examplars of actual arguments, resolve a generic name to a specific
procedure without invoking the procedure or evaluating its arguments.
\section*{Rationale}
With care and diligence, one can develop a program so that related sets
of variables, constants and function results are parameterized by a
single kind type parameter. In order to change the kind of that set of
entities, one need only change one named constant's definition ---
almost: Generic procedures cannot be actual arguments or proceure
pointer targets. Thus, if one needs to change the program, in addition
to changing the single named constant definition, one needs to find all
places where a specific procedure that operates on the entities in
question is an actual argument or procedure pointer target, and manually
edit those appearances.
It would be helpful to have a facility to resolve a generic name to a
specific procedure without evaluating any arguments or invoking a
procedure.
\section*{Estimated Impact}
Minor. Processors already know how to do generic resolution.
\section*{Detailed Specification}
Given examplars of actual arguments, resolve a generic name to a specific
procedure without invoking the procedure or evaluating its arguments.
There are at least two ways to do this. One is to provide a syntax that
is suggestive of procedure reference, but does resolution instead. One
possibility for this is to enclose an actual argument list in square
brackets or curly brackets instead of round brackets.
Another is to provide an entity that looks like an intrinsic function but
that has the important distinction that its arguments aren't evaluated.
Indeed, this entity that has the appearance of a function reference isn't
even invoked during program execution. It is entirely resolved to a
procedure by the processor during translation.
No matter what syntax is used, it should be allowed to use the result
either as an actual argument or a procedure pointer target.
It is conceivable that a provision could be made to resolve a generic
name from the context of its appearance. This could work if it is an
actual argument associated with a dummy procedure provided that both the
referenced procedure and the dummy procedure have explicit interface, or
if it is a target in a procedure pointer assignment and the pointer has
explicit interface. This would still require some means to cause
resolution in the implicit interface cases, so it may not be worth
contemplating.
\section*{History}
\label{lastpage}
\end{document}