祝 Fortran 60 岁生日快乐

Fortran 在 Google 上的趋势可能正在下降,但其在科学应用中的基础作用确保它不会很快退休。
624 位读者喜欢这篇文章。
Happy birthday

图片来源: Oscar Cortez。由 Opensource.com 修改。CC BY-SA 2.0。

Fortran 编译器于 1957 年 4 月推出,是第一个优化编译器,它为多年来的许多技术计算应用铺平了道路。Cobol 为商业计算所做的事情,Fortran 为科学计算也做了同样的事情。

Fortran 可能正在接近退休年龄,但这并不意味着它即将停止工作。今年是第一个 Fortran(当时的风格是“FORTRAN”,代表“FORmula TRANslation”,即“公式翻译”)发布 60 周年。

即使你一行代码都不会写,你也每天都在使用 Fortran:例如,业务天气预报模型仍然主要用 Fortran 编写。它对数学性能的关注使 Fortran 成为许多高性能计算应用中的常用语言,包括计算流体动力学和计算化学。虽然 Fortran 可能没有像更新的语言那样受欢迎,但这些语言在很大程度上要归功于 Fortran 开发团队的开创性工作。

虽然 Fortran 可能没有像更新的语言那样受欢迎,但这些语言在很大程度上要归功于 Fortran 开发团队的开创性工作。
在电影“隐藏人物”中,其中一个角色自学了 Fortran,因为她看到人工计算机(包括她自己)将被电子计算机取代。尽管 60 年代早期的许多事物已成为历史,但 Fortran 仍然存在。两年前,当最后一位原始程序员准备退休时,NASA 开始积极寻找 Fortran 程序员来从事“旅行者”任务。Fortran 在天气和气候建模、地球物理学以及许多其他科学应用中的使用意味着 Fortran 知识在未来几年仍将是一项有价值的技能。

尽管如此,Fortran 在搜索趋势中呈下降趋势,并且一些大学不再教授它(我错过了在大学学习 Fortran 课程的机会,只差一个学期)。一位大气科学家在 2000 年代后期准备申请研究生院时,决定她应该学习一门编程语言。当她打电话给当地的学校和大学询问是否开设 Fortran 课程时,得到的回答是一阵笑声。因此,她通过研究现有代码和进行大量 Google 搜索自学了 Fortran。今天,她维护旧的 Fortran 代码,并每天编写新代码。

Fortran as Google search term 2004 to 2017

“Fortran”作为 Google 搜索词从 2004 年到 2017 年的趋势。

随着 Fortran 的受欢迎程度下降,这样的故事变得越来越普遍。Fortran 的长寿提供了丰富的学习材料以及代际联系。在我的第一份系统管理工作中,一项常见的任务是帮助研究生编译他们从导师那里继承的 Fortran 代码(他们的导师又是从他们的导师那里继承来的,以此类推......)。

我的一位同事,他恰好在 1954 年(IBM 数学公式翻译系统规范草案的第一年)开始存在,写了一篇文章分享了他使用 Fortran 渲染达芬奇的“蒙娜丽莎”的经历。另一位朋友告诉我,他作为本科生时最喜欢的程序之一是用 Fortran 编写的程序,该程序创建了一个日历,其中包含“花生漫画”人物的 ASCII 艺术渲染图。

Calendar page generated by Fortran

由 Fortran 程序生成的 2017 年 11 月日历页

是什么让 Fortran 如此持久?当然,建立最初的立足点有所帮助。当一种语言用于关键业务应用程序时,这赋予了它很大的持久力,因为完全重写代码既昂贵又冒险。

当一种语言用于关键业务应用程序时,这赋予了它很大的持久力,因为完全重写代码既昂贵又冒险。
但除此之外还有更多原因。顾名思义,Fortran 旨在将数学公式转换为计算机代码。这解释了它在处理大量数学公式(特别是偏微分方程等)的领域中的强大存在。

与任何经历了岁月考验的技术一样,Fortran 也在不断发展。语言的变化利用了新的范例,而没有进行快速更改。自 Fortran 的第一个行业标准版本(FORTRAN 66,于 1966 年批准)以来,只出现了几个主要版本:FORTRAN 77(于 1978 年批准)、Fortran 90(于 1991 年(ISO)和 1992 年(ANSI)发布)及其更新版本 Fortran 95,以及 Fortran 2003(于 2004 年发布)及其更新版本 Fortran 2008。名为 Fortran 2015 的新修订版预计将于 2018 年年中发布。

显然,Fortran 没有近期退休的计划。正在进行积极的项目,以使 在 GPU 上运行 Fortran 变得更容易。Fortran 会庆祝其百年诞辰吗?没人知道。但我们确实知道,“旅行者 1 号”和“旅行者 2 号”宇宙飞船将携带 Fortran 代码飞出太阳系之外。

User profile image.
Ben Cotton 是一名受过训练的气象学家,但天气是一个很棒的爱好。Ben 在 Red Hat 担任 Fedora 项目经理。他是《开源项目项目管理》一书的作者。在 Twitter 上 (@FunnelFiasco) 或 FunnelFiasco.com 上找到他。

30 条评论

我认为可能有人会研究编程语言的谱系。例如,我认为 BASIC 是 FORTRAN 的扩展,它增加了轻松处理和操作文本的能力。不知何故,从 BASIC 过渡到 Perl 似乎很容易理解。当然,还有 A、B、C、C++ 和 D...

早在学习数据结构课程之前,我就在 IBM/360 上使用 FORTRAN,使用 CP/CMS 类型的操作系统。它涉及 Berkeley SPICE(芯片设计人员的关键模拟器)在分时系统上运行的扩展。使用 FORTRAN 接口与 BAL360 进行动态内存管理,并调用用 BAL360 重写的性能关键子例程。我仍然感到震惊的是,任何数据都可以通过 EQUIVALENCing RE*8、RE*4、INT*4 等以任何形式访问。而当时的 FORTRAN 还只是一个青少年。

我们仍然站在巨人的肩膀上。生日快乐!

在 1970 年代初期,我为南非自由邦的一家作物保险公司工作。他们正在南非伯利恒运行一个人工增雨项目。我从一台 Varian 计算机上获得了 Fortran 代码,并将其移植到 NCR Century 100 计算机上运行。这用于预测冰雹形成模式。我为了这个项目自学了 Fortran。

非常好的文章,我以为 Fortran 不再积极开发了!

Maxima 计算机代数程序仍然具有“fortran”命令,该命令将方程转换为可工作的 Fortran 代码。当我还是研究生时,我发现它非常有用。

1989 年。曾在 I.I.T. Madras 担任系统培训生。大量工程图纸被发送到绘图仪以获取硬拷贝。这是一件昂贵的事情。没有可用的可视化工具。各种彩色墨水、笔、绘图仪纸张、排队的作业,当然还有绘制图纸所需的时间(从 1 分钟到甚至 15 分钟不等)都是很大的开销。任何错误,都必须重做整个过程。

编写了一个 FORTRAN-77 程序,该程序具有子例程,其名称与绘图仪例程中使用的名称完全相同。它采用相同的变量和值作为输入,但在高速行式打印机上输出图片,而不是在绘图仪上输出。显然,打印的图像看起来不太好,但它让人们了解绘图仪的输出是否会是用户期望的。此外,像这样的“预览”资源消耗更少且速度足够快。让用户能够摆弄输入值,从而得到他们想要的图表。

这很有趣,是一次很棒的学习经历,最重要的是,它具有很大的实用价值。之后我真的没有机会使用 FORTRAN,但它仍然是我的“初恋”。我仍然随身携带我的程序的硬拷贝。

在 1960 年代初期,我通过从研究生院计算机中心获得的 IBM 手册自学了编程技术和 FORTRAN。这是一种达到自私目的的手段:为了一个课堂扩展项目,获得访问学校 IBM 1620(20K 内存)的权限。我几乎不知道我在应用程序中创建了“虚拟”内存,因为数据操作需要使用连接的硬盘驱动器来模拟内存。
几年后,我成为一家纽约企业的副总裁,该企业需要我的才能来每年节省大约 4,000 人工时,并将某些周期性计费周期从六个月缩短到 30 天。我在分时计算机上使用 FORTRAN 开发了一个业务应用程序,该应用程序实现了这些目标,计算机运行大约需要 29 秒 CPU 时间。
在 1970 年代初期,两位大学教授要求我与他们合作,并向 John Wiley & Sons(出版商)推销我们撰写一本关于如何用 FORTRAN 编程业务应用程序的自学平装书的想法。出版商犹豫地接受了这个项目,但后来发现这本教科书成为美洲(英文版和西班牙文版)的畅销书。
从上面的内容中可以得出结论,人们可以用结构化和自文档化的格式编写 FORTRAN,类似于 COBOL。此外,人们可以轻松开发执行文本和格式化操作的子例程,这些操作并非 66 和 77 FORTRAN 原生固有的,这使其在商业界非常有用。

你确定 FORTRAN 代码实际上在旅行者号上吗?我对此深表怀疑。任何车载软件都将用汇编语言编写。所有 FORTRAN 代码都在地面上。

车载计算机是定制设计的,没有适用于它们的 FORTRAN 编译器。

当然,旅行者号上不会有源代码或编译器。这将是浪费。车载计算机运行机器语言。但很可能,这些目标程序的一部分是用 FORTRAN 编译的,然后在发射前安装(“移植到”)卫星上。

回复 作者:chris albertson (未验证)

记住这句格言:如果用 Fortran 做不到,那就根本做不到。

非常有趣。
我作为工程专业学生的编程“培训”包括 1974 年的一个学期 Fortran IV 课程,使用穿孔卡片和宽绿条打印输出。两年后,我在一家汽车供应商测试实验室找到了我的第一份工作,我一直工作到 1984 年,没有进行编程,当时我们签订合同安装一个计算机控制的多功能风洞。我花了几年时间在交付的 Fortran 77 软件(在 HP 小型计算机上)上,清理、扩展和定制它。
作为我的其他职责之一,我仍然在同一个实验室里工作一段时间,但那个风洞软件已经用 VB6 重写了。我已经转向 C、WordBasic、VB(A)、嵌入式 C++ 和 C#。
也许退休后,我会回到原点,找一份兼职工作来帮助 Fortran 保持活力......

这让我感觉自己老了。在过去的 15 年里,我一直在编写和维护 FORTRAN(77)、Fortran 90/95 和 Fortran 2003/2008 代码。我分析工作的“替代者”甚至没有在学校学习过编译型语言,只学了 MATLAB。我上了 3 门课程,并自学了另外几门。当然,那些工程师在旅行者号上所做的大部分工作与我今天所做的工作类似,因为我也在航天工业中从事前往其他行星的宇宙飞船的工作。

非常好的文章。我从 IBM 1620 上的 FORTRAN II-D 开始,这是第一个使用基于磁盘的系统来完成大部分工作而不是使用穿孔卡片来完成所有工作的版本。人们的程序仍然是穿孔卡片。当我在做数值分析课程的编程作业时,我父亲办公室的程序员教了我。在我与计算机打交道的 50 多年职业生涯中,我使用 Fortran 进行数值/数学、业务功能、业务管理、系统实用程序,包括一个将 UNIVAC 打印文件转换为可用于带有高速、高质量打印机的 IBM 系统的格式的程序。这是一门很棒的语言。现在为 Windows 编写数学程序(系统?),除了窗口设计/编码之外,Fortran 将比 Visual Basic 容易得多。

我经常听说 FORTAN 擅长数学密集型编程。但我想知道它是否本质上适合这样做,或者只是因为很多数学密集型代码已经用 FORTRAN 编写。

(1) 例如,据我所知,FORTRAN 是唯一具有复数原生类型的语言(APL 除外,APL 是基于矩阵的)。

(2) 此外,你写道:“它对数学性能的关注使 Fortran 成为许多高性能计算应用中的常用语言”。FORTRAN 真的比其他语言更快地处理数字吗?

有很多原因,包括以下几点
1) 多维数组是“一等公民”,这些数组对于存储例如天气模型使用的字段非常有用;
2) Fortran 的别名规则使其比普通的 C 更容易优化。
[3) 顺便说一句,拥有“安全”字符串和字符串操作很好,它们不受 C 中常见的缓冲区溢出类型的影响。]

Fortran 程序比“普通”程序员编写的 C 程序性能高出 2 倍的情况并不少见。当程序执行的计算成本达到处理器天数时,这一点很重要。

当前的(F-90 或更高版本)Fortran _是_一种结构良好的高级语言,仍然提供这种性能。作为一名编写了数十万行 Fortran 和 C 代码的环境建模人员,我这样说。

回复 作者:Haim Roman (未验证)

我在幻灯片第 17 页看到了这个 https://www.slideshare.net/KentaSato/julia-36537461
这是一个 Julialang 的幻灯片,但在这个基准测试中,在大多数情况下,只有 FORTRAN 比 C 更快。对于复数。C99、Common Lisp 具有原生复数。一些在科学计算中大量使用的语言(如 Python、R)也具有内置支持,但我不确定它们是否是原生的。

回复 作者:Haim Roman (未验证)

我相当喜欢“Fortran 趋势”图表显示 Fortran 非常擅长处理的那种渐近曲线......

第 7 列很棒,尤其是当卡片上只有 80 列时。

许多人没有意识到,相对而言,FORTRAN 只是另一种具有本地特性的 BNF 格式代码,因此学习起来并不难。虽然 80 列的问题突出了对“谨慎”和“方法”的需求的变化,以及它们在新语言形式中被“灵活性”所取代。

为了好玩,试试 FORTH(也差不多那么古老了......),但它确实提供了一种思考问题的新方法。

感谢这篇精彩的文章!

我自学了如何在 Apple II 上用 AppleSoft BASIC 编写程序,但 FORTRAN 是我的第一门编译型语言。我的书架上仍然有 FORTRAN 77 ANSI X3.9 - 1978 书籍。

作为 1990 年代初的物理学本科生,我们都学习用 FORTRAN 77 编写程序,以便对我们的实验室数据进行数值分析。当时这似乎是标准做法。

在我大三和大四之间的暑假,作为国家实验室的研究实习生,我的导师发现我懂 FORTRAN。因此,我得到了将 FORTRAN IV 程序移植到 FORTRAN 77 的工作(Fortran 90 最近才被定义,实验室还没有编译器)。当我想到 computed-goto 时,仍然会做噩梦。

在 60 年代中期,我在 Clarkson 的高中强化班上使用穿孔卡片编写了 Fortran 的前身 Forego 程序,然后在 70 年代初期继续使用 Fortran 为 GE Space Division 预测地球同步卫星漂移。之后又使用了更多 Fortran 来支持雷达数据分析,并在 80 年代至 90 年代生成 2D 和 3D 图。多年来,它一直是一个有价值的工具!我不知道我是否还保留着 Daniel McCracken 的《Fortran 编程指南》的副本。

大约在 1962 年,我在 AERE Harwell 工作,为 Ferranti Atlas 超级计算机开发 FORTRAN 编译器。这是用 FORTRAN 编写的,并在 RISLEY 的 IBM 7090 上开发的。代码被加载到 IBM 1401 上的磁带上,并通过从泽西岛经由 RAF Abingdon 飞往曼彻斯特的 Dakota 飞机发送到 Risley(曼彻斯特)。这是一项乏味的工作,FORTRAN 并不是适合这项工作的语言。另一台有趣的计算机是 PR1ME,它的所有软件(包括操作系统)都是用 FORTRAN 编写的——在当时是一台非常成功的计算机。哦,美好的回忆!

还有人记得 Murray-Shelley 的“自学计算机编程”吗?我 11 岁时从这本书中学到了 Fortran,后来又在同一系列中添加了“自学 Linux”。

我有一件 GNU FORTRAN T 恤,我曾在 PyCon 上穿过...... ;-)

带有 CP-5 操作系统(我记得是这样)的 Xerox Sigma-7 有几个不同的 FORTRAN 编译器。它有一个普通的 FORTRAN,但也包括 EFORT(发音为“effort”),扩展的 FORTRAN 编译器,一个 FLAG,又名 FORTRAN Load and Go。我认为是 EFORT 可能需要很长时间才能编译,但它对代码进行了最大程度的优化。在汇编语言课程中,一位教授向我们展示了 EFORT 通过创建一个什么都不做的复杂程序会付出多少“努力”。EFORT 分析了所有设置为常量值且从未更改的变量,在使用了这些变量的地方进行了数学运算,查看了 IF 和 DO,最终得出结论,IF 要么总是假的,要么总是真的,而 DO 永远不会执行。因此,它生成了一个文件大小为零的输出文件——好吧,也许不是零,但我们看到了生成的汇编语言,那里基本上什么都没有。

我不知道现在是否仍然如此,但在 70 年代初的“学院”里,几乎每个人都被要求至少修读一个学期的编程课程,每个工程系(和许多科学系)都开设了编程课程。我主修化学工程,但土木工程系有最新的小型计算机,所以我选修了他们的课程。我们需要用三种语言编写程序:汇编语言(即使用寄存器算术)、COGO(一种用于测量的语言)和 FORTRAN IV。是的,我们使用 IBM 039 卡片穿孔机在穿孔卡片上编写程序。每张卡片都包含一行代码......如果你打错了字,你必须撕掉那张卡片并打出一张新的卡片。那些日子...... :)

除了文章中提到的 NASA 和天气预报软件外,还有一些商业软件在日常使用中,它们在底层运行 FORTRAN。在化学工程领域,Aspen Plus 和 PRO-II 都具有用 FORTRAN 77 编写的工艺模拟引擎。它们的 GUI 是用更现代的语言编写的(FORTRAN 不太擅长事件驱动编程 :),但 GUI 然后将问题提交给用 FORTRAN 编写的引擎,然后接收结果并将其显示给用户。

与 NASA 的软件一样,这些化学工程模拟器仍然可用,并且需要付出巨大的努力才能用更现代的语言重写这些模拟器,然后您需要花费数年时间才能消除所有错误。

AspenTech 和 Invensys 与其他所有人一样,在旧的 FORTRAN 代码方面遇到了同样的麻烦......现在没有人再在学校学习它了。此外,可用的 FORTRAN 编译器越来越少。过去,有 5 或 6 个商业 FORTRAN 编译器,但现在我相信只有 GNU 开源 FORTRAN 编译器和 Intel 的编译器(我相信它是 DEC 的衍生产品)。当然,如果你想在最新的计算机硬件上运行你的代码,就必须有一个为该硬件编写的编译器。

很难击败已经开发出来,因此经过数十年的实战测试和调试的库。

自从我学习和编写 FORTRAN(-77) 已经几十年了,但它是我在大学里学习的语言(我想是我学习的第三种编程语言),也是我对结构化编程的入门。

FORTRAN 是我在 60 年代后期作为大学二年级学生学习的第一门计算机语言。仍然有教科书。编译器在当地一家工程公司,测试周转时间为一夜。每天一次机会,你学会了仔细的桌面检查。第二年通过 GE Telecomputing 使用 Basic - 程序在纸带上穿孔。在我大四那年,学校突然购买了一个 FORTRAN 编译器,以便在商务办公室的 NCR 计算机上运行。我的工作是在商务办公室午餐时间将学生的穿孔卡片组通过计算机运行。在一个月的过渡期里,我在一位经典语言教授的指导下,学习使用 FORTRAN 作为语言使用分析工具。

大学毕业后,我在一家保险公司找到了一份实习程序员的工作,想着我最终可能会在精算领域使用我的数学学位。我喜欢用多种语言解决问题的挑战,这些语言包括机器语言、操作系统、应用程序开发工具和业务编程。当为我的职业生涯后期的求职准备简历时,我意识到我可以列出超过 35 种编程语言、数据访问协议等等。甚至在那些年里也略微接触过 FORTRAN。

还有——我相信 Fortran 更具机器独立性。
也就是说——当你在不同的硬件上运行时,你会得到相同的答案。

我一直使用 Fortran,直到 80 年代后期开始读研究生,然后转向 C,最终转向 C++。Fortran 在没有我的情况下向前发展了。一两年前,我与我们实验室的一位博士后合作了一个项目,但他唯一知道的语言是 Fortran,所以我警告他,我将用“脾气暴躁的老头 Fortran 77”来完成我的工作。

生日快乐,爸爸... ))

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.