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  2000

COMP-FORTRAN-90 2000

Options

Subscribe or Unsubscribe

Subscribe or Unsubscribe

Log In

Log In

Get Password

Get Password

Subject:

Preprocessing in f90

From:

Aleksandar Donev <[log in to unmask]>

Reply-To:

Aleksandar Donev <[log in to unmask]>

Date:

Sat, 29 Jul 2000 22:04:04 -0400

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (102 lines)

[log in to unmask] wrote:

> Many of you will have noticed that the source code for Sun fpp has been placed on netlib, and it has been outfitted with autoconf etc. so that it compiles and runs on several systems, including my cygwin/w2k.

Hi,
I have already checked out Sun's fpp. I also read the ISO specifications of CoCo, and I am not very happy with either.
In summary, they are both *too* simple and have very limited functionality. A preprocessor should not just let you select pieces of code to compile and maybe every now and then make a macro for x**3, that can be done well with cpp even in a Fortran context. Also, the specification of fpp by Sun doesn't at all tell you how
say recursive or nested macros are treated, which is a *very* important topic.

I like the f90ppr of M. Olagnon as a proposal because:

1. It recognizes the *important* fact that most extensions to the language come in the form of directives that appear to Fortran as comments, like !HPF. So it allows me to treat HPF code well by simple saying -C '!HPF' at the command line.

2. It indents/capitalizes Fortran code well, even in the presence of directives like !HPF

3. It can have names that are concatenations of names with ?, so one can say:

Function CubeOf?type (x) Result (cube)
    type(Kind=kind) :: x, cube
    cube=x**3.0_?kind
End function

and just set
define type Real
define kind dp
to get a nice definition for a function giving the cube of a double precision number:

Function CubeOfReal (x) Result (cube)
    Real(Kind=dp) :: x,cube
    cube=x**3.0_dp
End function

or something to that effect.

But there are several things that I don't at all enjoy about it:

1. It is written in Fortran! Who on earth said that a Fortran preprocessor needs to be written in Fortran? Aren't we focusing on language interdependance? For example, since CHARACTER datums can not be allocatable even in Fortran 90 (they are apparently treated differently from strings--arrays of datums), f90ppr has some
silly and very anoying limits on the length of files, number of commenting lines, etc. Also, in its naked form, it does not accept command line arguments. I mean, why not do this right in C++ or C?

1. It does not recognize the names of most intrinsics (just lack of time for typing all of them in, I guess)

2. Macros are expanded at one level only, with no multiline or variable argument macros! Macro/define nesting and recursion with a specified depth of recursion (or an equivalent macro looping constuct) and especially macros with variable number of arguments enable writing some very elegant code that can make a whole library
out of a few source files. For example, say I want to make two functions CubeOfReal and CubeOfInteger.
If I were allowed multiline macros and nested macros and some other nifty macro features like varargin, this would be done soo elegantly in something like:

# macro CybeOfType ( varargin (type, kind=sp)) begin
    Function CubeOf?type (x) Result (cube)
        type(Kind = kind) :: x, cube
        cube=x**3.0_?kind
    End function
#end macro

and then simply use:

CubeOfType( Real, sp) ! or just CubeOfType( Real)

to get a definition of x**3 for single precision numbers. Or maybe if one has to do this for all possible kinds/types for several different functions:

#macro FunctionOfAllKinds ( function) begin
    function?OfType (Real, sp)
    function?OfType (Real, sp)
    function?OfType (Real, sp)
....
#end macro

and then just type:

FunctionOfAllKinds ( Cube) ! Fortran 90's features can be used only partly to do something like this.

Yes, I now that this is a preprocessor that is in itself a small programming language. But nesting macros and varargin already exist in some nifty preprocessors like cpp and the literate programming tool FWEB. So, instead of 20 people writing 20 different preprocessors with the same limited simplistic functionality like fpp
or CoCo, why doesn't somebody work out a really nice proposal and write the preprocessor in standard portable C or C++?

As another removed example, when solving a PDE on a 2D and 3D grid, there are many boundaries and corners that need to be coded separately. This can be done very well with the above features in N dimensions (must be known at compile time) and for all corners/boundaries. The compiler will then be able to efficiently compile
the resulting code.

Also, I point you to C++'s inline definition for procedures. Why not let the user make his own inlined procedures using the above tools.
....

3. Is not at all extensible. Say, in HPF, subroutine declarations start with the keyword (macro) EXTRINSIC(...), and this totally freaks out fpp and other f90 tools like f90doc (for html documenting). So it should be possible to add keywords and maybe even some limited definitions of what to do these keywords when they
appear (so I can extend fpp to handle HPF commands). Other possibilities of extending the base pre-processor should also be thought about.

4. One can not indent code that has preprocessing directives in it. So, as I develop the code, I can not indent it for better visual overview since this will envoke the preprocessor and execute the # instructions. I went around this by defining my own commenting symbol for fpp, !FPP$, which goes back to positive side #1.

OK, enough of my rambling, but I am really frustrated because we have such complex and beatiful *standardized* programming languages, but no one seems to recognize the importance of such preprocessors (I should call them "code generators"; and I especially dislike the "conditional compilation" expression because it shows
that the functionality is mostly limited to #if statements),
Aleksandar

--
_____________________________________________
Aleksandar Donev
Physics Department
Michigan State University
East Lansing, MI 48824-1116
E-mail: [log in to unmask]
Work phone: (517) 432-6770
_____________________________________________




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

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