通过阅读这里的一些问题,一般的共识似乎是“在那里继续存在大量的COBOL代码”,不仅仅因为它是重构或重新编码的噩梦,而仅仅是因为对于某个细分市场(金融等),它已经证明自己能够拥有自己的市场。但是关于导致它如此的语言呢?几十年前的事情如何继续表现得足以与更现代的语言保持一致,在记忆管理等方面有了相应的改进? COBOL编译器等只是在后台默默地改进了吗?或者语言中是否存在固有的东西,这意味着它对于一组给定的操作非常有效?
答案 0 :(得分:11)
COBOL语言是在20世纪50年代设计的,以匹配当时可用的慢速RAM限制机器的功能。更不用说缺乏互动终端了。设计的许多方面都易于编译成简单的机器代码而无需优化。例如,没有变量。只有一个工作存储块,其名称引用从固定位置开始的特定固定长度的字节数组。 COBOL程序按设计编译为高效的机器代码。
随着CPU变得越来越快,内存越来越丰富,COBOL编译器确实增加了新的功能,如密钥索引文件I / O和内置MERGE算法,以及对交互式文本终端的支持。 Noawadays甚至还有面向对象的COBOL。
所以部分原因是代码可以移植到新的CPU架构,因为它是一种高级语言,但非常高效,因为它的设计不使用像ALGOL-60中的那些花哨的功能, C.部分原因是COBOL发展到适应更新的操作系统和功能。例如,SQL数据库只是COBOL旨在处理的简单面向表文件的更复杂形式。只要执行流程大致是连续的,覆盖连接器就允许编写大量的COBOL程序。可以通过PROCEDURE调用访问在Assembler或PL / 1或FORTRAN中做得更好的任何功能。
与COBOL最接近的现代语言是Python,因为你可以编写几乎像英语一样的清晰程序,而无需在任何地方使用无关的标点符号,但是你可以利用大而复杂的功能库,而不必一直编写自己的代码。当然,Python已经采用了ALGOL-60的所有功能,因为它是在现代时代设计的,当你不必将所有内容都安装到16k RAM中时。
答案 1 :(得分:4)
在OS / 360及其后代上,有四个汇编指令与COBOL动词的比例,硬件设计人员很好地了解了COBOL规范并构建了一个指令集来支持它。
即使看似怪异的政治家也喜欢: -
PERFORM BEGIN-PARA THROUGH END-PARA VARYING I FROM 1 BY 2 TO MAX_ARRAY.
转换为大约八个汇编指令(其中只有一个在循环内)
答案 2 :(得分:3)
这是因为COBOL程序(至少是旧程序)的结构非常简单,因此将它们编译为高效的机器代码并不困难。例如,“好老”的cobol程序不需要有效的内存管理,因为内存的动态分配根本不会发生;内存布局在编译时固定。
答案 3 :(得分:1)
另一点如果在金融环境中有利或COBOL是它提供本机数据类型和数学运算符来进行十进制定点对称(参见:[Packed Decimal] [1])。
Packed Decimal对于进行财务计算非常有用,因为它在小数点之前和之后保持固定的位数。这使得处理金融金额的四舍五入变得容易一些。
除了COBOL,PL / 1和Algol之外,很少有语言可以有效地在十进制定点中进行算术运算。 IBM大型计算机具有用于在BCD中进行计算的专用硬件电路,这有助于将COBOL性能保持在平流层的某处。
[1]:http://en.wikipedia.org/wiki/Packed_decimal“打包十进制”
答案 4 :(得分:1)
COBOL长期以来的优势在于语言本身将数据与指令分开。数据保存在DATA DIVISION中,而代码在PROCEDURE DIVISION保持一定的距离。这有助于鼓励编写“无状态”过程,这是编写模块化,易于测试的代码的关键方面。在这方面,COBOL领先于面向对象的人,许多C ++和Java人员似乎在15年前忘记了这一课程。
当然你可以违反这个原则,但是编写代码也很容易,大多数经验丰富的COBOL开发人员都这样做。
这也是COBOL仍然广泛使用的部分原因。因为它是模块化的,所以它更具可重用性,因此人们继续重复使用它。那么为何不?付出了代价。