Compiler construction 是什么让COBOL及其性能(与它的年龄相比)如此快速?

Compiler construction 是什么让COBOL及其性能(与它的年龄相比)如此快速?,compiler-construction,cobol,Compiler Construction,Cobol,通过阅读这里的一些问题,大家似乎普遍认为,COBOL代码“仍然存在”,这不仅是因为重构或重新编码是一场噩梦,而且仅仅是因为对于某个细分市场(金融等),它已经证明自己完全有能力掌控自己的市场。但是是什么使得它成为这样的语言呢?在内存管理等方面有了长足的进步后,几十年历史的东西如何能够继续保持良好的性能,以对抗更现代的语言呢。?COBOL编译器等是否只是在后台默默改进?或者说,该语言中是否有某种固有的东西,意味着它对给定的一组操作非常有效?这是因为COBOL程序(至少是旧的程序)的结构非常简单,因此

通过阅读这里的一些问题,大家似乎普遍认为,COBOL代码“仍然存在”,这不仅是因为重构或重新编码是一场噩梦,而且仅仅是因为对于某个细分市场(金融等),它已经证明自己完全有能力掌控自己的市场。但是是什么使得它成为这样的语言呢?在内存管理等方面有了长足的进步后,几十年历史的东西如何能够继续保持良好的性能,以对抗更现代的语言呢。?COBOL编译器等是否只是在后台默默改进?或者说,该语言中是否有某种固有的东西,意味着它对给定的一组操作非常有效?

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

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中。

另一点是,在金融环境中,它为十进制定点算术提供了本机数据类型和数学运算符(请参阅:[压缩十进制][1])

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

除了COBOL、PL/1和Algol之外,很少有其他语言能够有效地进行十进制定点运算。IBM大型机有专用的硬件电路,用于用BCD进行计算,这有助于保持COBOL性能在同温层的某个位置


[1] :“压缩十进制”

在OS/360及其后代上,大约有四条汇编指令与一个COBOL动词的比率,硬件设计师仔细研究了COBOL规范,并构建了一个指令集来支持它

即使是看似怪异的政治家,比如:-

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

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

COBOL长期以来保持的安静优势是语言本身将数据与指令分开。数据保存在数据分区中,而代码在过程分区中保持一定的长度。这有助于鼓励编写“无状态”代码程序是编写模块化、易于测试的代码的关键方面。COBOL在面向对象的人前面,这是许多C++和java人似乎已经忘记15年前的一个教训。 当然,您可能会违反这一原则,但由于编写好代码同样容易,大多数经验丰富的COBOL开发人员都会这么做


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

也许应该是一个社区维基而不是一个问题。我不想征求意见:我真的想知道技术原因是什么。编译器、内存等等。+1,plu它也是一种非常适合批处理类型业务操作的语言,它很好地映射了它在金融世界中的用途。有相当多的语言将十进制定点作为一种独特的类型(例如,VB拥有
货币
,并且它也可用于任何支持COM的语言).诀窍在于拥有与之配合良好的硬件。“大型复杂的功能库”--各种各样的东西都有很多内置的关键字--但遗憾的是,没有任何库。你只能一遍又一遍地编写简单的日期计算、重新格式化字符串等。嗯……现代程序员使用谷歌来应用DRY原理。还有很多。或者,如果你不能使用这些,那么至少可以编写自己的库。