05/31/80 New FORTRAN Differences This info segment contains a list of differences between the old and new FORTRAN compilers. Some of these differences require source level changes to maintain program functionality, and others just require recompilation. For a description of how to convert from the old FORTRAN source format to the new, or for a complete list of syntactic differences between the compilers, refer to new_fortran_conversions.gi.info. 1. The new compiler only generates a segdef for the name of the object segment. It does not generate an entry definition with that name unless the source segment contains a subroutine, function, or entry point with that name. The entry point for the main program, if it exists, is main_. 2. The default storage class is automatic instead of static. This can result in program failure if the logic of the program depends on values remaining in storage throughout the life of a run. The automatic or save statement can be used to change the default storage class to static. Note -- A simple and efficient way to circumvent this potential problem is to combine all the program units for a particular subsystem into a single source segment. Then, all variables retain their values during the run, and all calls within the subsystem will be intra-segment calls. Intra-segment calls are far more efficient than inter-segment calls. 3. The new compiler does not generate relocation information for an object segment unless the user specifies the -relocation (-rlc) control argument. The lack of relocation information is only a problem if the user wants to bind the object segment. The Multics binder prevents a user from binding an object segment that does not have relocation information. [This difference has been removed. The new compiler now generates relocation information by default. Relocation information may be supressed with the -non_relocatable (-nrlc) control argument.] 4. The implementation of alternate return statements is incompatible. The user cannot mix old and new object programs that interact via alternate returns. 5. The new compiler does not generate recursive code. Although it is possible to invoke the same program more than once, by using an external call to another segment, a user does so at his own initiative and risk. 6. If a common block name contains a dollar sign ($), a type-4 link is generated. This type of link does not allow for initial values to be provided by data statements. Common block names must be of the form a$b where both a and b are present. If a common block name does not contain a dollar sign, a *system link is generated. This type of link does allow for initial values to be provided by data statements in a block data subprogram. A *system link is generated for blank or unlabelled common, however, the language does not allow this common block to be initalized using data statements. The old compiler always generates type-6 links for common blocks. 7. The semantics of do-loops is incompatible. The new compiler copies the increment and final value before entering the loop. The old compiler does not, allowing them to change during the loop. 8. The old compiler always generates descriptors for external calls. The new compiler only generates descriptors for external calls if the user declares the external name to require descriptors. The external statement is used: external ioa_ (descriptors) The name ioa_ will have descriptors generated for all calls. This declaration also prevents the code generator from checking each argument list for consistency with previous ones. 9. Any do-loop index must be a scalar or subscripted variable. Unsubscripted array names are not allowed. The index of an implied do-loop must be a scalar variable, subscripted variables are not allowed. 10. The new compiler requires the implicit statement to be the first statement of the program unit (not including the subroutine, block data, or function statement). There can be only one implicit statement per program unit. 11. A block data subprogram cannot contain executable statements. 12. Parameters that are dimensioned must have parameter or constant extents. The old compiler allows the extents to be in static storage or in common. 13. Only parameter arrays can have parameter extents. (There are no automatic adjustable arrays as is possible with the old compiler.) 14. There is currently no include file processing. [This difference has been removed. Include file processing is provided with the %include statement.] 15. The number of subscripts specified for array elements of equivalenced data, i, must be 1 or N (where N is the actual number of dimensions specified for the array). The old compiler allows 1 <= i <= N. 16. The assignment of character data (constant or variable) to real, complex, double precision, and logical variables is not allowed. [This difference has been relaxed. Character data may be assigned to integer, real, double precision, or complex variables, but not to logical variables.] 17. [This difference has been removed. The new_fortran compiler now allows the string delimit character within the constant itself.] Character strings delimited by a ' cannot include a '. Character strings delimited by a " cannot include a ". 18. Labeled common blocks cannot be extended beyond the declared size. The old compiler allows this for labeled common as well as unlabeled common. 19. Data statements for common blocks can only appear in block data subprograms. 20. Unlabeled common cannot be initialized with data statements. 21. Free-form format is different in the two compilers. The old compiler does not require any explicit continuation character if a statement is continued onto a succeeding line, however, the new compiler does. Refer to new_fortran_conversions.gi.info for a complete description of the syntactic differences between the compilers. 22. There is no distinction made between uppercase and lowercase characters (except in literal constants) if the -card or -fold control argument is given. 23. Runtime formats must be character or integer arrays or character variables. The old compiler allows arrays of any mode. 24. Double precision octal constants (octal constants longer than 12 digits) are not allowed. [This difference has been removed. Octal constants as long as 24 digits are allowed for double precision and complex data.] 25. Double precision and complex data is always double-word aligned. The old compiler generates very inefficient code to allow this data to be on an odd word boundary. 26. [This difference has been removed.] 27. [This difference has been removed.] 28. [This difference has been removed.] 29. Newline characters in list-directed input are treated as if they were blanks. The old FORTRAN I/O gave a special meaning to the newline character. A comma followed by a newline denoted a null value in the old system. A blank line also denoted a null value in the old system. In the new FORTRAN I/O both of these are treated as white space. This change also applies to object segments created by the old compiler. 30. List directed input termination is different. The new runtime accepts either / or ; as an indication of premature end-of-input. If one of these characters is encountered in the input, the rest of the items in the input/output list are not assigned values. 31. The semantics of the endfile statement is different. Until an unspecified time in the future, the endfile statement, when compiled with the new compiler, prints a message at runtime but otherwise has no effect. 32. The order of precedence of the exponentiation operator is from left to right. The old compiler goes from right to left. [This difference has been removed.] 33. Range checking is always performed for computed go to statements. If the value of the expression is out of range, the computed go to statement is ignored and control passes to the next statement. This is also true for an alternate return from a subroutine. 34. Subscript range checking can only be enabled or disabled for subscripted array references. The old compiler also validates computed go to statements and alternate returns from subroutines. 35. The implied unit read statement uses file 0 instead of file 5. 36. The print statement uses file 0 instead of file 6. 37. The -convert control argument to the fortran command is no longer supported. (It is not deemed necessary.) 38. The control arguments -symbols and -source are no longer supported. The only listing generating control arguments are -list and -map. ----------------------------------------------------------- Historical Background This edition of the Multics software materials and documentation is provided and donated to Massachusetts Institute of Technology by Group BULL including BULL HN Information Systems Inc. as a contribution to computer science knowledge. This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology, Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell BULL Inc., Groupe BULL and BULL HN Information Systems Inc. to the development of this operating system. Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970), renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture for managing computer hardware properly and for executing programs. Many subsequent operating systems incorporated Multics principles. Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. . ----------------------------------------------------------- Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without fee is hereby granted,provided that the below copyright notice and historical background appear in all copies and that both the copyright notice and historical background and this permission notice appear in supporting documentation, and that the names of MIT, HIS, BULL or BULL HN not be used in advertising or publicity pertaining to distribution of the programs without specific prior written permission. Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc. Copyright 2006 by BULL HN Information Systems Inc. Copyright 2006 by Bull SAS All Rights Reserved