7

阅读这里的一些问题,普遍的共识似乎是“外面”仍然有大量的 COBOL 代码,不仅仅是因为重构或重新编码是一场噩梦,还仅仅是因为在某些情况下细分市场(金融等),它已证明自己完全有能力保持自己的地位。但是导致它如此的语言是什么几十年前的东西怎么能继续表现得足够好,以对抗更现代的语言,以及内存管理等方面的所有相应改进?COBOL 编译器等是否只是在后台默默地改进了?或者语言中是否存在某种固有的东西,这意味着它对于给定的一组操作非常有效?

4

5 回答 5

13

COBOL 语言是在 1950 年代设计的,以匹配当时可用的速度慢、内存有限的机器的功能。更不用说缺乏互动终端了。设计的许多方面都易于编译成直接的机器代码,无需优化。例如,没有变量。只有一个工作存储块,其名称指的是从固定位置开始的特定固定长度的字节数组。COBOL 程序通过设计编译为高效的机器代码。

随着 CPU 变得更快和 RAM 变得更丰富,COBOL 编译器确实添加了新功能,例如键索引文件 I/O 和内置 MERGE 算法,以及对交互式文本终端的支持。现在甚至还有面向对象的 COBOL。

所以部分原因是代码可以移植到新的 CPU 架构,因为它是一种高级语言,但非常高效,因为它被设计为不使用 C 的祖先 ALGOL-60 中发现的花哨功能。部分原因是 COBOL 演变为适应更新的操作系统和功能。例如,SQL 数据库只是 COBOL 旨在处理的简单面向表文件的更复杂形式。覆盖链接器允许编写大型 COBOL 程序,只要执行流程大致是顺序的。任何在 Assembler 或 PL/1 或 FORTRAN 中做得更好的特性,都可以通过 PROCEDURE 调用来访问。

与 COBOL 最接近的现代语言是 Python,因为您可以编写几乎像英语一样阅读的干净程序,而无需到处使用多余的标点符号,但您可以利用庞大而复杂的功能库,而不必一直编写自己的代码。当然,Python 已经采用了 ALGOL-60 的所有特性以及更多特性,因为它是在现代时代设计的,那时您不必将所有东西都放入 16k 的 RAM 中。

于 2009-10-26T22:09:18.387 回答
5

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

即使是看似可怕的声明,例如:-

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

转换为大约 8 个汇编指令(其中只有 1 个在循环内)

于 2009-11-05T09:23:00.943 回答
4

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

于 2009-10-26T21:13:20.047 回答
3

金融环境中的偏好或 COBOL 的另一点是它提供了本地数据类型和数学运算符来进行十进制定点算术(请参阅:[Packed Decimal][1])。

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

除了 COBOL、PL/1 和 Algol 之外,很少有语言可以有效地进行十进制定点运算。IBM 大型计算机具有专门的硬件电路,用于在 BCD 中进行计算,这有助于将 COBOL 性能保持在平流层的某个地方。

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

于 2009-10-27T20:15:42.223 回答
2

COBOL 长期以来一直保持的安静优势是语言本身将数据与指令分开。数据保存在 DATA DIVISION 中,而代码则保存在 PROCEDURE DIVISION 中。这有助于鼓励编写“无状态”过程,这是编写模块化、易于测试的代码的关键方面。COBOL 在这方面领先于面向对象的人,许多 C++ 和 Java 人似乎在 15 年前就忘记了这一课。

当然你可以违反这个原则,但是因为编写好代码同样容易,大多数经验丰富的 COBOL 开发人员都会这样做。

这就是 COBOL 仍然被广泛使用的部分原因。因为它是模块化的,所以更可重用,所以人们不断地重用它。那么为何不?它是有偿的。

于 2013-02-25T22:06:38.293 回答