Fortran 六十周年快乐

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 as Google search term 2004 to 2017

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

随着 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 在红帽公司担任 Fedora 项目经理。他是《开源项目项目管理》一书的作者。在 Twitter 上(@FunnelFiasco)或 FunnelFiasco.com 上找到他。

30 条评论

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

早在我学习数据结构课程之前,我就在 IBM/360 上使用 CP/CMS 类型操作系统在 FORTRAN 中使用了链表和指针。它涉及到 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 除外,它是基于矩阵的)。

(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 仍然让我做噩梦。

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

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

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

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

带有操作系统 CP-5 (IIRC) 的 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”来完成我的部分。

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

© . All rights reserved.