Information & explanations, latest texts & monographs on
Fortran (including recent related patents.)
FortranFortran (also FORTRAN) is a programming language originally developed in the 1950s and still in use today. The name is short for "Formula Translator/Translation". Early versions of the language were known as FORTRAN, but the capitalization has been dropped in newer revisions beginning with Fortran 90. The official language standards now refer to the language as "Fortran". Fortran is mainly used for scientific computing and numerical analysis. Although originally a procedural language, recent versions of Fortran have included some features to support object-oriented programming. The first FORTRAN compiler was developed for the IBM 704 in 1954-57 by an IBM team led by John W. Backus. This was an optimizing compiler, because the authors reasoned that no one would use the language if its performance was not comparable to assembly language. The language was widely adopted by scientists for writing numerically intensive programs, which encouraged compiler writers to produce compilers that generate faster code. The inclusion of a complex number data type in the language made Fortran especially suited to scientific computation. There are many vendors of high performance Fortran compilers today. Many advances in the theory and design of compilers were motivated by the need to generate good code for Fortran programs. Several revisions of the language have appeared, including the well-known FORTRAN IV (also known as FORTRAN 66), FORTRAN 77, and Fortran 90. The most recent formal standard for the language, published in 1997, is known as Fortran 95. IBM's versions were never as popular as those developed by others, which was especially true of FORTRAN IV -- WATFOR, the version of FORTRAN IV developed at the University of Waterloo, Canada, was universally preferred because it produced better reports of compilation errors. The software for automatically generating flow charts from FORTRAN programs was also developed outside IBM. Initially, the language relied on precise formatting of the source code and heavy use of statement numbers and goto statements. These quirks have been removed from newer versions of the language. Successive versions also introduced 'modern' programming concepts, such as source code comments and output of text, IF-THEN-ELSE (in FORTRAN 77), recursion (in Fortran 90), and parallel constructs, while still attempting to maintain Fortran's 'lean' profile and high performance. Among the most popular specialized Fortran-based languages were SAS, for generating statistical reports, and SIMSCRIPT, for simulating processes involving queuing. Vendors of high performance scientific computers (Burroughs, CDC, Cray, IBM, Texas Instruments, ...) added extensions to Fortran to make use of special hardware features such as: instruction cache, CPU pipeline, vector arrays, etc. For example, one of IBM's Fortran compilers (H Extended IUP) had a level of optimization which reordered the machine code instructions to keep several internal arithmetic units busy at the same time. Another example is CFD, a special 'version' of Fortran designed specifically for the ILLIAC IV supercomputer, running at NASA's Ames Research Center. These extensions have either disappeared over time or had elements incorporated into the main standard; the major remaining extension is OpenMP, which is a cross-platform extension for shared memory programming. One new extension, CoArray Fortran, is intended to promote parallel programming. As what was basically a first attempt at designing a high-level language, the language's syntax is regarded as arcane by many programmers who learned more modern languages. It is difficult to write a lexical analyser for, and one-character mistakes can lead to runtime errors rather than compilation errors if more recent constructs such are not used. Some of the earlier versions, particularly, lacked facilities that would be regarded as useful in modern machines, such as dynamic memory allocation. At the same time, the syntax of Fortran has been tuned to scientific and numerical work, and many of its deficiencies have been addressed in more recent versions. For example, Fortran 95 has very short commands for performing mathematical operations on matrices and arrays which not only greatly improves program readability but also provides useful information to the compiler to enable it to vectorize operations. For these reasons, Fortran is not often used outside scientific and engineering numerical analysis, but remains the language of choice for high performance numerical computing. Standards The two standards below reflect the current Fortran implementations.
PROGRAM HELLO
WRITE(*,10)
10 FORMAT('Hello, world!')
STOP
END
External links
This article is adapted from from Wikipedia All Wikipedia article text is available under the terms of the GNU Free Documentation License Numerical Recipes in Fortran by William H. Press Fortran 90/95 Explained by Michael Metcalf FORTRAN 90 Programming by T.M R. Ellis Joe Celko's SQL Puzzles and Answers by Joe Celko Fortran 90/95 for Scientists and Engineers by Stephen J. Chapman Introduction to FORTRAN 90 for Engineers and Scientists by Larry R. Nyhoff FORTRAN 77 for Engineers and Scientists with an Introduction to FORTRAN 90 (4th Edition) by Larry Nyhoff Object-Oriented Programming via Fortran 90/95 by Ed Akin Digital Visual FORTRAN Programmer's Guide by Michael Etzel Compaq Visual Fortran by Norman Lawrence Numerical Recipes in Fortran 90 by William H. Press Numerical Recipes in FORTRAN Example Book : The Art of Scientific Computing by William H. Press Fortran 95 Handbook (Scientific and Engineering Computation) by Jeanne C. Adams FORTRAN 90 for Engineers and Scientists by Larry Nyhoff Schaum's Outline of Theory and Problems of Programming With Fortran 77 (Schaum's Outline Series) by William E. Mayo Recent Fortran related patents From USPTO: 6717874: Systems and methods for reducing the effect of noise while reading data in series from memory 6717719: Coherent optical beam combination using double-coated glass mirrors/mirror pairs 6716394: DNA sequencing using multiple fluorescent labels being distinguishable by their decay times 6715148: Efficient method router that supports multiple simultaneous object versions 6715139: System and method for providing and displaying debugging information of a graphical program on a first computer during execution of the graphical program on a second computer 6714916: Crossing paths notification service 6714915: System and method for project designing and developing a procurement and accounts payable system 6714877: Method for correcting combustion effluent data when used for input-loss performance monitoring of a power plant 6713390: Barrier layer deposition using HDP-CVD 6713257: Gene discovery using microarrays 6713127: Methods for silicon oxide and oxynitride deposition using single wafer low pressure CVD 6713023: Flow cell for chemical reactions 6711672: Method and system for implementing subroutine calls and returns in binary translation sub-systems of computers 6711670: System and method for detecting data hazards within an instruction group of a compiled computer program 6711290: Character recognition 6711137: System and method for analyzing and tuning a communications network 6710965: Phase-advanced filter for robust resonance cancellation 6710878: In-line particulate detector 6709869: Devices and methods for using centripetal acceleration to drive fluid movement in a microfluidics system 6708330: Performance improvement of critical code execution 6708325: Method for compiling high level programming languages into embedded microprocessor with multiple reconfigurable logic 6708169: Apparatus and method for generating a merged symbol file for verifying symbolic data 6708077: Furnace pacing for multistrand mill 6707568: Printer driver filter and method of printing with the same 6705990: Method and apparatus for monitoring physiologic parameters of a living subject 6704873: Secure gateway interconnection in an e-commerce based environment 6704855: Method and apparatus for reducing encoding needs and ports to shared resources in a processor 6704755: Systems and methods for backing up data files 6704563: Systems and methods for prerating costs for a communication event 6703205: Apparatus and methods for correcting for variable velocity in microfluidic systems 6702351: Mobile multi-display billboard vehicle and method of advertizing 6701518: System and method for enabling efficient processing of a program that includes assertion instructions 6701513: Program-development environment for use in generating application programs 6701345: Providing a notification when a plurality of users are altering similar data in a health care solution environment 6701315: Systems, methods, and computer program products for delivering information in a preferred medium 6701223: Method and apparatus for determining optimal control settings of a pipeline 6700652: Low-cost continuous-wave-laser (CW laser) digital particle image velocimetry 6700468: Asymmetric magnets for magnetic resonance imaging 6699472: Method of treating allergic disorders 6698015: Apparatus and method for improving performance of critical code execution 6698014: System for automatically converting source code from one programming language to another 6698012: Method and system for testing behavior of procedures 6697971: System and method for detecting attempts to access data residing outside of allocated memory 6697961: Method and system for describing predicates in disjuncts in procedures for test coverage estimation 6697790: Intelligent data structure, processing apparatus, and medium using network 6697491: 5-2-5 matrix encoder and decoder system 6697088: Graphical presentation system 6692256: Interactive tutorial 6691042: Methods for generating differential profiles by combining data obtained in separate measurements |