代码之家  ›  专栏  ›  技术社区  ›  davek

为什么COBOL和它的性能(与它的年龄相比)如此之快?

  •  5
  • davek  · 技术社区  · 15 年前

    通过阅读这里的一些问题,人们普遍认为“外面”仍然存在大量的COBOL代码,这不仅仅是因为重构或重新编码是一场噩梦,而且仅仅是因为对于某个细分市场(金融市场等),它已经证明自己有能力拥有自己的代码。但是什么 是语言导致的吗?在记忆管理等方面的所有不可调和的改进下,几十年前的事物怎么能继续表现得足够好,足以与更现代的语言抗衡呢?COBOL编译器等是否只是在后台静默改进?或者,语言中是否存在某种内在的东西,意味着对于给定的一组操作来说,它是非常有效的?

    5 回复  |  直到 11 年前
        1
  •  11
  •   Michael Dillon    15 年前

    COBOL语言是在20世纪50年代设计的,以匹配当时速度较慢、RAM受限的机器的功能。更不用说缺少交互式终端了。设计的许多方面都易于编译成简单的机器代码,不需要优化。例如,没有变量。只有一个工作存储器块,其名称指的是从固定位置开始的特定固定长度的字节数组。COBOL程序通过设计编译成高效的机器代码。

    随着CPU越来越快,RAM越来越丰富,COBOL编译器添加了新的功能,如键索引文件I/O和内置的合并算法,以及对交互式文本终端的支持。无需说,甚至还有面向对象的COBOL。

    部分原因是代码可以移植到新的CPU体系结构中,因为它是一种高级语言,但是非常有效,因为它被设计成不使用像C的祖先Algol-60中那样的高级功能。部分原因是COBOL进化成适合新的操作系统和功能。例如,SQL数据库只是COBOL设计用来处理的简单的面向表文件的更复杂的形式。只要执行流大致是连续的,覆盖链接器就允许编写大型COBOL程序。在汇编程序、PL/1或Fortran中做得更好的任何特性都可以通过过程调用访问。

    与COBOL最接近的现代语言是python,因为您可以编写几乎像英语一样的干净程序,而无需在任何地方使用外来标点符号,但您可以利用大量复杂的功能库,而无需一直编写自己的代码。当然,python已经采用了algol-60及更多的所有特性,因为它是在现代时代设计的,当时您不必把所有的东西都安装到16K的RAM中。

        2
  •  4
  •   James Anderson    15 年前

    在OS/360及其子代上,大约有四个汇编指令与COBOL动词的比例,硬件设计人员很好地了解了COBOL规范,并构建了一个支持它的指令集。

    即使看起来像是可怕的政治家,比如:

    PERFORM BEGIN-PARA THROUGH END-PARA VARYING I FROM 1 BY 2 TO MAX_ARRAY.
    

    传送到大约八个组装说明(其中只有一个在回路中)

        3
  •  3
  •   Erich Kitzmueller    15 年前

    这是因为COBOL程序(至少是旧程序)的结构非常简单,所以将它们编译成有效的机器代码一点也不困难。例如,“好的旧的”COBOL程序不需要高效的内存管理,因为内存的动态分配根本不会发生;内存布局在编译时是固定的。

        4
  •  1
  •   NealB    15 年前

    财务设置中的另一个优点是,它提供了本地数据类型和数学运算符来进行小数定点算术运算(请参见[压缩十进制][1])。

    压缩十进制对于进行财务计算很有用,因为它在小数点前后保持固定的位数。这使得处理财务金额的四舍五入变得更加容易。

    除了COBOL、PL/1和ALGOL之外,很少有其他语言能有效地进行十进制定点运算。IBM的大型计算机有专门的硬件电路来用BCD进行计算,这有助于将COBOL的性能保持在同一水平。

    〔1〕: http://en.wikipedia.org/wiki/Packed_decimal “压缩十进制”

        5
  •  1
  •   John Deters    11 年前

    COBOL长期以来的安静优势是语言本身将数据与指令分离。数据保存在数据部分,而代码保存在过程部分的公平交易长度上。这有助于鼓励编写“无状态”过程,这是编写模块化、易于测试的代码的一个关键方面。COBOL是面向对象的人在这方面,一个教训很多C++和Java的人似乎已经忘记15年前。

    当然,您可以违反这个原则,但是由于编写代码很容易,所以大多数经验丰富的COBOL开发人员都会这样做。

    这也是为什么COBOL仍然被广泛使用的部分原因。因为它是模块化的,所以更可重用,所以人们继续重用它。为什么不呢?它是付费的。