dav*_*vek 5 compiler-construction cobol
通过阅读这里的一些问题,一般的共识似乎是"在那里继续存在大量的COBOL代码",不仅仅因为它是重构或重新编码的噩梦,而仅仅是因为某些市场细分(金融等),它已经证明自己能够拥有自己的能力.但是,什么是它关于导致它是如此的语言?几十年前的事情如何继续表现得足以与更现代的语言保持一致,在记忆管理等方面有了相应的改进?COBOL编译器等只是在后台默默地改进了吗?或者语言中是否存在固有的东西,这意味着它对于给定的一组操作非常有效?
Mic*_*lon 11
COBOL语言是在20世纪50年代设计的,以匹配当时可用的慢速RAM限制机器的功能.更不用说缺乏互动终端了.设计的许多方面都易于编译成简单的机器代码而无需优化.例如,没有变量.只有一个工作存储块,其名称引用从固定位置开始的特定固定长度的字节数组.COBOL程序通过设计编译为高效的机器代码.
随着CPU变得越来越快,内存越来越丰富,COBOL编译器确实添加了新的功能,如密钥索引文件I/O和内置MERGE算法,以及对交互式文本终端的支持.Noawadays甚至还有面向对象的COBOL.
因此,部分原因是代码可以移植到新的CPU架构,因为它是一种高级语言,但非常高效,因为它的设计不使用像C的祖先ALGOL-60中那样的奇特功能.部分原因是COBOL发展到适应更新的操作系统和功能.例如,SQL数据库只是COBOL旨在处理的简单面向表文件的更复杂形式.只要执行流程大致是连续的,覆盖连接器就允许编写大量的COBOL程序.可以通过PROCEDURE调用访问在Assembler或PL/1或FORTRAN中更好的任何功能.
与COBOL最接近的现代语言是Python,因为你可以编写几乎像英语一样没有多余标点符号的干净程序,但你可以利用一个庞大而复杂的功能库,而不必一直编写自己的代码.当然,Python已经采用了ALGOL-60的所有功能,因为它是在现代时代设计的,当你不必将所有东西都装入16k的RAM中时.
这是因为 COBOL 程序(至少是旧的程序)的结构非常简单,因此将它们编译为高效的机器代码并不困难。例如,“古老的”cobol 程序不需要高效的内存管理,因为内存的动态分配根本不会发生;内存布局在编译时是固定的。
在 OS/360 及其后代上,大约有四个汇编指令与一个 COBOL 动词的比率,硬件设计人员仔细查看了 COBOL 规范并构建了一个指令集来支持它。
即使是看似可怕的政治家,例如:-
PERFORM BEGIN-PARA THROUGH END-PARA VARYING I FROM 1 BY 2 TO MAX_ARRAY.
Run Code Online (Sandbox Code Playgroud)
转换为大约 8 条汇编指令(其中只有 1 条在循环内)