由 John Backus 在 1957 年创造的 Fortran(Formula translation)可能是至今仍在使用的最古老的编程语言。它被设计用来做复杂的数学、统计和科学计算工作。从 90 年代开始, Fortran 标准已经开始走上了 "现代化" 的道路。 通过加入一些新的特性,Fortran 在保持和增强性能优先这一准则的同时,进一步降低了软件的开发和维护难度,让使用者可以更高效地开发高强度计算(computation-intensive)软件。
FEtch 沿用了 FEPG 的光荣传统,仍然选择 Fortran 作为有限元语言的目标编译语言,并升级为自由格式的 Fortran 90。全面支持最新的 Fortran 语言特性,如动态数组、module 和派生类型等。对于目标编译语言为何设定为 Fortran 而不是 C/C++,这里简单地给出一些解释。
Fortran vs. C/C++
-
入门快,门槛低
C/C++ 语言好像是好多专业的必修课,学过的人都知道当年的编程热情是如何被劝退的。Fortran 入门极其简单,是最接近自然的数学语言的编程语言,风格和 Matlab 极为相似。对比 C++,Fortran 的语法特性少,且都集中在了数组运算上。毫不夸张地说,有编程经验的学生自学一周即可飙车,零基础的学生自学一个月也足以平安上路。众所周知,因为国内的研究生考试不能跨一级学科,物理的只能招物理的,化学的只能招化学的,所以注定了 99% 的新生都是编程菜鸟(本科学完 C/C++ 课程恐怕也忘了)。如果做计算程序的导师不幸身在物理、化学、生物这些院系,能让菜鸟们以最快速度掌握的编程语言,也就是 Matlab、Python、Fortran 这几种了。如果还要求计算速度的话,只能选 Fortran。一旦逼他们学 C 玩指针,相信转年就没学生敢来了。
-
编译和运行环境依赖少,移植性好
几十年前写的 Fortran 程序,即使是老掉牙的 F77,今天拿出来编译也不会出什么问题。就算用了某些非标准的扩展语法,只要知道对应的语法规则,改起来也没啥难度。C 和 C++ 问题就多了,光是一个头文件,在不同版本操作系统里的可能都不一样,导致程序编译不过(这虽然不是 C 自身的问题,但谁叫你往硬件操作里瞎掺和?)。Fortran 程序员习惯简洁,尽量用最少的外部库(例如 FFT,LAPACK),也有的程序员习惯把用到的个别的库函数子程序及依赖的子程序复制出来,用于在极端的编译环境下的调用。不追求计算速度的大部分 Fortran 程序甚至连外部库也不用,因此编译和运行都比较简单。C++ 程序员习惯用很多很多的外部库,为显示自己的博学,甚至无关紧要的一个函数都要从外部调用。Boost(C++ 程序库的总称)已经是最低配置,依赖的库少于 5 个都不好意思拿出来见人。很有可能一个压缩后不足 1MB 的 C++ 代码,需要十几个上百 MB 的外部库,仅逐个编译就要花很长时间。
-
代码历史积累丰富
作为最早的高级语言,现在市面上存在大量的的遗留代码。那些代码可是久经考验可以直接就拿来使用的。现在学术界主要还是在使用 Fortran。学术界的特点是以一个个实验室为最小单位,铁打的营盘流水的兵。一个学生基本上干个几年就毕业了,面对动辄上百万行的代码,自己也就干个几年,真心犯不着用其他语言重新写。再加上在学术界重要的不是你用什么语言写,而是你的算法是什么,证明这个方法能用就行了。这就导致了目前有大量的教授级的人没有任何的动力去学新的语言。你会发现,现在用 Fortran 77 发论文的还大有人在。
-
计算速度快
Fortran 与 C 其实很难说哪个更快,编译器的优化对运算速度有着重要影响。一些著名的商业计算程序源代码,不同编译器编译后的执行效率都可能会相差 10~30%。但不得不说的是,Fortran 的矩阵运算功能十分强大,固有支持复数运算,语法严格,所以更适用于严谨的科学计算。
-
支持默认属性
Fortran 可以通过 Implicit 命令来设置 "默认类型",指定哪些字母开头的变量在不提前声明的时候默认使用哪种类型。这是一把双刃剑。用不好,在实际使用中不提前声明变量属性容易造成 "人为错误" ,误用未定义的变量;用得好,默认类型则会给快速灵活地编程带来极大的便利。脚本语言如 Python、Lua 和 JavaScript,还有数学软件 Matlab 和 Mathematica 等,无一不是如此。
-
支持混合编程
实际上,Fortran、C 和 Python 等不同的编程语言完全可以混用。对于团队合作开发的程序,可以依照个人习惯使用自己擅长的语言,只要把接口和文档做好即可,并不排斥。
结论
Fortran 这个高级编程语言家族中的长子,经过了几代更迭,依然在数值计算、科学和工程技术领域占据着强大的优势地位。老归老,但不得不说,你大爷还是你大爷。
学习资料
全球最全面的 Fortran 社区,支持多国语言。这里有关于 Fortran 的一切,必须收藏!
这是目前最好的中文 Fortran 网站和论坛,内容全面,还提供丰富的视频学习教程。入门进阶皆宜。
比较详实的 Fortran 语法教程,案例丰富,很适合当作速查手册来用。推荐用作入门教程。
Github 上最全的 Fortran 代码库。
G95 是一款入门级编译器,安装包只有 5 M 大小,非常适合用于 Fortran 练习。推荐给编程小白使用。