龙空技术网

COBOL并没有那么不好用,你一定要试试!

IT168企业级 417

前言:

当前我们对“cobol开发有前景吗”大致比较着重,朋友们都需要知道一些“cobol开发有前景吗”的相关文章。那么小编在网摘上搜集了一些关于“cobol开发有前景吗””的相关文章,希望咱们能喜欢,兄弟们快快来学习一下吧!

喜剧演员罗德尼•丹杰菲尔德(RodneyDangerfield)曾在舞台上抱怨自己不受尊重,而COBOL就像是编程语言中的RodneyDangerfield,没有得到任何尊重,很多程序员都第diss它冗长古老。但是实际情况并非如此,COBOL处理了85%的交易业务,每年也会有50亿条新的COBOL代码加入。

作为一名十年COBOL程序员,我并不认为COBOL有人们描述的那么糟糕。事实上,它在货币处理和固定格式记录方面的表现还是相当不错的。但不可否认的是,COBOL确实有很多怪癖,其中有很多是植根于早期编程的计算环境。

下面以我自己的亲身经历,和大家分享一个打孔卡吃了我的程序的故事。

一个神秘的bug

以下是问题代码示例,该段代码是在尝试计算订单的运费和预计发货日期:

这段代码的逻辑非常清晰,其实是从来没有看过COBOL代码的人也可以看得懂。

如果运送方式是“FX”,客户的商品第二天将获得运送,否则的话,运输需要两周时间(90年代)。员工可以享受免费送货, 其他人则需支付4.99美元。在我看来这段代码完全是正确的,但其实存在一个bug,它的发货日期计算是正确的,但是员工的运输费却是全额收取的。

当时,我采取了一些侦探手段来跟踪问题,结果发现是19行处出现问题。而现在语法高亮编辑就可以直接解决这个问题。

Sentences代替blocks

为了回答这个问题,我们需要追溯到20世纪50年代后期。在此之前,绝大部分语言是被设计来解决科学和工程问题,它们的语法类似于数学方程。Fortran就是这方面的典型例子。而COBOL的设计初衷主要是用于商业计算,为了让COBOL更易于学习,Grace Hopper和IBM工程师团队给COBOL设计一种英文语法。COBOL程序具有层次结构,而不是大多数现代编程语言的递归语法。代替COBOL,COBOL是由句子组成。像英语一样,每个句子也有时间限制。

这从理论上来看是个好主意,但实际上却是有问题的,代码很难移动,stray期间很可能会意外终止块。而且还会涉及到一个更深层次的问题,COBOL首次开发时程序员如何编写代码。

COBOL设计时,硬盘驱动器非常昂贵,所以大多数程序都是用打孔卡写的。最常见的打孔卡由12x80格子组成,其中孔表示1和非孔代表0。每一列是一个12位的字符,每个卡是一个80个字符的文本行。运行程序的时候,需要将一张打孔卡片放入读卡器。每张卡片的前六列和最后八列保留序列号和标识符。这样,如果当卡片掉了之后,这可能是你的程序的唯一副本,并可以通过机械分拣机卡,把它们放回到正确的顺序。

这意味着COBOL第72列之后的所有字符会被忽略。如果这是一个时期发生的事情,你的代码的整个逻辑都会改变。所以你一定猜到了,19行的代码刚好排到了73列。这是COBOL编译器如何实际解释这些行:

一旦找到问题,修复就是一件很简单的事情:从第19行开始删除了一个空格,它就排在了72列。虽然这个问题我从来没有遇到,但这是一个常见问题,许多COBOL程序员会在其终端的72列和73列之间加一条线。

现在的COBOL

COBOL-85标准添加了范围终止符,如end-if,因此句子不再需要结束。COBOL 2002标准允许自由格式的代码,写入2002年标准的代码使其看起来更像是一种现代编程语言:

请注意,行的开始处的空格也不再是必需的。我的工作系统通常都会支持范围终结器和自由格式的代码。COBOL编译器传统上是闭源和昂贵的,大多数COBOL代码是在企业环境中编写的。2002年,一个名为OpenCOBOL的开源编译器出现了,2013年,它被正式接受为GNU软件包,并更名为GnuCOBOL。

标签: #cobol开发有前景吗