首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在派生类型中使用异步属性

在派生类型中使用异步属性
EN

Stack Overflow用户
提问于 2014-12-19 11:35:13
回答 2查看 623关注 0票数 2

在Fortran2003程序中,我希望创建一个派生类型,其中包含一个具有asynchronous属性的可分配数组:

代码语言:javascript
复制
module async_in_type
  type async_array
    integer, dimension(:), allocatable, asynchronous :: a
  end type async_array
end module async_in_type

当我试图用GCC编译上面的代码时,我会收到以下错误消息:

代码语言:javascript
复制
$ gfortran -c -Wall -Wextra async_in_type.F90
GNU Fortran (GCC) 4.10.0 20140718 (experimental)
async_in_type.F90:3.52:

    integer, dimension(:), allocatable, asynchronous :: a
                                                1
Error: Attribute at (1) is not allowed in a TYPE definition

对于NAG Fortran,消息类似:

代码语言:javascript
复制
$ nagfor -c async_in_type.F90 
NAG Fortran Compiler Release 6.0(Hibiya)
Product NPL6A60NA for x86-64 Linux
Error: async_in_type.F90, line 3: Syntax error
       detected at ,@ASYNCHRONOUS
[NAG Fortran Compiler pass 1 error termination, 1 error]

这种限制的原因是什么?是否有可能克服这个限制?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-19 11:58:09

编译器的信息是准确和非常清楚的,让我重复一遍:

代码语言:javascript
复制
Error: Attribute at (1) is not allowed in a TYPE definition

所以这是不被标准允许的。

必须将asynchronous属性放置到async_in_type类型的变量中。

代码语言:javascript
复制
type(async_in_type), asynchronous :: x
票数 3
EN

Stack Overflow用户

发布于 2015-03-13 17:09:36

我将通过引用(和一些推测)添加对Vladimir F's answer的支持。是的,(Fortran 2008)标准不允许使用asynchronous属性。

对于派生类型的组件,请查看4.5.4.1,其中给出了组件的允许属性(R437)。asynchronous只是没有列出(问题的dimensionallocatable是这样的)。

asynchronous属性在5.3.4中进行了描述

具有异步属性的实体是可能受异步输入/输出影响的变量。

这在一定程度上激发了限制:定义的组件本身并不是一个变量。在定义中放置属性时,您可能想说的是,这种类型的所有变量都有带有该属性的组件。

正如Vladimir F所说,属性是在派生类型对象上指定的(甚至可能是隐式的--参见9.6.2.5,因此这种显式确认可能不会太麻烦)。即使不是,说

代码语言:javascript
复制
asynchronous :: x%a ! Using Vladimir F's terminology

然后,5.3.4还指出,带有该属性的变量的基对象也应该具有该属性。我们还知道,具有该属性的对象的子对象具有属性,因此异步组件的“兄弟级”也必须是异步的。

如果我们谈到“为什么不能使用属性的一些组件,而一些没有属性的组件呢?”那么我们必须进行推测,但至少有证据表明,标准的作者在拒绝之前考虑过这种可能性。

最后,R427 (在4.5.2.1中)排除了type, asynchronous :: async_array的情况

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27565264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档