[J3] [EXTERNAL] Re: Self-assignment of allocatable component

Malcolm Cohen malcolm at nag-j.co.jp
Fri Jul 30 01:09:59 UTC 2021


Actually, by that measure, the single most expensive statement is the END statement.

 

Every single example program has at least one of those, and often many more!

 

Cheers,

-- 

..............Malcolm Cohen, NAG Oxford/Tokyo.

 

From: J3 <j3-bounces at mailman.j3-fortran.org> On Behalf Of Clune, Thomas L. (GSFC-6101) via J3
Sent: Thursday, July 29, 2021 9:27 PM
To: General J3 interest list <j3 at mailman.j3-fortran.org>
Cc: Clune, Thomas L. (GSFC-6101) <thomas.l.clune at nasa.gov>
Subject: Re: [J3] [EXTERNAL] Re: Self-assignment of allocatable component

 

Ah,  but by the same measure, are Fortran’s pointers “less expensive” than C pointers?     Maybe allowing for a normalization factor based on the relative size of the 2 communities.

 

From: J3 <j3-bounces at mailman.j3-fortran.org <mailto:j3-bounces at mailman.j3-fortran.org> > on behalf of j3 <j3 at mailman.j3-fortran.org <mailto:j3 at mailman.j3-fortran.org> >
Reply-To: j3 <j3 at mailman.j3-fortran.org <mailto:j3 at mailman.j3-fortran.org> >
Date: Wednesday, July 28, 2021 at 11:44 PM
To: j3 <j3 at mailman.j3-fortran.org <mailto:j3 at mailman.j3-fortran.org> >
Cc: Damian Rouson <damian at sourceryinstitute.org <mailto:damian at sourceryinstitute.org> >
Subject: [EXTERNAL] Re: [J3] Self-assignment of allocatable component

 

As one measure of the cost and complexity associated with a feature, someday I would love to see a count or a percentage of the of the emails on this list in response to a question roughly equal to “Is this code standard-conforming?” for code that involves a pointer.  By the suggested measure, I nominate pointers for the single most expensive feature in the history of Fortran. 

 

Damian

 

Sent from my iPhone






On Jul 28, 2021, at 06:55, Vipul Parekh via J3 <j3 at mailman.j3-fortran.org <mailto:j3 at mailman.j3-fortran.org> > wrote:

 

On Wed, Jul 28, 2021 at 9:01 AM Daniel C Chen via J3 <j3 at mailman.j3-fortran.org <mailto:j3 at mailman.j3-fortran.org> > wrote:

Thanks Malcolm and all for the clarification.
..

From: "Malcolm Cohen via J3" <j3 at mailman.j3-fortran.org <mailto:j3 at mailman.j3-fortran.org> >
To: "'General J3 interest list'" <j3 at mailman.j3-fortran.org <mailto:j3 at mailman.j3-fortran.org> >..

Hi Daniel,
 
Yes, you are quite right, so in that case, X=X would involve at least

1.       Capturing the value of X%I,

2.       Finalising X%I,

3.       Restoring the value of X%I. ..

 

 Hi Daniel and Malcolm,

 

Interesting discussion.  If I understood the clarification thus far correctly, the following program seems to me to conform - would you agree?

 

 module m

   type :: t
      character(len=10) :: objname = ""
      integer :: dat = 0
   contains
      final :: finalize_t 
   end type
   type, extends(t) :: u
   end type 
contains
   impure elemental subroutine finalize_t( this )
      type(t), intent(inout) :: this
      print *, "t::finalize_t invoked for ", this%objname
   end subroutine    
end module
module n
   use m 
   type :: v
      class(t), allocatable :: i
   end type
contains
   subroutine sub()
      type(v) :: x, y
      allocate( t :: x%i ) ; x%i%objname = "x%i" ; x%i%dat = 42
      allocate( u :: y%i ) ; y%i%objname = "y%i"
      if ( allocated(y%i) ) then
         print *, "Initially, y%i%dat = ", y%i%dat, "; expected is 0"
      end if
      y = x ; y%i%objname = "y%i"
      if ( allocated(y%i) ) then
         print *, "y%i%dat = ", y%i%dat, "; expected is 42"
      end if
   end subroutine 
end module 
   use n
   call sub()
end

 

And the program output per the standard might be as follows - note the order of the last 2 lines in the output can be ignored:

 Initially, y%i%dat =            0 ; expected is 0
 t::finalize_t invoked for y%i
 y%i%dat =           42 ; expected is 42
 t::finalize_t invoked for y%i
 t::finalize_t invoked for x%i

 

However only one out of several processors I tried gave the above output.  There is variance among the rest when it comes to output from the (impure) finalizer.  Is the expected output I list above conformant, or is that the other processors are yet to conform to the standard when it comes to finalization?

 

Daniel, is it possible for you to check the IBM processor with this example and provide your feedback and comments?

 

Thanks,

Vipul

 

Disclaimer

The Numerical Algorithms Group Ltd is a company registered in England and Wales with company number 1249803. The registered office is: 30 St. Giles, Oxford, OX1 3LE, United Kingdom. Please see our Privacy Notice <https://www.nag.co.uk/content/privacy-notice>  for information on how we process personal data and for details of how to stop or limit communications from us.

This e-mail has been scanned for all viruses and malware, and may have been automatically archived by Mimecast Ltd, an innovator in Software as a Service (SaaS) for business.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.j3-fortran.org/pipermail/j3/attachments/20210730/e2a2f80c/attachment-0001.htm>


More information about the J3 mailing list