JiscMail Logo
Email discussion lists for the UK Education and Research communities

Help for COMP-FORTRAN-90 Archives


COMP-FORTRAN-90 Archives

COMP-FORTRAN-90 Archives


COMP-FORTRAN-90@JISCMAIL.AC.UK


View:

Message:

[

First

|

Previous

|

Next

|

Last

]

By Topic:

[

First

|

Previous

|

Next

|

Last

]

By Author:

[

First

|

Previous

|

Next

|

Last

]

Font:

Proportional Font

LISTSERV Archives

LISTSERV Archives

COMP-FORTRAN-90 Home

COMP-FORTRAN-90 Home

COMP-FORTRAN-90  1998

COMP-FORTRAN-90 1998

Options

Subscribe or Unsubscribe

Subscribe or Unsubscribe

Log In

Log In

Get Password

Get Password

Subject:

Re: Start the Wish List

From:

"James Giles" <[log in to unmask]>

Reply-To:

James Giles

Date:

Mon, 31 Aug 1998 12:24:14 -0600

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (127 lines)

Well, since I've already been placed into this controversy, I may as
well participate.

*Peter Shenkin; Chemistry, Columbia U.; [log in to unmask] (212)854-5143*
writes:

>!!! with READONLY:
> INTEGER FUNCTION sub( j )
> USE mod !!! mod contains INTEGER,READONLY :: i
> IMPLICIT NONE
> 
> sub = j * i
>
> END
> 
>!!! without READONLY -- "get" function needed:
> INTEGER FUNCTION sub( j )
> USE mod !!! mod contains PRIVATE i, returned by function i_get()
> IMPLICIT NONE
> 
> sub = j * i_get()
>
> END
>
>My guess is that many compilers will be faster with the first
>form.

Point 1.

I don't think we really need to worry about this too much.  By the
time the READONLY attribute could make it into the standard 
(2007?, 2010?) even the most basic and unrefined compilers
will almost certainly be written with all the off-the-shelf optimization
technologies they can get their hands on.  So, an older technique
like inlining won't be too much of a stretch.  I expect implementations
to inline MODULE functions long before then (or at least have a 
compiler option to do so).

Point 2.

I'd like to remind people of the reason I got mentioned in this
discussion.  I pointed out on the usenet group that the present
reading of the standard permitted MODULE procedures to
be inlined.  I also stated that I opposed this interpretation of
the standard.  The problem can be demonstrated with the 
following code:

   MODULE AVERAGE
      CONTAINS
         INTEGER FUNCTION AVE (I, J)
            INTEGER, INTENT(IN) :: I, J
            AVE = (I+J)/2
         END FUNCTION AVE
   END MODULE AVERAGE

vs.

   MODULE AVERAGE
      CONTAINS
         INTEGER FUNCTION AVE (I, J)
            INTEGER, INTENT(IN) :: I, J
            IF (SIGN(1,I) == SIGN(1,J)) THEN
               AVE = I + (J-I)/2
            ELSE
               AVE = (I+J)/2
            ENDIF
         END FUNCTION AVE
   END MODULE AVERAGE

All the interface information of the MODULEs is the same, only the
code itself has changed.  The present wording of the standard requires
that all program units that USE this MODULE must be recompiled if
I replace the first definition with the second.  This is fine if I want the
code inlined (or other interprocedural analyses done).  And, for a
function as simple as AVE, I might want just that.  But for procedures
more complicated in a large program (where I have no intent to inline),
the requirement to recompile all USEs might be prohibitive.

Well it's too late to change the interpretation that permits MODULE
code to be inlined.  Instead (since this is a wish-list thread) I'll add
my wish for the ability to explicitly declare that the code part of a
MODULE procedure is PRIVATE.  That is, if the last line of the
specification part of a MODULE procedure is a statement consisting
of the keyword PRIVATE, then the implementation is not permitted
to inline (or otherwise interprocedurally analyse the code) and changes
would be permitted within that code without requiring USEs of the
MODULE to be recompiled.  (There are, of course, other reasons
to desire that procedures not be inlined.  The programmer should
have explicit control over whether such optimizations are allowed.)

Note that if this method is adopted, the READONLY attribute might
again be considered more useful since it's possible that the access
functions for a PRIVATE type might have PRIVATE code.  The only
way to optimize references to the data would be with a READONLY
construct.

Point 3.

In spite of the note at the end of point 2, I don't think I would use
the READONLY feature in my own code (if it were added to the
language).  This is for two reasons.  First, I can see no reason
that I would want to prohibit inlining of the access functions to a 
PRIVATE data field.  Second, the main reason that I ever make
MODULE data PRIVATE is so that I can later change its definition
and layout without having to recode the programs that use the data.

Consider Peter Shenkin's example quoted above.  Suppose that 
the MODULE is altered so that the variable I is no longer explicitly
stored, but must be computed from other PRIVATE data in the 
MODULE.  Program units which access the data only though the
access function needn't be changed (though possibly they'd need
to be recompiled).  Program units which access the variable directly
using the READONLY capability must be rewritten.

It seems to me that if you find yourself in need of defeating encapsulation
(like C++ "friend functions") or partially defeating it (READONLY
attrribute), you should really be reconsidering what it was that you
thought encapsulation was doing for you.  Maybe the data shouldn't
have been encapsulated in the first place.

--
J. Giles



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Top of Message | Previous Page | Permalink

JiscMail Tools


RSS Feeds and Sharing


Advanced Options


Archives

December 2023
February 2023
November 2022
September 2022
February 2022
January 2022
June 2021
November 2020
September 2020
June 2020
May 2020
April 2020
December 2019
October 2019
September 2019
March 2019
February 2019
January 2019
November 2018
October 2018
September 2018
August 2018
July 2018
May 2018
April 2018
March 2018
February 2018
January 2018
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
January 2017
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
December 2015
November 2015
October 2015
September 2015
August 2015
June 2015
April 2015
March 2015
January 2015
December 2014
November 2014
October 2014
August 2014
July 2014
May 2014
April 2014
March 2014
February 2014
January 2014
December 2013
November 2013
July 2013
June 2013
May 2013
April 2013
February 2013
January 2013
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
April 2012
March 2012
February 2012
January 2012
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
December 2010
November 2010
October 2010
August 2010
July 2010
June 2010
March 2010
February 2010
January 2010
December 2009
October 2009
August 2009
July 2009
June 2009
March 2009
February 2009
January 2009
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
January 2007
2006
2005
2004
2003
2002
2001
2000
1999
1998
1997


JiscMail is a Jisc service.

View our service policies at https://www.jiscmail.ac.uk/policyandsecurity/ and Jisc's privacy policy at https://www.jisc.ac.uk/website/privacy-notice

For help and support help@jisc.ac.uk

Secured by F-Secure Anti-Virus CataList Email List Search Powered by the LISTSERV Email List Manager