即使我们有类似的语言C++, Java, Python,为什么COBOL仍然是商业世界的首选语言?
编辑:
它为何如此受欢迎?
很抱歉没有为此问题创建单独的帖子.
Ark*_*ito 46
代码惯性. 用COBOL编写的大量现有代码=将所有内容切换到另一种语言的成本过高. 维基百科表示,有超过2000亿行COBOL代码正在使用中.
政策惯性. COBOL真正被广泛使用的地方往往是政府机构和大型企业,这些企业的变化非常缓慢.
人的惯性. 那些以编写代码并了解多种语言为生的人不太可能认为学习新语言是一件大事.学习一种语言的人,因为他们需要知道它来执行"业务"工作,甚至可能不会想到转换.
Nea*_*alB 27
我不太确定COBOL是大企业和政府的首选.我会说容忍可能是一个更好的词.
为什么?
因为大型政府/企业在管理其金融系统方面存在风险.搞砸了,整个企业都处于危险之中.如果没有破坏,请不要修理它.
很难做出一个可靠的商业案例来取代包含数百万行代码的关键任务系统而不是"我的语言比你的语言更好"的论证 - 好吧它比这更复杂但是提出了一个坚实的商业案例很难.
交易量.COBOL应用程序倾向于针对吞吐量进行优化.批量处理大量数据是COBOL真正发挥作用的地方.Java应用程序更难以优化吞吐量,因为在程序和"金属"之间存在更多基础设施层,这增加了处理阻力.大企业/政府拥有大量数据来推动他们的系统,吞吐量至关重要.
每笔交易成本.当包括所有因素时,COBOL通常具有较低的每次交易成本.这部分是因为处理时间需要花钱,而COBOL应用程序通常更有效.但是,COBOL应用程序似乎也具有较低的开发/维护成本.
在大家跳过我最后一点之前让我解释一下......
我在一家非常大的商店工作,几年前,我们决定用Java构建所有新系统.COBOL将仅用于维护现有的传统软件库.计划完成逐步淘汰15年的时间范围.
一些最优秀和最聪明的Java思想被引入培训,建立最佳实践,构建基础架构和支持大规模Java开发.这一举措得到了很好的规划和执行.然后,在部署了许多Java应用程序之后,"bean计数"开始了.结果是COBOL应用程序的开发,维护,支持和运行成本仍然较低,因为结果不受欢迎!
COBOL回来了 - 但并非完全.新的执行方向是将COBOL用于繁重的工作(后端事务处理)和面向批处理的应用程序.基本上,COBOL将用于数字运算和业务规则实现.Java来到前端提供GUI类型接口和轻量级处理.
我怀疑这可能是行业趋势.COBOL不会很快消失,但它可能会在前面支持新玩家的幕后失去视线.
小智 6
首先 - 我为Micro Focus工作 - 所以我是一个感兴趣的派对.但是,我会将问题转回自身.为什么不?固有的假设是C++,C#或Java自然会更好,因为它们更新.然而,COBOL并没有停滞不前.部分原因在于其冗长的语法,已经证明可以为COBOL添加新功能,因此它仍然具有竞争力.人们经常谈论COBOL有多糟糕,但是将30年前的COBOL与最新版本的C#,Ruby等进行比较!
事实上,COBOL的历史不断发展但仍然向后兼容,这是企业投资的一个重要原因; tco减少了,因为不需要重写.
有关COBOL最新版本的更多信息,请访问Managed COBOL的社区网站:http://knol.google.com/k/alex-turner/micro-focus-managed-cobol/2246polgkyjfl/4
为什么会流行起来?
因为在 1950 年代后期,美国政府颁布法令,如果软件供应商想要销售应用程序或为政府编写应用程序,则语言必须是 cobol。
因此,几十年来,它是拥有最多编译器供应商支持的语言,并且它是 ISO 标准化程度最高的语言,只有 FORTRAN 接近它,但 FORTRAN 显然有一个完全不同的目标观众。
第二个原因:因为即使在今天,对于经常发生的某些业务问题的某些方面,它也比我所知道的任何其他语言都要好。这些方面中最重要的是十进制算术。Cobol 本身就有它(就像 PL/1 等的情况一样),但对于任何所谓的“更现代”的语言来说,情况并非如此。顺便说一句:这就是为什么这里有这么多关于“存储货币价值的最佳数据类型是什么?”的原因。提出这些问题的人只知道整个 IT 世界由一些面向对象语言和一些 ORM 工具组成,并且不知道为什么“金钱算术”这样的东西可能对计算机语言本身支持它有用,即计算机语言有一个内置的本地数据类型,而不是 bigint(程序员仍然必须跟踪小数位数)或浮点数(程序员仍然负责添加到处都是正确的舍入逻辑)。
这些语言都没有提供 Cobol 所做的——快速、高效地处理大批量数据。它不需要图形,不需要摆弄,它只需要做它擅长的事情——主要是会计。
C++ 和 C 可以很好地替代系统风格的东西,但它们在定点数学和对面向记录的 I/O 的强大支持上有所下降。在大多数金融和商业应用程序所在的空间中,z/OS、Cobol 和 z/assembler 对这些东西都有更好的原生支持。
Java 是好的、安全的和可行的。在 IBM 大型机上,Java 和 Cobol 可以很好地互操作。但是有些在 Cobol 中很容易做到的事情在 Java 中很难做到,反之亦然。它们是相互补充,而不是相互替代。Java 还通过库调用来完成所有的定点数学运算,这比原生操作码支持慢得多。
Python 使用库(又名模块)支持定点数学以及记录 I/O。它还存在一个致命的、恕我直言、使用缩进来界定范围的设计缺陷。这在具有某些 ISO8859-1 字符集变体的 Mac/Windows/Unix 相对同质环境中工作得相当好。在以 ASCII 为中心的世界和以 EBCDIC 为中心的世界之间来回移动时很容易出现问题,其中行终止符不像 "\n\r, \r, \n" 和文件传输包中的任何错误配置那样简单、字符转换例程或通过为不同字符集配置的终端进行编辑将破坏源的范围。
您提到的所有语言在关键业务需求方面都存在弱点,而 Cobol 是最强大的。