返回目录:范文示例
今天小编给各位分享飞蛾日记的知识,文中也会对其通过COBOL语言:“上古卷轴”的逆袭和cobol是一种怎样的语言?等多篇文章进行知识讲解,如果文章内容对您有帮助,别忘了关注本站,现在进入正文!
内容导航:
一、COBOL语言:“上古卷轴”的逆袭
作者:范克里夫大尉
导语:“停在港口的船很安全,但我们造船并不是为了这个。”——格蕾丝·霍珀
美国新泽西州州长菲尔·墨菲对公众讲话,提出需要各位“Cobalt”(COBOL程序工程师)的支持。)
上周,美国新泽西州州长菲尔·墨菲对公众发出征集,希望州里的COBOL程序工程师志愿帮助维护和优化失业保险系统。这套政府机关使用的系统已经运行了四十多年,由于最近的COVID-19疫情造成失业人口激增,为给他们办理各类事务手续,系统已不堪重负,濒临瘫痪。问题在于,这套系统和美国大部分政务、商务机构一样,依赖基于COBOL语言的遗留系统,而这种计算机语言已是六十年前的产物,在突然激增的维护需求面前,难以短时间征募足够的相关人员。
这位州长的呼吁在网络上一石激起千层浪,围绕当代信息社会对旧式系统的依赖性、遗留系统的利弊与相关业务知识传承的话题,引来不少争论。
虽然时常被戏称为计算机语言世界的“上古卷轴”,COBOL语言仍是信息化历史的里程碑之作,说到它就不能不提为其奠定理论基础的传奇科学家格蕾丝·穆雷·霍珀。
格蕾丝·霍珀(右二)在UNVAC I计算机的操作台前。
格蕾丝·霍珀本名格蕾丝·穆雷,1906年生于美国纽约市。生来对新事物充满好奇心的她,据说小时候一口气连拆了家里七座钟表,十六岁就报考著名的瓦萨学院,因拉丁文分数过低落选一次后,于十七岁那年入学,1928年毕业获数学学士学位,三十年代初在耶鲁大学取得硕士学位。在此期间,她与纽约大学学者文森特·霍珀结婚,因此改姓,后虽然二人离婚,也未曾更改。
1934年,她在耶鲁大学获得数学博士学位,是第一位获得这一学位的现代女性。早在三年前,她就开始在母校瓦萨学院任教,1941年被聘为副教授。
太平洋战争爆发后,美国海军于1942年7月开始接受女性进入预备役,成立了“女性志愿应急服务部队”,即WAVES。霍珀于1943年志愿加入WAVES,尽管体重不达标[1],还是被破格录用,以预备役中尉身份在哈佛大学与受IBM公司资助的的霍华德·艾肯合作,担任一号计算机的程序工程师,合作发表了多篇关于这种设备的论文。一号计算机是世界上第一台通用计算机,由霍华德·艾肯领导研制,当时被放置在哈佛大学,霍珀是其首批程序工程师之一。
日本投降后,霍珀曾申请转入海军现役,因年龄原因未获批准,之后以海军预备役身份成为哈佛计算机实验室会士,在该单位工作到1949年,并被聘为瓦萨学院教授。
1947年,霍珀的团队在哈佛使用二号计算机时遭遇故障,结果她发现是一只飞蛾被压死在继电器部位导致了故障。霍珀把蛾子贴在日记页,写上了“第一个被发现的真正bug(虫)”,后来“bug”逐渐演变为对程序错误的俗称。这页日记现收藏在美国历史国家博物馆。
历史上第一个计算机程序“BUG”,藏于美国历史国家博物馆。
1950年,她被聘为埃克特-默里奇计算机公司的资深数学专家,参与开发UNIVAC I计算机。同年,埃克特-默里奇被雷明顿·兰德集团收购,UNIVAC I也研发完成,翌年投入市场,成为世界上第一种用于业务处理并实用化的商用计算机,革命性地运用磁带作为存储媒介,虽然价格昂贵,但仍被包括美国普查局在内的机构和企业采用,总共售出四十七台,商业成绩优异。
从1951年起,霍珀花费近两年时间设计了历史上首个实用化的编译器,即A-0系统。这极大地方便了用高级语言编写的源代码与机器语言基础的可执行文件之间的互换,显著推动了计算机应用的普及。霍珀一直主张,相对于门槛较高的机器语言,面向大众或初级开发/维护者的计算机语言应更接近日常生活使用的自然语言——在她的语境里,即更接近英语。
1954年,霍珀被任命为雷明顿·兰德的自动化编程主管,她领导的团队在五十年代后期开发了两种基于编译器的编程语言,即MATH-MATIC[2]和FLOW-MATIC[3],后者于1959年完成,是世界上第一种接近英语表达的编程语言。
1983年,格蕾丝·霍珀晋升海军准将。她于1992年去世,身后,美国海军伯克级驱逐舰的第二十舰以她命名。
此时,美国有多家企业机构都在开发商务处理语言。为确立统一标准,美国国防部建议开发一种通用商务处理语言,为此开设了数据系统语言会议(CODASYL)。1959年,CODASYL的一个临时六人小组确立了“通用商用语言”(COmmon Business-Oriented Language),简称COBOL。虽然霍珀没有亲自参与,但COBOL沿袭拓展了她主导的FLOW-MATIC,以及IBM的COMTRAN语言。
COBOL承袭了霍珀团队开发FLOW-MATIC的理念,命令与语法更接近英语,直接易读,虽然不具反射机能,但学习门槛比只有函数和算式的语言低得多,便于非计算机专科的业务员使用。而且它便于处理文字列分析和编辑,以及财会计算等业务。
1960年初,COBOL被美国联邦政府采纳,作为业务处理系统的唯一指定语言,由此,以其为基础的信息和处理系统开始在联邦机构、各州及其他商务机构普及。和更早的FORTRAN语言一样,COBOL也是最早国际标准化的高级语言之一。在漫长的岁月中,COBOL也得益于丰富的多平台编译器和不断拓展的语言规格,始终易于迁移,且在2002年实现面向对象编程架构。
六十年来,COBOL程序已经形成庞大规模,和经其处理的海量数据一起长时间支持着欧美企业与政府机构的系统运作,从社会保障卡信息储存和处理,到ATM机,其身影无处不在。而更新系统的成本和报批流程等源自科层的非技术性原因,使得这些陈年系统久久未能被有计划地换代更新,形成了规模惊人的遗留系统(Legacy System)。
直到2010年前后,美国海军的口粮管理业务,仍部分依赖MS-DOS系统和3.5寸软盘进行处理、存储。虽然它们没有COBOL年代久远,但当时也已都是遗留系统了。
上世纪八十年代,计算机飞速小型化,开放系统与主从式架构快速普及,以往的那些封闭式系统的大型机、小型机等看似过时的技术构件,开始被称作“遗留系统”。但虽然冠以此类名称,这些系统仍在相当多的机构中起重要作用。
跑题一下。其实我和COBOL也算曾经擦身而过,因为我妈就是个COBOL程序工程师。七十年代末的时候,她的单位仍使用0和1组成的机器语言,到了八十年代初,COBOL即成为主流,主要应用在进口的NEC小型机。当时因为是双职工家庭,一放寒暑假,有时候就得去机房写作业,隔间对面就是极具肃杀感的小型机阵列。
不过我只学过BASIC语言,而且大部分注意力后来都放在机房里那些微机的游戏上了,比如《F-19隐形战机》、《沙丘2》、《德军总部3D》……
根据高德纳咨询公司的统计,在全球约一万组大型机,仍存在38000个遗留系统,其程序代码总计约3100亿行,其中FORTRAN和其他汇编语言写的代码合计不到100亿行,而COBOL写的代码有2000亿行左右,占比达65%,每年增长量约50亿行。
根据英国Micro Focus软件公司发布的信息,全球商用数据的75%,以及商用数据处理的80%以上都依赖COBOL。
专注于支持COBOL遗留系统的美国COBOL COWBOYS公司则指出,美国财富500强企业中,有九成仍在使用COBOL。
由此,美国各级机构对COBOL的依赖,和其本身老化产生的各种问题之间,就形成了一个颇为魔幻的现实。一方面,时代变迁造成美国教育机构从三十年前就开始显著削减或撤销COBOL的教学课程,青壮年程序工程师大都没有接触过它。另一方面,就是新泽西州州长现在要面对的问题了——在过去两周内,共有超过三十六万名该州居民申领失业保险,这一失业激增是COVID-19肺炎导致的,是平时失业保险业务处理量的十六倍,处理系统不堪重负处于崩溃边缘,大批申请阻塞,而这个已经运转了四十多年的系统,和许许多多美国政府、企业机构的基础系统一样,是基于COBOL的。
陈旧语言和系统造成的社会服务瘫痪危机并不是什么新鲜事物,二十多年前成为话题的“千年虫”问题也与此有关。在计算机产业的起步阶段,为尽量节省当时高昂的储存成本,霍珀规定在一号计算机上只能用六位数字存储时间,即年、月、日各两位。这一定义被COBOL沿袭,年份只用后两位存储,虽然五十年代末就有人提出到了2000年,这会造成混乱,但毕竟当时很少人能想到那会儿写的程序会用上几十年。但如前所述,大量遗留系统的传承,使得这样的时间标记方式容易在2000年来临时导致日期卷回等问题。
2000年初,法国南特一所学校的屏显因千年虫问题,时间卷回到1900年。
为此,很多关键机构在九十年代末临时召集COBOL程序工程师进行事先堵漏,或更新系统,总算没有造成严重问题,但仍有一些无力负担此类成本的中小型企业遭殃。
在此之后,美国国内时有呼声,呼吁尽快将关键机构中基于COBOL的遗留系统换代,或尽量维持和培养相关技术支持人员。不过,成本等问题令这些呼声往往是干打雷不下雨,各级机构应对颇为缓慢。
不仅如此,COBOL开发者的人数也在逐年下降,2009年时估计有约二百万人,到2019年已减少到约八十五万人。综合目前的环境,这是个必然的趋势,拿新泽西州为例,政府肯定不会为了应对无法预测何时会到来的系统问题而保持常设的COBOL相关岗位和开支。
但只要美国社会仍在依赖基于COBOL的遗留系统并不愿从系统层面想办法逐步更新,那么足以威胁整个社会稳定的威胁,就会一直是挂在这个特级大国的脑门子上头的达摩克利斯之剑,这一次,是成千上万失业者迟迟拿不到失业保险金和票券,那下一次呢?
这样的情况也并非孤例,由于这样那样的“非技术性”原因,很多人们以为理所当然的事其实难比登天,而很多匪夷所思的事也往往司空见惯。
和老白聊起这个话题时,他评之为“建造在浮木上的城堡”,一语中的。
晚饭时候我跟我妈说,你知道不,COBOL就要great again了,纵横时光六十载,你这个行当才真是屹立不倒。
但她竟然飞起一脚踢到我的牙齿。
[1] 当时仅有47公斤,标准为54公斤。 [2] 即三型代数式翻译器(AT-3)。 [3] 即零式商用语言(B-0)。
一、cobol是一种怎样的语言?
cobol即Common Business-Oriented Language ,是一种面向过程的高级程序语言,为专门解决经企管理问题,美国的一些计算机用户于1959年组织设计了专用于商务处理的计算机语言COBOL,并于1961年美国数据系统语言协会公布。经不断修改、丰富完善和标准化,目前COBOL已发展为多种版本。二、COBOL语言的正文
发展简史50年代中期电子计算机开始用于商业和企业的事务处理,而事务处理与科学计算不同,数据繁多而运算简单,它只需要一定的运算能力,但对数据结构的描述和大批量数据的分析处理方面则要求有很强的功能。1956年在美国富兰克林学会召开的高级语言学术讨论会上提出FLOWMATIC语言,并在UNIVAC Ⅰ型计算机上实现。这是第一个面向数据处理的语言,它为COBOL的诞生创造了良好的条件。1959年5月美国国防部召开专门会议,讨论建立通用商业语言的要求和可能性,确定了这种语言的基本设计思想和应具有的特点。会后成立数据系统语言委员会(CODASYL),其中有一个短期工作委员会专门负责COBOL语言的开发。1959年9月提出初稿,1960年4月正式公布第一个COBOL文本,称为COBOL-60。经过进一步扩充和完善,又出现了COBOL-61和扩展COBOL-61。1965年出现COBOL-65。1968年被美国国家标准化协会(ANSI)批准为标准文本,即ANSICOBOL X3.23-1968,简称COBOL-68。1972年国际标准化组织 (ISO)把此文本推荐为国际标准,即ISO COBOL-72,并被美国、英国、法国、日本和苏联等21个会员国所承认。1974年美国国家标准化协会对COBOL-68作了修改补充,公布了新文本ANSI COBOLX3.23-1974。1978年被国际标准化组织推荐为国际标准文本,即ISO COBOL-78。现在计算机制造商均以ISO COBOL-72或ISO COBOL-78作为设计软件的依据,几乎在所有的大、中、小型计算机上都配有COBOL语言,微型计算机则采用COBOL的一个子集。中国引进COBOL语言后还增加了汉字处理功能。
主要特点COBOL语言的主要特点是:①面向文件。COBOL语言是一种典型的按文件系统方式进行数据处理的语言。文件(如档案、帐册等)是事务数据处理的基础。COBOL程序将处理对象按一定方式组织成文件,记录在计算机的外部设备上。它通过对数据层次结构的描述,说明同一文件中数据项之间的联系,因而可在数据的任一层次进行检索和处理。②接近英语自然语言。COBOL语言中大量采用普通英语词汇和句型,如描述性子句接近英语主表结构,操作性语句接近英语的祈使句。例如,把A和B两个数据项的内容相加,就写成ADD A TOB。因此COBOL程序看起来很像一篇用英语写的文章,学过英语的人很容易看懂。③通用性强。在COBOL程序中数据、运行环境和处理过程是分别单独描述的。它通过定义记忆名,使处理过程的描述中不直接涉及使用的外部设备的名字。因此,只要对设备描述和记忆名定义作少量的修改,即可将一个COBOL程序移植到另一台计算机上运行。④功能模块化。在标准COBOL文本中实现功能模块化,它对每一种功能模块的特性、语义及限制作了严格的规定。编译系统的设计者可根据需要和系统规模选用全部或部分功能模块。模块本身又进一步分为一级和二级,高一级模块包含了低一级模块的全部功能。选用模块的多少并不影响语言的基本结构。ISO COBOL-72只有8个功能模块,ISO COBOL-78则扩充到12个功能模块(见表)。COBOL最小的子集应包括核心、表处理和顺序存取等模块。
程序结构图为COBOL源程序的逻辑结构图。每个 COBOL语言程序都是按部、节、段和体几个层次构成的。每个程序由标识部、设备部、数据部、过程部等四个部组成。
标识部提供标识该程序的信息,如程序名、日期、程序员的姓名等。
设备部又称环境部,它提供有关该程序运行环境即计算机主机和外部设备方面的信息。它是程序中唯一描述计算机硬件的部分。COBOL程序规定把这一部分单独分出来,借以提高程序的通用性,把一个COBOL程序从一台计算机移到另一台不同的计算机去时只须修改这一部分内容便可执行。
数据部描述作为处理对象的数据文件、记录、数据项的结构和特性。例子下面是一个记录描述的例子:
01RECORD-1
02NAMEPICTUREISX(20)
02SEX PICTUREISA
02BIRTHDAY
03YEAR-BPICTUREIS9999
03MONTH-B PICTUREIS99
03DAY-B PICTUREIS99
这一记录由三项组成:NAME(姓名)是不超过20个字符的字符串,由X(20)说明;SEX(性别)是一个字母,由A说明,程序中可用M表示男性而用F表示女性;BIRTHDAY(出生日期)是一组合项,由3个表示年、月、日的更基本的项组成。各数据项的层次结构由层号表示,例中的01,02,03就是表示数据项在记录中的层次。这种表示方法很便于程序员描述管理、财会等领域中常见的有结构的数据。
过程部描述数据处理的步骤。数据从外部传入计算机主存储器称为输入;从主存储器将数据传出称为输出;数据在主存储器内从一个存储区传到另一个存储区称为传送;对数据进行加、减、乘、除运算称算术运算。这些都是数据处理的基本操作,程序由一系列描述基本操作的语句组成。如果程序执行中需要根据某个条件是否满足来决定它的后继处理步骤,称为转移控制,由控制语句来描述。每个COBOL语句包含一个英语动词,用以指明该语句操作的性质。动词后面随有若干操作对象的信息和描述操作的补充信息。下面是一段COBOL过程部的程序:
ACCEPTQUANTITY
MULTIPLYQUANTITYBYPRICEGIVING
TOTAL-PRICE
DISPLAYTOTAL-PRICE
ACCEPT(接收)、MULTIPLY(乘)、DISPLAY(显示)是三个英语动词。QUANTITY(数量)、PRICE(单价)、TOTAL-PRICE(总价)是变量的名称,代表被处理的对象。BY(被......)、GIVING(给出)是辅助用的保留字,说明被处理对象之间的关系。上述程序的意义为:从终端上接受操作员用键盘输入的商品数量值,然后将数量乘以单价得出总价,最后在显示屏幕上显示总价。
三、cobol语言怎么样?难不难?
Cobol不是很难,有没有Java或者C++基础都无所谓,不过最好需要有IBM大型机的基础,这样上手会快一些。你可以先找找大型机基础的书看看,最好还能有一个能够使用的大型机系统的模拟器,现在最常见的是z/OS Demo 1.6。虽然z/OS已经除了v1.11了,但是Demo用1.6就足够了。另外,要学Cobol必须会JCL语句,JCL也是大型机基础之一。总的来说,你想学好Cobol要注意下面几点:
1. 必须初步了解大型机的系统的基本操作。
2. 对大型机的Dataset(不是数据库,是大型机存储文件的基本单位,类似于WIndows的文件和文件夹)有了解。
3. 掌握JCL的使用
4. 掌握基本的大机上的DB2和CICS的使用
如果能够有人教你,三个月肯定能学会,快的话一两个月也可以。基础一定要打牢,否则Cobol编译出错你很难纠正的。
祝你好运了!
关于飞蛾日记的问题,通过《COBOL语言的正文》、《cobol语言怎么样?难不难?》等文章的解答希望已经帮助到您了!如您想了解更多关于飞蛾日记的相关信息,请到本站进行查找!