编程语言之Fortran
2010-01-10 14:17:53 阿炯

Fortran可音译为福传,源自于“公式翻译”(英语:Formula Translation)的缩写,它是通用的编译型指令式编程语言,特别适用于数值计算和科学计算,其全名为FORmula TRANslation(公式转换)。它于1954年被提出来的,1956年开始正式使用,至今已有六十多年的历史。其经过多次现代化改造,至今仍是历久不衰,它始终是高性能数值计算(HPC)领域所使用的主要语言;在1957年由IBM正式推出,是世界上第一个被正式推广使用并流传至今的高级编程语言。


Fortran最初由IBM在1950年代开发,用于科学和工程应用,并随后长时间统治了科学计算编程。它已经在计算密集领域里应用了超过六个年代,比如数值天气预报、有限元分析、计算流体力学、地球物理学、计算物理学、晶体学和计算化学。它是高性能计算的流行语言,并被用于世界上最快超级计算机的基准测试和排名。它有很多版本,每个都增加扩展却在很大程度上保持与前面版本的兼容性。后续版本已经增加支持了:结构化编程和基于字符数据的处理(FORTRAN 77),阵列编程、模块化编程和泛型编程(Fortran 90),高性能Fortran (Fortran 95),面向对象编程(Fortran 2003),并发计算(Fortran 2008)和天然的并行计算能力(Coarray Fortran 2008/2018)。

Fortran的设计是很多其他语言的基础。其中最周知的是BASIC,它基于了FORTRAN II,具有一些语法清理,尤其是更好的逻辑结构,和其他在交互式环境中使工作更加容易的变更。 其发展过程中有如下的演进过程:ORTRAN II、FORTRAN III、FORTRAN IV、FORTRAN 66、FORTRAN 77、Fortran 90、Fortran 95;Fortran 2003、Fortran 2008、Fortran 2018、Fortran 2023。

其最大特征是接近数学公式的自然描述,在计算机里具有很高的执行效率。Fortran可以直接对矩阵和复数进行运算。其矩阵元素在记忆空间存储次序,采用了纵列为主(Column major)次序,Matlab也承袭这点,而C语言则采用横行为主(Row major)次序。其诞生以来被广泛地应用于数值计算领域,特别是并行计算和高性能计算领域。很多专用的大型数值运算计算机针对Fortran做了优化。Fortran积累了大量高效而可靠的源程序。Fortran 90、95、2003、2008、2018的相继推出,使其具备了现代高级编程语言的一些特征。


John Backus(约翰·巴克斯)(1924年-2007年),他于1953年12月发起FORTRAN项目,于1977年获得图灵奖。约翰·巴克斯这位老爷子年轻时是个浪子,不过后来回归正途了。他为了改善当时计算机程序开发(主要是汇编)的难点、痛点,发明了高级语言Fortran。后来他获得计算机图灵奖,并当选美国国家工程院院士。

大神冯·诺依曼对进一步开发高级语言的必要性持怀疑态度。他曾对约翰·巴克斯表示,开发Fortran是浪费时间。当然,对开发Fortran的反对,主要是基于冯·诺依曼对计算机编程效率和资源利用的担忧。他认为高级编程语言(如Fortran)会浪费计算机的性能,因为当时的计算机资源非常宝贵,而高级语言的编译过程可能会降低程序的运行效率。C语言于1972年诞生,Python于1991年诞生,Java出生于1995年,可以说后期的语言基本上都有借鉴Fortran的地方,就连最早的Matlab版本都是Fortran代码写的。

FORTRAN语言被科学家广泛接纳,用来书写数值计算密集程序,这鼓励编译器作者生产可以生成更快和更高效代码的编译器。在语言中包括复数数据类型,使得Fortran特别适合于技术应用比如电子工程。到了1960年,FORTRAN版本已经可获得于IBM 709、650、1620和7090计算机上。FORTRAN流行性的显著增长,刺激了竞争计算机制造商在它们的机器上提供FORTRAN编译器,因此到了1963年,存在了超过40个FORTRAN编译器。因此FORTRAN被认为是第一个广泛使用的跨平台编程语言。

Fortran的发展平行于编译器技术的早期演进,在理论和编译器设计上的进步,受到为Fortran程序生成高效代码的激励。 经过长期的发展,Fortran出现许多的版本,Fortran77,Fortran 90,Fortran 95,Fortran 2003、Fortran 2018、Fortran 2023等,每一个版本都经过了完善和改进。

1958年,IBM发布FORTRAN II。

1962年,发布FORTRAN IV。

1966年, FORTRAN IV 被ANSI 标准采纳,成为了众所周知的FORTRAN 66。

1977年,FORTRAN77诞生。

1992年,Fortran90诞生,这是Fortran里程碑的进步,最重要的是它支持自由格式了。

1996年,Fortran95诞生,这只是Fortran90基础上很小的修改。

2004年,Fortran 2003 诞生,它增加了面向对象编程。

Fortran 2003 之后的下一个版本是Fortran 2008,也只是很小的更新。

当前最新的标准是Fortran 2023。值得一提的是,Fortran 90 之前的版本,全部大写FORTRAN;Fortran90以后,都写成Fortran。没办法,现代语言都喜欢小写,Fortran也需要现代化改造。

编译器

Windows操作系统下:
Fortran Power Station 4.0(FPS 4.0),微软公司开发的Fortran编译器。1997年3月转让给DEC公司。
Digital Visual Fortran(DVF),Fortran Power Station的DEC公司版本,版本号为5.0.x ~ 6.0.x。
Compaq Visual Fortran(CVF),1998年1月,DEC公司被康柏公司收购,Digital Visual Fortran更名为Compaq Visual Fortran,版本号为6.5.x ~ 6.6.B。2002年5月康柏公司已并入惠普公司,但CVF并未改名,版本号升级到6.6.C。
Intel Fortran,英特尔公司开发的Fortran编译器。惠普购买了CVF技术之后不久,将Windows平台上的从CVF 6.6.C之后Fortran编译器相关权利全部转售给Intel,它需要微软Visual Studio外壳的支持才能实现Visual IDE功能。在Intel手上的版本编号从7.0开始至现在。
Absoft Fortran
Open Watcom
Silverfrost FTN95,个人用户可免费使用的Fortran 95编译器包。支持编译为Win32或.NET可执行程序,内置名为Plato的IDE,也可通过插件支持Visual Studio,调试器使用SDBG。

Linux操作系统下:
PGI Fortran,现已被Nvidia收购。
g77,GNU的Fortran 77编译器,集成在GCC中。
gfortran,GNU的最新的Fortran编译器,集成在GCC 4.x及以上版本中,目前支持全部Fortran 95、大部分Fortran 2003和Fortran 2008的功能,以替代g77。
Intel Fortran,它支持Linux操作系统。
Absoft Fortran
G95,开放源代码的Fortran 95编译器。
Sun Studio
Open64编译器

FORTRAN数值库

几个著名的Fortran软件包:
IMSL — 国际数学和统计库的数值库
MKL — Intel数学核心库
NAG — 数值算法组的数值库
BLAS — 基本线性代数子程序库
LAPACK — 线性代数软件包

TIOBE公布了2024年5月的编程语言排行榜。Fortran 在 20 多年后再次进入了 TIOBE 指数前 10 的位置。事实上,早在 4 月榜单中其就已经进入了 Top 10;5 月该语言则继续保持住了这一排名。在 TIOBE 所测量到的数据中,“Fortran programming” 在亚马逊图书平台上的点击率超过了 1000 次。而与之相较,像 Kotlin 和 Rust 一类的新潮语言,在同样的搜索条件下点击量仅为 300。对于 Fortran 的这一复活,TIOBE CEO Paul Jansen 认为,一方面原因在于 Fortran 语言自 1957 年诞生至今仍不断发展。譬如在不到半年前,发布了新的 ISO Fortran 2023 定义。主要原因则在于数值/数学计算的重要性日益增加。

“尽管这个领域有很多竞争对手,但 Fortran 有其存在的理由。Python:第一选择,但速度较慢;MATLAB:非常易于用于数学计算,但许可昂贵;C/C++:主流且快速,但它们没有原生数学计算支持;R:与 Python 非常相似,但不太流行且速度较慢;Julia:冉冉升起的新星,但尚未成熟。在这个语言丛林中,Fortran 似乎速度很快,具有本地数学计算支持,成熟且Free。Fortran 悄然、缓慢但坚定地取得了进展。这是令人惊讶但不可否认的。”

"永生诅咒":气象局与核电站为何无法摆脱这门老语言

1. 从登月到核电站:FORTRAN的"永生基因"
1969年,阿波罗11号登月舱的导航系统运行着FORTRAN IV代码;2024年,中国新一代气象超算"天河"仍在使用FORTRAN 90——这门高龄的语言为何不能真正退出?

硬核生存法则:
数值计算霸权:1行FORTRAN矩阵运算≈10行C++模板元编程;
代码惯性:NASA某空气动力学程序已连续维护53年(超500万行);
硬件绑定:核电站安全系统认证要求"禁止使用带垃圾回收的语言"。

中科院计算所研究员透露:"国产大飞机C919的气动模拟代码,核心算法直接移植自1978年的歼-8II项目"。

2. 2024年FORTRAN的五大"活死人墓"
领域典型应用案例替代尝试结果
气象/气候模拟ECMWF天气预报模型(250万行)转C++导致性能下降37%
核能安全系统华龙一号反应堆中子通量计算法规强制要求FORTRAN
航天器轨道计算嫦娥五号月地转移轨迹模拟Python包装层引入误差
计算流体力学歼-20隐身外形优化重写成本预估2.3亿人民币
地质勘探石油储层模拟软件ECLIPSE新员工培训周期延长6个月


欧洲超算中心曾耗资800万欧元尝试迁移气候模型至C++,最终报告承认:"FORTRAN的数组内存布局与现代语言存在根本性差异,重构风险远超预期"

3. 人才断层危机:70岁开发者教90后写代码
魔幻现实场景:
中国气象局"师徒制":退休专家返聘时薪1500元,专审FORTRAN77格式;
美国核管会档案显示:近5年提交的安全分析报告,40%作者年龄超60岁;
GitHub最老活跃账号:82岁MIT教授维护的FEM(有限元)代码库。

某985高校教授无奈道:"我的博士生必须学FORTRAN,不是因为喜欢,而是他们的导师的导师…当年就这么写的"。

4. 现代FORTRAN的另类改造

①僵尸代码复活术
f2py工具:将FORTRAN包成Python模块(NumPy底层就用这招)
ISO C绑定:让FORTRAN与CUDA对话,跑在NVIDIA显卡上

② 新旧杂交案例
中国新一代风云气象卫星:
核心算法:FORTRAN90(1991年标准)
并行加速:OpenMP+MPI(2020年技术)
可视化:Python+WebGL(2024年前端)

③ 最硬核招聘需求
【中科院某所】急聘:
- 要求1:精通FORTRAN77/90  
- 要求2:熟悉GPU异构计算  
- 待遇:解决北京户口,年薪80-120万  
附加条件:能忍受同事叫你"老古董"。

5. 终极悖论:消灭FORTRAN等于背叛科学?
支持保留派证据:
美国物理学会统计:TOP100物理学期刊代码附件中68%含FORTRAN。
日本富士通开发出FORTRAN专用AI补全工具(精度超通用工具30%)。

激进替换派行动:
德国Max Planck研究所启动"弑神计划":用Rust重写全部气候模型。
结果:3年烧掉2200万欧元,仅完成12%模块迁移。

技术人类学启示:
就像古埃及祭司守护象形文字,FORTRAN已成为"数值计算文明的活化石"——我们不是在维护代码,而是在延续半个世纪的科学记忆。


最新版本:2023
Fortran 2023 已于2023年11月下旬发布。这是 Fortran 语言的最新版本,它在性能、易用性和并行编程方面都有显著的改进。如果您正在编写一个需要对大型数值数组进行快速计算的程序或库,Fortran 2023 是您的最佳选择,其根据 ISO/IEC 1539-1:2023 标准发布。Fortran 它是一种高性能并行编程语言,专为科学和工程计算而设计。Fortran 2023 具有许多强大的特性,使得它成为处理大规模数值数组的快速计算的理想工具。相关特性如下:

高性能:Fortran 2023 针对科学和工程计算应用进行了优化,具有成熟且经过实战验证的编译器和库,可以编写接近底层的高效二进制代码。

静态和强类型:Fortran 是一种静态和强类型的语言,这使得编译器能够在早期捕捉到许多编程错误。这也使得编译器能够生成高效的二进制代码。

易学易用:Fortran 是一种相对简单的语言,学习和使用起来非常容易。通过将大多数数学和算术操作表达为方程式,可以轻松地处理大型数组。

多功能:Fortran 允许您以最适合问题的方式编写代码:命令式、过程式、面向数组、面向对象或函数式。

本地并行:Fortran 是一种本地并行编程语言,具有直观的类似数组的语法,用于在 CPU 之间传递数据。您可以在单个 CPU 上、共享内存多核系统上或分布式内存的 HPC 或基于云的系统上运行几乎相同的代码。Coarrays、teams、events 和集体子程序允许您表达最适合当前问题的不同并行编程模式。

有关语法变更的摘要请查看此处

官方主页:https://fortran-lang.org/