关于 COBOL 消亡的传言被大大夸大了:认识 GnuCOBOL

6 位读者喜欢这篇文章。
COBOL programming language

Opensource.com

Slashdot》上最近的一篇文章有些懊恼地指出,美国国土安全部和退伍军人事务部仍在继续使用 COBOL,这种语言最初由已故海军少将 Grace Hopper 于 1959 年根据其研究成果发明。这意味着——而且在 IT 社区中已经流传多年——COBOL 是一种完全过时的语言。事实并非如此!1997 年,Gartner Group 报告称,全球 80% 的商业运营都依赖 COBOL,而 Computerworld 在 2006 年和 2012 年的调查发现,超过 60% 的大型金融机构使用 COBOL(实际上比使用 C++ 这种更新的语言的机构还多),并且其中一半机构的大部分内部代码都使用 COBOL。COBOL 标准一直在不断更新,最近一次修订是在 2014 年。

当然,使用像 COBOL 这样历史悠久的技术也存在一些问题;最值得注意的是,几乎没有大学或学院的 IT 课程再教授这门语言了,而且能够使用它的程序员群体正在“老化”并退休。我在大学里学过 COBOL,并在我的第一份专业工作中使用了它,但现在我四十多岁了,对于 COBOL 圈子里的其他人来说,我还是有点年轻。此外,大多数 COBOL 编译器的供应商维护服务越来越稀少,甚至完全停止了。

但是,如果您想深入研究 COBOL,那么有一个开源编译器。GnuCOBOL,最初于 2002 年作为 OpenCOBOL 发布。2013 年,1.1 版本更名为 GnuCOBOL,并且根据核心开发团队的说法,2 版本“即将发布预发行版”。GnuCOBOL 在 GPL 许可下获得许可,运行时库在 LGPL 许可下获得许可,因此它可用于任何环境中的生产代码。这里有一个活跃的用户和开发者社区,并且文档非常详尽。GnuCOBOL 项目正努力与 COBOL 2014 规范保持一致,并纳入商业编译器中常见的非标准功能。开发者不声称达到任何特定的标准符合性水平,但当前版本通过了国家标准与技术研究院为 COBOL 85 测试套件设计的 9000 多个测试。

严格来说,GnuCOBOL 系统是一个转译器;它将 COBOL 语句转换为 C 代码,然后在系统上使用 GNU C 编译器进行编译。因此,GnuCOBOL 与几乎任何可以使用 GNU C 的系统兼容——几乎任何 Unix 或 Linux 系统、Windows,甚至 Android 和 iOS。GnuCOBOL 编译器已被证明可在生产环境中使用,从大多数大型机操作系统到 Linux 系统的移植工作量极小。COBOL 的一个特点是代码块的 ENVIRONMENT 部分,您可以在其中告诉编译器一些关于它所运行的系统的信息;在大多数情况下,转换为 Linux 系统需要在 ENVIRONMENT 块中进行大量更改,但几乎所有其他内容都可以正常工作

COBOL 过去是,现在仍然是一种完全不同的编程方法,即使在它的鼎盛时期,大多数计算机科学家也没有参与其中。COBOL 需要对数据声明进行大量思考,并且为了避免真正混乱的代码,需要对执行路径进行思考。它并不“糟糕”,尽管许多学术计算机科学家会告诉你它是——只是不同而已。我实际上很享受我的 COBOL 工作,尽管它是一种输入量很大的语言。我偶尔会感到有点怀旧,并窥探一下 COBOL 世界正在发生的事情。人们实际上已经为 COBOL 编写了 Web 兼容性工具和框架、面向对象编程、JSON 处理库以及许多其他现代工具。

多年来,IT 社区一直称 COBOL “已死”,但随着像 GnuCOBOL 这样的项目出现,它仍然非常活跃,保留了遗留功能,并开发了新工具。

User profile image.
Ruth Holloway 长期以来一直是系统管理员和软件开发人员,她的职业生涯始于很久以前的 VAX 11/780。她职业生涯的大部分时间(到目前为止)都在为图书馆提供技术需求服务,并且自 2008 年以来一直是 Koha 开源图书馆自动化套件的贡献者。Ruth 目前是 Clearbuilt 的 Perl 开发人员和项目负责人。

25 条评论

在我编程生涯的头 8 年里,我都在使用 COBOL。如果您看到一个古老的程序中包含 ADD INSULT TO INJURY(雪上加霜)语句,那么很可能那是我的程序!我总是在我的代码的某个地方包含这个语句。

您也可以使用 PERFORM A-PLEASURABLE-ACT UNTIL COMPLETELY-SATISFIED(执行令人愉悦的操作直到完全满意),但我从未堕落到那种程度。

Marty,您不是唯一一个这样做的人;在我 COBOL 工作期间的宗教机构中,我经常看到像 ADD INSULT TO INJURY 这样的嘲讽幽默。由于这种语言的冗长,您可以轻松地添加许多这样的东西。COBOL 程序员确实是不同的品种...

回复 作者 MartyMonroe

西德克萨斯农工大学计算机科学系有一个关于企业计算的四门课程,其中包括一个学期的 COBOL 课程。年度 IBM Master the Mainframe 大赛向学生介绍这门语言。它仍在被教授,您只需要去寻找它。

这令人印象深刻。当普渡大学在 00 年代中期停止教授 Fortran 时,我非常生气。那时它当然不是一门很酷的语言,但它在地球科学(尤其是在天气建模中)中被大量使用,我认为作为气象学学位的一部分,学习这门课程对我来说会很有用。我最终用 Matlab 课程填补了我的 CS 选修课。但这没什么帮助。

回复 作者 Vance Morris (未验证)

很高兴听到这个消息!谢谢您的评论。

回复 作者 Vance Morris (未验证)

与 C++、Java 和所有其他“面向对象”的语言不同,COBOL 是“面向过程”的。过程导向更适合业务应用程序。

你好 Ruth,
你的文章神奇地让我脸上露出了笑容。:)
在 20 世纪 90 年代到 2006 年,我为一家大型保险公司担任 IBM 大型机上的 COBOL 程序员,使用 OS390 系统——在“千年虫”和“欧元货币”项目中做了大量工作。那是一段美好的时光,我不想错过。
我离开公司时,有超过 25,000 个 COBOL 程序正在维护中。两个月前,我和我当时的“老”同事共进了午餐。那里的 COBOL 程序数量没有显着减少。

COBOL 已死,COBOL 万岁!;)

非常感谢这篇精彩的文章。

COBOL 实际上是排名前 20 的编程语言。它没有消失,而且在短期内也不会消失。

https://tiobe.org.cn/tiobe_index

GNU Cobol 不是一个非常不完整的实现吗?我记得读到只有专有编译器才能跟上当前的 COBOL 标准

在我的研究中,我确实发现了一些注释,表明它并没有 *完全* 符合标准。GnuCOBOL 团队特意声明他们不 *保证* 任何特定的标准合规性级别,他们会尽可能多地工作;这是一个小众市场,而且没有很多开发者在从事这项工作。

专有编译器自然而然地对最大程度的合规性有着坚定的既得利益,特别是如果这能让他们诋毁社区驱动的努力。但 Opensource.com 感兴趣的正是这些社区。:)

回复 作者 Ryan McCoskrie (未验证)

我会对 Ryan 的这个问题说不。恰恰相反。GnuCOBOL 是一个令人惊讶的完整 COBOL 实现。GnuCOBOL 尚不具备任何面向对象 COBOL 功能,但我认为您很难找到一个 COBOL 85 的功能是不完全支持的。并且您可能会惊喜地发现它对其他 2002 功能的覆盖深度。只有少数 2014 编译器指令和文本操作工具尚未编写。

据我所知,GnuCOBOL 是最早实现某些新 2014 规范的编译器之一。例如,符合 ISO 8601 标准的 FUNCTION FORMATTED-CURRENT-DATE。还有一个不断增长的免费软件用户定义函数存储库。2.0 预发布版展示之后的首要任务之一是将功能齐全的 ReportWriter 分支移动到主干中。

但是,继续尝试一下吧,Ryan,GnuCOBOL 是一个 GNU 自由软件项目。需要对您的 COBOL 宝藏堆提供一些关键支持吗?您可以自由地并且被鼓励修改编译器以满足需求和愿望。尽管开发团队规模很小,但它正在增长,并且始终乐于助您解决简单和复杂的 COBOL 编程挑战。

完全披露,我的观点完全是片面的,因为在过去的 8 年里,我花费了大部分时间构建了一份 1200 页的文件,探索 COBOL 在互联网时代的潜力,所有这些都围绕着 GnuCOBOL 及其 C 根基。如果 C++ 发射版本更适合您的需求和愿望,那么它也存在。集成和嵌入 Rexx、Python、Ada、Fortran、MathGL、Vala/Genie、GTK、Tcl/Tk、Node.js、Java、Nim、Javascript、GRETL、BASIC、REBOL/Red,你能想到的都可以。甚至还有将 Piet 和 Shakespeare 等深奥编程语言嵌入 COBOL 程序中的工作示例,但这只是为了好玩。

回复 作者 Ryan McCoskrie (未验证)

> GNU Cobol 不是一个非常不完整的实现吗?

不。恰恰相反。GnuCOBOL 是一个非常完整的实现。

在我们自己的案例中,我们有超过 200,000 行 COBOL-74 代码被转换为 GnuCOBOL。100% 的 COBOL-74 代码行都编译并正确运行。唯一没有编译的代码行是 SELECT 和 extended ACCEPT 语句(这些语句不符合 COBOL 标准)。

我们使用 GnuCOBOL 将代码现代化为 COBOL-85。我们发现 GnuCOBOL 存在不足的情况非常少。

回复 作者 Ryan McCoskrie (未验证)

你好 Ruth,

我从 80 年代末开始使用 COBOL(确切地说是 RM/COBOL),从那时起我就一直使用它(大约从 1996 年开始使用 AcuCOBOL IIRC),直到今天。我目前正在为加泰罗尼亚的几家公司维护一个旧应用程序。

当然,编程 COBOL 不再是我的主要日常工作。所以 C、ASM 和 Perl 语言需要(不时地)与 COBOL 共存!:-)

感谢您的文章!

我很高兴旧代码能够延续下去,但这也有阴暗面。“如果没坏,就不要修理”这句话非常有吸引力,并且并非没有道理,但是随着支持变得越来越不稳定,“凑合用”的损坏比“彻底”损坏的可能性要小。如果不尊重现有的工作代码,如果它的代码库真的比所有 C++ 的代码库都大,那么就会有很大的中断风险。

交叉编译到 C 表明代码可以无限期地存在下去,但是(假设生成的 C 代码实际上是可读的)您拥有一组维护人员无法读取的代码,需要不理解代码的维护人员。这对我来说听起来不是很吸引人。

我认为您实际上看不到 C 代码。据我回忆,GNU 编译器系统只有一个最终编译器可以将代码转换为机器代码。所有受支持的语言都需要首先编译成一个主语言(维基百科称之为抽象、语法自由),它必须至少是 C 的超集,然后将其编译成最终的机器代码。

回复 作者 John Navratil (未验证)

如果您使用 -C 编译器选项,我将为您提供 C 代码源。

回复 作者 John Navratil (未验证)

非常有趣的文章。

我想补充一点,有很多在线资源可以学习 COBOL 语言。Vance 已经提到了 IBM 的一个很棒的程序。对于那些喜欢自学方法的人,我建议您查看这个网站:www.microfocus.com/visualcobolpe

您可以下载免费版本的现代 COBOL。下载内容包括一个免费教程,用于学习过程式和现代 COBOL 编程,其中包含代码示例。绝对值得一看。

在 80 年代后期,我在菲律宾花了一大笔钱学习 COBOL。我们所有的教科书的标题中都有“结构化 COBOL”,我们都认为我们正在学习结构化编程——直到我开始学习 Pascal 和后来的 C。我一直没有机会问我们的老师,他教我们编写的 COBOL 程序怎么能被称为“结构化”程序。

如果您有并使用适当的纪律,并且真正理解是什么构成了结构化程序,那么可以使用任何语言编写结构化程序——并且实际上应该使用任何语言编写结构化程序。

回复 作者 Emmanuel Celiz (未验证)

COBOL 并没有比 FORTRAN 更过时,FORTRAN 甚至更古老。

它在各级政府中也很受欢迎。
有些人使用预处理器验证,但不能保证该工具了解标准。

从 1980 年到 2001 年,我的大部分编程生涯都在使用 COBOL。
我仍然喜欢它的直观、过程化和相对容易调试的方式。
我想说的是,看看 Microfocus COBOL,它可以在 VS Studio 中运行。

COBOL 程序员

回复 作者 Steve Kiley (未验证)

“严格来说,GnuCOBOL 系统是一个交叉编译器;它将 COBOL 语句转换为 C 代码,然后在系统上使用 GNU C 编译器进行编译。”

嗯,那是转译器。交叉编译器是一种在一个机器上运行,但生成在另一台机器上运行的可执行文件的编译器。如果您要写“严格来说”,请验证您是否准确...特别是如果您正在写一些您显然不熟悉的东西。

“集思广益,BUG 无处遁形。” 虽然我在 IT 行业——不仅仅是新闻业——工作了很多年,但我从未发现这种区别。感谢您的提醒;我已经对文章进行了更正。

回复 作者 Marcel Kincaid (未验证)

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