FORTRAN Evaluation Some good features (especially of FORTRAN90) 1. Improved Readability a. Free-form statements b. Introduction of attributes as part of type specification parameter dimension target pointer intent c. Recursive subprograms d. added control statements and derived data types Exit Case e. Relatively simple syntax 2. Improved Writeability a. Enhanced orthogonality Array-valued functions Array assignments No separate type specification for Dummy Arguments b. Enhanced expressivity Array operations and Array intrinsic functions Assumed-Shape and Allocatable arrays for dynamic allocation Array Constructors Introduction of attributes Internal subprograms c. Easy file accessing d. Recursion and Derived data types e. Compile-time initialization of local variables (for retaining their values for subsequent subprogram calls) f. Separate pointer assignment operator (good and bad) 3. Improved Reliability a. Disallowing Implicit types b. Distinct block terminator and exact pairing End if End Do End Function End Subprogram c. Error status checking argument in many intrinsic functions Allocate (,STAT=Err) Read (, , IOSTAT=ios) Write (, , IOSTAT=ios) d. Function names need to be assigned a value before returning (Good and Bad) e. Case-insensitive) f. Redundancy COMMON Statements EQUIVALENCE (Within one program unit alone) Array Conformability in terms of shape only 4. Some bad features a. Feature Multiplicity integer A(10) or Integer A Dimension A(10) or Integer, dimension(10) :: A real*8 RR double precision RR b. Confusing syntax Difference between Computed GOTO and Assigned GOTO GOTO (10,20,30), K ! Computed GOTO ! K must be 1 or 2 or 3 ! Else unpredictable at best. GOTO K, (10,20,30) ! Assigned GOTO c. Lack of Dereferencing operator (Good or Bad) d. Inadequate run-time error checking although it can be overriden by use of compile-qualifiers: NoBounds NoOverflow e. Inconsistent use of function name within the function body. in assignment and in recursive calls (when it is recursive) f. Lack of statement terminator necessitating a continuation specifier (&)