11.2 外部语言捆绑 |
前面的章节中为HPF外部过程执行模型定义了一系列过程和考虑。HPF外部接口也用于告诉编译器一个被调子程序是何种语言惯例。这里定义了四种语言捆绑:HPF,Fortran,F77,和C。给定的实现中可以支持其它的接口或允许用户构造用户接口。放在一起,这些节定义了特殊的外部过程HPF_LOCAL和HPF_SERIAL。
语言接口的关键特征是用于显式接口的MAP_TO特征,这一特征用于向程序员提供对参数传递部分的控制。可将此机制的使用扩展到C和Fortran 77的接口中,但是对它的定义是在这个更一般的上下文中,这是因为也可将它适用于其它语言接口中。
H1101 map-to is map-to-kind-arg-spec-list
H1102 map-to-kind-arg-spec is map-to-type-spec
or layout-spec
or pass-by-spec
H1103 map-to-type-spec is MAP_TO ( char-initialization-expr )
H1104 layout-spec is LAYOUT ( char-initialization-expr )
H1105 pass-by-spec is PASS_BY ( char-initialization-expr)
约束:在一个map-to-kind-arg-spec-list中,map-to-type-spec,layout-spec和pass-by-spec至多可以出现一个。
Fortran 95标准1995年五月草稿11.2.1.1节中的哑数据对象的特性定义被扩展成包括哑数据对象的数据映射(对准和分配)以及它的映射到(map-to)特性。
在map-to-type-spec中,char-initialization-expr的值是为了描述命名实参的数据类型是怎样映射到外部过程中哑参的数据类型的。11.4.2.1节给出了一个例子。
在ayout-spec中,char-initialization-expr的值是为了描述命名实参的数据分布是怎样映射到外部过程中哑参的数据分布的。11.6.3节给出了一个例子。如果没有为哑数组参数指定layout-spec,则数据分布将与它传送给同样模型HPF过程的相同,除非为给定的外部类型定义了其它缺省的分布。
在pass-by-spec中,char-initialization-expr的值是为了描述一种机制,该机制用于在外部过程中将命名实参与哑参关联在一起。11.6.3和11.4.2.1节给出了例子。如果没有指定pass-by-spec,则基于外部语言处理器的编译器知识,这种关联机制依赖于实现。
对于一个给定的语言接口,将指定使用map-to机制的map-to-type-spec,layout-spec和pass-by-spec的允许值的集合。如果类型的允许值范围和映射到的类型不同且实参的值或实参的一些子对象不在映射到类型的允许范围之内,则相关联的哑参或子对象变成未定义的。反之,如果哑参的值或者哑参的一些子对象不在相关哑参的允许值范围之内,且相关联的实参是一个变量,则相关联实参的值或实参的子对象变成未定义的。
如果在精度,描述方法,允许值的范围或(哑参类型和允许映射到的哑参类型之间的)存储顺序之间存在不匹配,则编译器将保证在外部过程引用期间,对于允许的map-to-type的一个对象,哑参的描述方式与被调过程的期望相兼容。当从过程返回时,编译器将保证一个变量实参的值被重新存储到指定的类型和类中。
对用户的建议:创建这一规则是为了保证互操作性的可扩展性。但是,应该注意,对于大的对象,如果在用于数据类型的描述方法和用于允许映射到类型的描述方法之间存在不匹配,则可能会发生很大的开销。(对用户的建议结束)
Copyright: NPACT |