To: J3 J3/22-187r1 From: Tom Clune & generics subgroup Subject: Formal syntax for generic programming features Date: 2022-October-17 Reference: 22-151r3, 22-154r5, 22-161r1, 22-162r3 1. Introduction =============== This paper contains the syntax for generic programming features. Section 2 contains examples, while section 3 provides the formal syntax. Section 4 contains straw votes for alternatives. 2. Examples =========== MODULE A REQUIREMENT R(T,F) TYPE, DEFERRED :: T FUNCTION F(x) RESULT(y) TYPE(T) :: y TYPE(T), INTENT(IN) :: x END FUNCTION END REQUIREMENT TEMPLATE B(T,F,C) REQUIRES R(T,F) ! provides interface for F TYPE, DEFERRED :: T ! redundant INTEGER, CONSTANT :: C(..) ! deferred rank TYPE(T) :: var END TEMPLATE B END MODULE A MODULE B USE MODULE A TYPE :: MY_TYPE REAL :: val END TYPE INSTANTIATE B(MY_TYPE, F, [3,4]), ONLY: my_var => var CONTAINS FUNCTION SQUARE(x) RESULT(y) TYPE(MY_TYPE) :: y TYPE(MY_TYPE), INTENT(IN) :: x y%val = x%val ** 2 END FUNCTION SUBROUTINE DO_SOMETHING() my_var%val = my_var%val + 1. END SUBROUTINE END MODULE B 3. Formal Syntax ================ 3.1 Syntax for the TEMPLATE construct -------------------------------------