SUPPORT THE WORK

GetWiki

COBOL

ARTICLE SUBJECTS
aesthetics  →
being  →
complexity  →
database  →
enterprise  →
ethics  →
fiction  →
history  →
internet  →
knowledge  →
language  →
licensing  →
linux  →
logic  →
method  →
news  →
perception  →
philosophy  →
policy  →
purpose  →
religion  →
science  →
sociology  →
software  →
truth  →
unix  →
wiki  →
ARTICLE TYPES
essay  →
feed  →
help  →
system  →
wiki  →
ARTICLE ORIGINS
critical  →
discussion  →
forked  →
imported  →
original  →
COBOL
[ temporary import ]
please note:
- the content below is remote from Wikipedia
- it has been imported raw for GetWiki
{{short description|Programming language with English-like syntax}}{{distinguish|text=Kobol, a fictional planet in Battlestar Galactica}}{{Use dmy dates|date=April 2019}}{{good article}}{{Use American English|date=October 2014}}







factoids
, {{nowrapVernon Reeves}}, {{nowrapJean E. Sammet}}, {{nowrap>William Selden}}, {{nowrap|Gertrude Tierney}}| developers = CODASYL, ANSI, ISO| latest release version = ISO/IEC 1989:2014| latest release date = 2014weak typing>Weak, staticGnuCOBOL, IBM COBOL}}, {{nowrap|Micro Focus Visual COBOL}} | dialects = ACUCOBOL-GT, COBOL-IT, COBOL/2, DEC COBOL-10, DEC VAX COBOL, DOSVS COBOL, Fujitsu COBOL, Hitachi COBOL2002, HP3000 COBOL/II, IBM COBOL SAA, IBM COBOL/400, IBM COBOL/II, IBM Enterprise COBOL, IBM ILE COBOL, IBM OS/VS COBOL, ICL COBOL (VME), isCOBOL, Micro Focus COBOL, Microsoft COBOL, Realia COBOL, Ryan McFarland RM/COBOL, Ryan McFarland RM/COBOL-85, Tandem (NonStop) COBOL85, Tandem (NonStop) SCOBOL, UNIVAC COBOL, Unisys MCP COBOL74, Unisys MCP COBOL85, Unix COBOL X/Open, Veryant isCOBOL, Visual COBOL, Wang VS COBOLAIMACO, C++,{{efn>name=2002 influence DATE=MARCH 1997 ISSUE=3 PAGE=127 FIRST1=EDMUND C. FIRST2=FRANK P. COMTRAN, Eiffel (programming language)>Eiffel,{{efnFACT computer language>FACT, FLOW-MATIC, Smalltalk{{efn|name=2002 influence}}CobolScript,COBOL SCRIPT: A BUSINESS-ORIENTED SCRIPTING LANGUAGE LAST1=IMAJO LAST2=MIYAKE LAST3=SATO LAST4=ITO LAST5=YOKOTSUKA LAST6=TSUJIHATA LAST7=UEMURA PUBLISHER=IEEE CONFERENCE=ENTERPRISE DISTRIBUTED OBJECT COMPUTING CONFERENCE LOCATION=MAKUHARI, JAPAN DOI=10.1109/EDOC.2000.882363, EGL (programming language),HTTPS://WWW.OMG.ORG/ADM/EGLOVERVIEWTOOMG.PDF PUBLISHER=IBM SOFTWARE GROUP FIRST=WING HONG PL/I,THE EARLY HISTORY AND CHARACTERISTICS OF PL/I ACADEMIC PRESS > PUBLICATION-DATE=1981 LAST=RADIN AUTHORLINK=GEORGE RADIN EDITOR-LAST=WEXELBLAT ISBN=0127450408 YEAR=1978, Programming Language for Business{{citation needed > date=October 2017 | reason=Most sources on PL/B or Databus describe it is as COBOL-like, not as *inspired by* COBOL.}}| file_ext = .cbl, .cob, .cpy| wikibooks = COBOL}}COBOL ({{IPAc-en|ˈ|k|oʊ|b|ɒ|l|,_|-|b|ɔː|l}}; an acronym for "common business-oriented language") is a compiled English-like computer programming language designed for business use. It is imperative, procedural and, since 2002, object-oriented. COBOL is primarily used in business, finance, and administrative systems for companies and governments. COBOL is still widely used in legacy applications deployed on mainframe computers, such as large-scale batch and transaction processing jobs. But due to its declining popularity and the retirement of experienced COBOL programmers, programs are being migrated to new platforms, rewritten in modern languages or replaced with software packages.WEB,weblink Brain drain: Where Cobol systems go from here, Computerworld, 14 March 2012, 9 February 2015, Robert L., Mitchell, Most programming in COBOL is now purely to maintain existing applications.COBOL was designed in 1959 by CODASYL and was partly based on previous programming language design work by Grace Hopper, commonly referred to as "the (grand)mother of COBOL".JOURNAL,weblink Captain Grace M. Hopper: the Mother of COBOL, InfoWorld, 3, 20, 33, Vicki, Porter Adams, 5 October 1981, 0199-6649, JOURNAL,weblink Grace Hopper, mother of Cobol, dies, Computerworld, 26, 1, 14, Mitch, Betts, 6 January 1992, 0010-4841, BOOK,weblink Go To: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Maverick Scientists, and Iconoclasts—The Programmers Who Created the Software Revolution, Basic Books, 2008, 52, 978-0786730766, Steve, Lohr, It was created as part of a US Department of Defense effort to create a portable programming language for data processing. It was originally seen as a stopgap, but the Department of Defense promptly forced computer manufacturers to provide it, resulting in its widespread adoption.BOOK,weblink The Computer Boys Take Over: Computers, Programmers, and the Politics of Technical Expertise, MIT Press, 2009, 100, 978-0262050937, Nathan L., Ensmenger, 2009052638, It was standardized in 1968 and has since been revised four times. Expansions include support for structured and object-oriented programming. The current standard is ISO/IEC 1989:2014.WEB,weblink ISO/IEC 1989:2014, ISO, 26 May 2014, 7 June 2014, COBOL statements have an English-like syntax, which was designed to be self-documenting and highly readable. However, it is verbose and uses over 300 reserved words. In contrast with modern, succinct syntax like {{code|1=y = x;|lang=c}}, COBOL has a more English-like syntax (in this case, {{code|MOVE x TO y|lang=cobolfree}}).COBOL code is split into four divisions (identification, environment, data and procedure) containing a rigid hierarchy of sections, paragraphs and sentences. Lacking a large standard library, the standard specifies 43 statements, 87 functions and just one class.Academic computer scientists were generally uninterested in business applications when COBOL was created and were not involved in its design; it was (effectively) designed from the ground up as a computer language for business, with an emphasis on inputs and outputs, whose only data types were numbers and strings of text.WEB,weblink A History of Computer Programming Languages, Andrew, Ferguson, cs.brown.edu, COBOL has been criticized throughout its life, for its verbosity, design process, and poor support for structured programming. These weaknesses result in monolithic and, though intended to be English-like, not easily comprehensible and verbose programs.

History and specification

Background

In the late 1950s, computer users and manufacturers were becoming concerned about the rising cost of programming. A 1959 survey had found that in any data processing installation, the programming cost US$800,000 on average and that translating programs to run on new hardware would cost $600,000. At a time when new programming languages were proliferating at an ever-increasing rate, the same survey suggested that if a common business-oriented language were used, conversion would be far cheaper and faster.{{sfn|Beyer|2009|p=282}}File:Grace Hopper.jpg|thumb|alt=caption|Grace Hopper, the inventor of FLOW-MATICFLOW-MATICOn 8 April 1959, Mary K. Hawes, a computer scientist at Burroughs Corporation, called a meeting of representatives from academia, computer users, and manufacturers at the University of Pennsylvania to organize a formal meeting on common business languages.JOURNAL, Gürer, Denise, 1 June 2002, Pioneering Women in Computer Science, SIGCSE Bull., 34, 2, 175–180, 10.1145/543812.543853, 0097-8418, Representatives included Grace Hopper, inventor of the English-like data processing language FLOW-MATIC, Jean Sammet and Saul Gorn.{{sfn|Beyer|2009|pp=281–282}}{{sfn|Sammet|1978a|p=200}}At the April meeting, the group asked the Department of Defense (DoD) to sponsor an effort to create a common business language. The delegation impressed Charles A. Phillips, director of the Data System Research Staff at the DoD, who thought that they "thoroughly understood" the DoD's problems. The DoD operated 225 computers, had a further 175 on order and had spent over $200 million on implementing programs to run on them. Portable programs would save time, reduce costs and ease modernization.{{sfn|Beyer|2009|p=283}}Phillips agreed to sponsor the meeting and tasked the delegation with drafting the agenda.{{sfn|Beyer|2009|p=284}}

COBOL 60

On 28 and 29 May 1959 (exactly one year after the Zürich ALGOL 58 meeting), a meeting was held at the Pentagon to discuss the creation of a common programming language for business. It was attended by 41 people and was chaired by Phillips.JOURNAL, 10.1109/MAHC.1985.10047, Early Meetings of the Conference on Data Systems Languages, IEEE Annals of the History of Computing, 7, 4, 316–325, 1985, The Department of Defense was concerned about whether it could run the same data processing programs on different computers. FORTRAN, the only mainstream language at the time, lacked the features needed to write such programs.{{sfn|Sammet|2004|p=104}}Representatives enthusiastically described a language that could work in a wide variety of environments, from banking and insurance to utilities and inventory control. They agreed unanimously that more people should be able to program and that the new language should not be restricted by the limitations of contemporary technology. A majority agreed that the language should make maximal use of English, be capable of change, be machine-independent and be easy to use, even at the expense of power.{{sfn|Beyer|2009|p=286}}The meeting resulted in the creation of a steering committee and short-, intermediate- and long-range committees. The short-range committee was given to September (three months) to produce specifications for an interim language, which would then be improved upon by the other committees.{{sfn|Conner|1984|p=ID/9}}{{sfn|Sammet|1978a|p=201}} Their official mission, however, was to identify the strengths and weaknesses of existing programming languages and did not explicitly direct them to create a new language.{{sfn|Sammet|2004|p=104}}The deadline was met with disbelief by the short-range committee.{{sfn|Bemer|1971|p=132}}One member, Betty Holberton, described the three-month deadline as "gross optimism" and doubted that the language really would be a stopgap.{{sfn|Beyer|2009|p=288}}The steering committee met on 4 June and agreed to name the entire activity as the Committee on Data Systems Languages, or CODASYL, and to form an executive committee.{{sfn|Sammet|1978a|p=203}}The short-range committee was made up of members representing six computer manufacturers and three government agencies. The six computer manufacturers were Burroughs Corporation, IBM, Minneapolis-Honeywell (Honeywell Labs), RCA, Sperry Rand, and Sylvania Electric Products. The three government agencies were the US Air Force, the Navy's David Taylor Model Basin, and the National Bureau of Standards (now the National Institute of Standards and Technology).{{sfn|CODASYL|1969|loc=§ I.2.1.1}} The committee was chaired by Joseph Wegstein of the US National Bureau of Standards. Work began by investigating data description, statements, existing applications and user experiences.{{sfn|Sammet|1978a|p=204}}The committee mainly examined the FLOW-MATIC, AIMACO and COMTRAN programming languages.{{sfn|Sammet|2004|p=104}}{{sfn|CODASYL|1969|loc=§ I.1.2}}The FLOW-MATIC language was particularly influential because it had been implemented and because AIMACO was a derivative of it with only minor changes.{{sfn|Beyer|2009|p=290}}JOURNAL, Sammet, Jean, Jean Sammet, The Early History of COBOL, ACM SIGPLAN Notices, 13, 8, 121–161, 1978,weblink 10.1145/960118.808378, 14 January 2010, subscription, FLOW-MATIC's inventor, Grace Hopper, also served as a technical adviser to the committee.{{sfn|Bemer|1971|p=132}} FLOW-MATIC's major contributions to COBOL were long variable names, English words for commands and the separation of data descriptions and instructions.{{sfn|Sammet|1978a|p=217}}IBM's COMTRAN language, invented by Bob Bemer, was regarded as a competitor to FLOW-MATIC{{sfn|Beyer|2009|p=292}}{{sfn|Bemer|1971|p=131}} by a short-range committee made up of colleagues of Grace Hopper.{{sfn|Beyer|2009|p=296}}Some of its features were not incorporated into COBOL so that it would not look like IBM had dominated the design process,{{sfn|Conner|1984|p=ID/9}} and Jean Sammet said in 1981 that there had been a "strong anti-IBM bias" from some committee members (herself included).{{sfn|Sammet|1978a|p=221}}In one case, after Roy Goldfinger, author of the COMTRAN manual and intermediate-range committee member, attended a subcommittee meeting to support his language and encourage the use of algebraic expressions, Grace Hopper sent a memo to the short-range committee reiterating Sperry Rand's efforts to create a language based on English.{{sfn|Beyer|2009|p=291}}In 1980, Grace Hopper commented that "COBOL 60 is 95% FLOW-MATIC" and that COMTRAN had had an "extremely small" influence. Furthermore, she said that she would claim that work was influenced by both FLOW-MATIC and COMTRAN only to "keep other people happy [so they] wouldn't try to knock us out".WEB,weblink Oral History of Captain Grace Hopper, Computer History Museum, December 1980, 28 June 2014, 37,weblink" title="web.archive.org/web/20171225202555weblink">weblink 25 December 2017, yes, Features from COMTRAN incorporated into COBOL included formulas,{{sfn|Sammet|1978a|p=218}} the {{code|PICTURE}} clause,{{sfn|Marcotty|1978|p=268}} an improved IF statement, which obviated the need for GO TOs, and a more robust file management system.{{sfn|Beyer|2009|p=292}}The usefulness of the committee's work was subject of great debate. While some members thought the language had too many compromises and was the result of design by committee, others felt it was better than the three languages examined. Some felt the language was too complex; others, too simple.{{sfn|Sammet|1978a|pp=205–206}}Controversial features included those some considered useless or too advanced for data processing users. Such features included boolean expressions, formulas and table {{dfn|subscripts}} (indices).{{sfn|Sammet|1978a|loc=Figure 8}}{{sfn|Sammet|1978a|pp=230–231}} Another point of controversy was whether to make keywords context-sensitive and the effect that would have on readability.{{sfn|Sammet|1978a|loc=Figure 8}} Although context-sensitive keywords were rejected, the approach was later used in PL/I and partially in COBOL from 2002.{{sfn|ISO/IEC JTC 1/SC 22/WG 4|2001|p=846}} Little consideration was given to interactivity, interaction with operating systems (few existed at that time) and functions (thought of as purely mathematical and of no use in data processing).{{sfn|Sammet|1978a|p=220}}{{sfn|Sammet|1978a|p=228}}The specifications were presented to the Executive Committee on 4 September. They fell short of expectations: Joseph Wegstein noted that "it contains rough spots and requires some additions", and Bob Bemer later described them as a "hodgepodge". The subcommittee was given until December to improve it.{{sfn|Bemer|1971|p=132}}At a mid-September meeting, the committee discussed the new language's name. Suggestions included "BUSY" (Business System), "INFOSYL" (Information System Language) and "COCOSYL" (Common Computer Systems Language).{{sfn|Sammet|1978a|p=210}} The name "COBOL" was suggested by Bob Bemer.NEWS,weblink Computer Pioneer Bob Bemer, 84, The Washington Post, 25 June 2004, 28 June 2014, B06, Patricia, Sullivan, WEB,weblink Thoughts on the Past and Future, 28 June 2014, Bob, Bemer, yes,weblink" title="web.archive.org/web/20140516214531weblink">weblink 16 May 2014, In October, the intermediate-range committee received copies of the FACT language specification created by Roy Nutt. Its features impressed the committee so much that they passed a resolution to base COBOL on it.{{sfn|Beyer|2009|p=293}}This was a blow to the short-range committee, who had made good progress on the specification. Despite being technically superior, FACT had not been created with portability in mind or through manufacturer and user consensus. It also lacked a demonstrable implementation,{{sfn|Bemer|1971|p=132}} allowing supporters of a FLOW-MATIC-based COBOL to overturn the resolution. RCA representative Howard Bromberg also blocked FACT, so that RCA's work on a COBOL implementation would not go to waste.{{sfn|Beyer|2009|p=294}}
| quoted=1
}}It soon became apparent that the committee was too large for any further progress to be made quickly. A frustrated Howard Bromberg bought a $15 tombstone with "COBOL" engraved on it and sent it to Charles Phillips to demonstrate his displeasure.{{efn|The tombstone is currently at the Computer History Museum.WEB, COBOL Tombstone,weblink Computer History Museum, 29 June 2014, }}{{sfn|Bemer|1971|p=130}}A sub-committee was formed to analyze existing languages and was made up of six individuals:{{sfn|Sammet|2004|p=104}}{{sfn|Beyer|2009|p=289}}
  • William Selden and Gertrude Tierney of IBM,
  • Howard Bromberg and Howard Discount of RCA,
  • Vernon Reeves and Jean E. Sammet of Sylvania Electric Products.
The sub-committee did most of the work creating the specification, leaving the short-range committee to review and modify their work before producing the finished specification.{{sfn|Sammet|2004|p=104}}(File:COBOL Report Apr60.djvu|thumb|alt=COBOL. Report to Conference on Data Systems Languages including initial specifications for a Common Business Oriented Language (COBOL) for programming digital electronic computers. Department of Defense, April 1960.|The cover of the COBOL 60 report)The specifications were approved by the Executive Committee on 3 January 1960, and sent to the government printing office, which printed these as COBOL 60. The language's stated objectives were to allow efficient, portable programs to be easily written, to allow users to move to new systems with minimal effort and cost, and to be suitable for inexperienced programmers.{{sfn|CODASYL|1969|loc=§ I.1.1}}The CODASYL Executive Committee later created the COBOL Maintenance Committee to answer questions from users and vendors and to improve and expand the specifications.{{sfn|Brown|1976|p=47}}During 1960, the list of manufacturers planning to build COBOL compilers grew. By September, five more manufacturers had joined CODASYL (Bendix, Control Data Corporation, General Electric (GE), National Cash Register and Philco), and all represented manufacturers had announced COBOL compilers. GE and IBM planned to integrate COBOL into their own languages, GECOM and COMTRAN, respectively. In contrast, International Computers and Tabulators planned to replace their language, CODEL, with COBOL.{{sfn|Bemer|1971|p=133}}Meanwhile, RCA and Sperry Rand worked on creating COBOL compilers. The first COBOL program ran on 17 August on an RCA 501.{{sfn|Beyer|2009|p=297}}On 6 and 7 December, the same COBOL program (albeit with minor changes) ran on an RCA computer and a Remington-Rand Univac computer, demonstrating that compatibility could be achieved.BOOK,weblink Grace Hopper: Admiral of the Cyber Sea, US Naval Institute Press, 978-1612512655, 10 November 2012, Williams, Kathleen Broome, 818867202, The relative influences of which languages were used continues to this day in the recommended advisory printed in all COBOL reference manuals:

COBOL-61 to COBOL-65

}}Many logical flaws were found in COBOL 60, leading GE's Charles Katz to warn that it could not be interpreted unambiguously. A reluctant short-term committee enacted a total cleanup and, by March 1963, it was reported that COBOL's syntax was as definable as ALGOL's, although semantic ambiguities remained.{{sfn|Bemer|1971|p=133}}Early COBOL compilers were primitive and slow. A 1962 US Navy evaluation found compilation speeds of 3–11 statements per minute. By mid-1964, they had increased to 11–1000 statements per minute. It was observed that increasing memory would drastically increase speed and that compilation costs varied wildly: costs per statement were between $0.23 and $18.91.{{sfn|Bemer|1971|p=134}}In late 1962, IBM announced that COBOL would be their primary development language and that development of COMTRAN would cease.{{sfn|Bemer|1971|p=134}}The COBOL specification was revised three times in the five years after its publication.COBOL-60 was replaced in 1961 by COBOL-61. This was then replaced by the COBOL-61 Extended specifications in 1963, which introduced the sort and report writer facilities.{{sfn|Brown|1976|p=48}}The added facilities corrected flaws identified by Honeywell in late 1959 in a letter to the short-range committee.{{sfn|Beyer|2009|p=297}}COBOL Edition 1965 brought further clarifications to the specifications and introduced facilities for handling mass storage files and tables.{{sfn|CODASYL|1969|loc=§ I.2.2.4}}

COBOL-68

Efforts began to standardize COBOL to overcome incompatibilities between versions. In late 1962, both ISO and the United States of America Standards Institute (now ANSI) formed groups to create standards. ANSI produced USA Standard COBOL X3.23 in August 1968, which became the cornerstone for later versions.{{sfn|CODASYL|1969|loc=§ I.2.3}} This version was known as American National Standard (ANS) COBOL and was adopted by ISO in 1972.BOOK,weblink Programming language standards, Encyclopedia of Computer Science, Wiley, 2003, 1467, 978-0470864128, Follet, Robert H., Sammet, Jean E., Jean E. Sammet, 4th, Anthony, Ralston, Edwin D., Reilly, David, Hemmendinger, subscription,

COBOL-74

By 1970, COBOL had become the most widely used programming language in the world.{{sfn|Beyer|2009|p=301}}Independently of the ANSI committee, the CODASYL Programming Language Committee was working on improving the language. They described new versions in 1968, 1969, 1970 and 1973, including changes such as new inter-program communication, debugging and file merging facilities as well as improved string-handling and library inclusion features.{{sfn|Brown|1976|p=49}}Although CODASYL was independent of the ANSI committee, the CODASYL Journal of Development was used by ANSI to identify features that were popular enough to warrant implementing.{{sfn|Brown|1976|p=52}}The Programming Language Committee also liaised with ECMA and the Japanese COBOL Standard committee.{{sfn|Brown|1976|p=49}}The Programming Language Committee was not well-known, however. The vice-president, William Rinehuls, complained that two-thirds of the COBOL community did not know of the committee's existence. It was also poor, lacking the funds to make public documents, such as minutes of meetings and change proposals, freely available.JOURNAL,weblink Few Realise Wasted Resources of Local DP Schools, Computerworld, 6, 31, 11, Alan, Taylor, 2 August 1972, In 1974, ANSI published a revised version of (ANS) COBOL, containing new features such as file organizations, the {{code|DELETE}} statementBOOK,weblink Programming in COBOL: A Course of Twelve Television Lectures, Manchester University Press, 1974, 87, 978-0719005923, Triance, J. M., and the segmentation module.{{sfn|Klein|2010|p=16}}Deleted features included the {{code|NOTE}} statement, the {{code|EXAMINE}} statement (which was replaced by {{code|INSPECT}}) and the implementer-defined random access module (which was superseded by the new sequential and relative I/O modules). These made up 44 changes, which rendered existing statements incompatible with the new standard.TECHREPORT,weblink Programming Language Standards—Who Needs Them?, May 1977, 7 January 2014, 19–21, George N., Baird, Paul, Oliver, 1974 Standard (X3.23–1974), Department of the Navy,weblink" title="web.archive.org/web/20140107192439weblink">weblink 7 January 2014, no, The report writer was slated to be removed from COBOL, but was reinstated before the standard was published.JOURNAL,weblink 'Spotty' Availability A Problem..., 17, 23 July 1975, Culleton, John R., Jr., Computerworld, 0010-4841, 9, 30, JOURNAL,weblink Does Cobol's Report Writer Really Miss the Mark?, Computerworld, 9, 25, 20, Williams B., Simmons, 18 June 1975, 0010-4841, ISO later adopted the updated standard in 1978.

COBOL-85

In June 1978, work began on revising COBOL-74. The proposed standard (commonly called COBOL-80) differed significantly from the previous one, causing concerns about incompatibility and conversion costs. In January 1981, Joseph T. Brophy, Senior Vice-President of Travelers Insurance, threatened to sue the standard committee because it was not upwards compatible with COBOL-74. Mr. Brophy described previous conversions of their 40-million-line code base as "non-productive" and a "complete waste of our programmer resources".JOURNAL,weblink User Threatens Suit Over Ansi Cobol-80, Computerworld, 15, 4, 1, 8, Rita, Shoor, 0010-4841, 26 January 1981, Later that year, the Data Processing Management Association (DPMA) said it was "strongly opposed" to the new standard, citing "prohibitive" conversion costs and enhancements that were "forced on the user".JOURNAL,weblink DPMA Takes Stand Against Cobol Draft, Computerworld, 15, 43, 1–2, 26 October 1981, Rita, Shoor, 0010-4841, JOURNAL,weblink Revised Cobol standard may be ready in late '85, Computerworld, 19, 37, 1, 8, John, Gallant, 16 September 1985, 0010-4841, During the first public review period, the committee received 2,200 responses, of which 1,700 were negative form letters.JOURNAL,weblink Expert addresses Cobol 85 standard, Computerworld, 19, 37, 41, 48, 16 September 1985, 0010-4841, Other responses were detailed analyses of the effect COBOL-80 would have on their systems; conversion costs were predicted to be at least 50 cents per line of code. Fewer than a dozen of the responses were in favor of the proposed standard.JOURNAL,weblink Responses to Cobol-80 Overwhelmingly Negative, Computerworld, 16, 11, 1, 5, 15 March 1982, Lois, Paul, 0010-4841, In 1982, ISO installed then-SC5’s (later SC22) first Working Group: WG4 COBOL. ISO took primary ownership and development of the COBOL standard, where ANSI did most of the proposals.In 1983, the DPMA withdrew its opposition to the standard, citing the responsiveness of the committee to public concerns. In the same year, a National Bureau of Standards study concluded that the proposed standard would present few problems.JOURNAL,weblink Study Sees Few Problems Switching to Cobol-8X, Computerworld, 17, 17, 1, 6, Lois, Paul, 25 April 1983, A year later, a COBOL-80 compiler was released to DEC VAX users, who noted that conversion of COBOL-74 programs posed few problems. The new EVALUATE statement and inline PERFORM were particularly well received and improved productivity, thanks to simplified control flow and debugging.JOURNAL,weblink DEC users get head start implementing Cobol-80, Computerworld, 18, 47, 1, 6, Paul, Gillin, 19 November 1984, 0010-4841, The second public review drew another 1,000 (mainly negative) responses, while the last drew just 25, by which time many concerns had been addressed.In 1985, the ISO Working Group 4 accepted the then-version of the ANSI proposed standard, made several changes and set it as the new ISO standard COBOL 85. It was published in late 1985.Sixty features were changed or deprecated and many{{quantify|date=March 2014}} were added, such as:{{sfn|Garfunkel|1987|p=150}}BOOK,weblink COBOL Programming: Problems and Solutions, McGraw-Hill Education, 438–451, 978-0074603185, M. K., Roy, D. Ghost, Dastidar, 1 June 1989, 2nd, Features of COBOL-85,
  • Scope terminators (END-IF, END-PERFORM, END-READ, etc.)
  • Nested subprograms
  • CONTINUE, a no-operation statement
  • EVALUATE, a switch statement
  • INITIALIZE, a statement that can set groups of data to their default values
  • Inline PERFORM loop bodies – previously, loop bodies had to be specified in a separate procedure
  • Reference modification, which allows access to substrings
  • I/O status codes.
The new standard was adopted by all national standard bodies, including ANSI. Two amendments followed in 1989 and 1993, the first introducing intrinsic functions and the other providing corrections.,

COBOL 2002 and object-oriented COBOL

In 1997, Gartner Group estimated that there were a total of 200 billion lines of COBOL in existence, which ran 80% of all business programs.WEB,weblink Cobol remains old standby at agencies despite showing its age, Public Sector Media Group, FCW, 26 April 2014, 9 July 2009, Robinson, Brian, {{better source | reason=While this claim is ubiquitous, the actual Gartner report is needed to verify the claim. | date=January 2015}}In the early 1990s, work began on adding object-orientation in the next full revision of COBOL. Object-oriented features were taken from C++ and Smalltalk.WEB,weblink COBOL '97: A Status Report, Dr. Dobb's Journal, October 1995, 21 April 2014, Saade, Henry, Ann, Wallace, BOOK,weblink Object-Oriented COBOL, Cambridge University Press, 15, 978-0132611404, Edmund C., Arranga, Frank P., Coyle, February 1998, Object-Oriented COBOL's style reflects the influence of Smalltalk and C++., The initial estimate was to have this revision completed by 1997, and an ISO Committee Draft (CD) was available by 1997. Some vendors (including Micro Focus, Fujitsu, and IBM) introduced object-oriented syntax based on drafts of the full revision. The final approved ISO standard was approved and published in late 2002.WEB,weblink COBOL Standards, 2 September 2014,weblink" title="web.archive.org/web/20040331054413weblink">weblink 31 March 2004, Micro Focus, yes, Fujitsu/GTSoftware,WEB,weblink NetCOBOL for .Net, GTSoftware, netcobol.com, 2013, 29 January 2014, yes,weblink" title="web.archive.org/web/20140708210107weblink">weblink 8 July 2014, Micro Focus and RainCode introduced object-oriented COBOL compilers targeting the .NET Framework.There were many other new features, many of which had been in the CODASYL COBOL Journal of Development since 1978 and had missed the opportunity to be included in COBOL-85.WEB,weblink A list of Codasyl Cobol features, Computerworld, 10 September 1984, 8 June 2014, ID/28, 0010-4841, 18, 37, These other features included:{{sfn|ISO/IEC JTC 1/SC 22/WG 4|2001|loc=Annex F}}{{sfn|Klein|2010|p=21}} Three corrigenda were published for the standard: two in 2006 and one in 2009.WEB,weblink JTC1/SC22/WG4 – COBOL, ISO, 30 June 2010, 27 April 2014,weblink" title="web.archive.org/web/20140214225220weblink">weblink 14 February 2014, yes,

COBOL 2014

Between 2003 and 2009, three technical reports were produced describing object finalization, XML processing and collection classes for COBOL.COBOL 2002 suffered from poor support: no compilers completely supported the standard. Micro Focus found that it was due to a lack of user demand for the new features and due to the abolition of the NIST test suite, which had been used to test compiler conformance. The standardization process was also found to be slow and under-resourced.WEB,weblink Thoughts on the Future of COBOL Standardization, 27 February 2008, 14 August 2014, John, Billman, Huib, Klink,weblink" title="web.archive.org/web/20090711032647weblink">weblink 11 July 2009, yes, COBOL 2014 includes the following changes:{{sfn|ISO/IEC JTC 1/SC 22/WG 4|2014|loc=Annex E}}
  • Portable arithmetic results have been replaced by IEEE 754 data types
  • Major features have been made optional, such as the VALIDATE facility, the report writer and the screen-handling facility.
  • Method overloading
  • Dynamic capacity tables (a feature dropped from the draft of COBOL 2002)WEB,weblink J4: COBOL Standardization, Micro Focus, 2 December 1998, 12 July 2014,weblink" title="web.archive.org/web/19990224043617weblink">weblink 24 February 1999, yes, Don, Schricker,

Legacy

COBOL programs are used globally in governments and businesses and are running on diverse operating systems such as z/OS, z/VSE, VME, Unix, OpenVMS and Windows. In 1997, the Gartner Group reported that 80% of the world's business ran on COBOL with over 200 billion lines of code and 5 billion lines more being written annually.JOURNAL,weblink Does COBOL Have a Future?, 30 September 2012, Ronald J., Kizior, Donald, Carr, Paul, Halpern, The Proceedings of the Information Systems Education Conference 2000, 17, 126, yes,weblink" title="web.archive.org/web/20160817115437weblink">weblink 17 August 2016, Near the end of the 20th century, the year 2000 problem (Y2K) was the focus of significant COBOL programming effort, sometimes by the same programmers who had designed the systems decades before. The particular level of effort required to correct COBOL code has been attributed{{by whom|date=March 2014}} to the large amount of business-oriented COBOL, as business applications use dates heavily, and to fixed-length data fields. After the clean-up effort put into these programs for Y2K, a 2003 survey found that many remained in use.{{sfn|Carr|Kizior|2003|p=16}}The authors said that the survey data suggest "a gradual decline in the importance of Cobol in application development over the [following] 10 years unless ... integration with other languages and technologies can be adopted".{{sfn|Carr|Kizior|2003|p=10}}In 2006 and 2012, Computerworld surveys found that over 60% of organizations used COBOL (more than C++ and Visual Basic .NET) and that for half of those, COBOL was used for the majority of their internal software.WEB,weblink Cobol: Not Dead Yet, Computerworld, 4 October 2006, 27 April 2014, Mitchell, Robert L., WEB,weblink Cobol brain drain: Survey results, Computerworld, 14 March 2012, 27 April 2014, 36% of managers said they planned to migrate from COBOL, and 25% said they would like to if it was cheaper. Instead, some businesses have migrated their systems from expensive mainframes to cheaper, more modern systems, while maintaining their COBOL programs.Testimony before the House of Representatives in 2016 indicated that COBOL is still in use by many federal agencies.

Features

Syntax

COBOL has an English-like syntax, which is used to describe nearly everything in a program. For example, a condition can be expressed as  {{code|x IS GREATER THAN y|lang=cobolfree}} or more concisely as  {{code|x GREATER y|lang=cobolfree}}  or  {{code|x > y|lang=cobolfree}}. More complex conditions can be "abbreviated" by removing repeated conditions and variables. For example,  {{code|1=a > b AND a > c OR a = d|lang=cobolfree}}  can be shortened to {{code|1=a > b AND c OR = d|lang=cobolfree}}. As a consequence of this English-like syntax, COBOL has over 300 keywords.{{sfn|ISO/IEC JTC 1/SC 22/WG 4|2014|loc=§ 8.9}}{{efn|Vendor-specific extensions cause many implementations to have far more: one implementation recognizes over 1,100 keywords.WEB,weblink Reserved Words Table, Micro Focus, Micro Focus Visual COBOL 2.2 COBOL Language Reference, 3 March 2014, }} Some of the keywords are simple alternative or pluralized spellings of the same word, which provides for more English-like statements and clauses; e.g., the {{code|IN}} and {{code|OF}} keywords can be used interchangeably, as can {{code|IS}} and {{code|ARE}}, and {{code|VALUE}} and {{code|VALUES}}.Each COBOL program is made up of four basic lexical items: words, literals, picture character-strings (see {{slink||PICTURE clause}}) and separators. Words include reserved words and user-defined identifiers. They are up to 31 characters long and may include letters, digits, hyphens and underscores. Literals include numerals (e.g. {{code|12}}) and strings (e.g. {{code|'Hello!'}}).{{sfn|ISO/IEC JTC 1/SC 22/WG 4|2014|loc=§ 8.3.1.2}} Separators include the space character and commas and semi-colons followed by a space.{{sfn|ISO/IEC JTC 1/SC 22/WG 4|2014|loc=§ 8.3.2}}A COBOL program is split into four divisions: the identification division, the environment division, the data division and the procedure division. The identification division specifies the name and type of the source element and is where classes and interfaces are specified. The environment division specifies any program features that depend on the system running it, such as files and character sets. The data division is used to declare variables and parameters. The procedure division contains the program's statements. Each division is sub-divided into sections, which are made up of paragraphs.

Metalanguage

COBOL's syntax is usually described with a unique metalanguage using braces, brackets, bars and underlining. The metalanguage was developed for the original COBOL specifications. Although Backus–Naur form did exist at the time, the committee had not heard of it.{{sfn|Shneiderman|1985|p=349}}{| class="wikitable"|+ Elements of COBOL's metalanguage! Element! Appearance! Function| All capitals| EXAMPLE| Reserved word| UnderliningEXAMPLE}}| The reserved word is compulsory| Braces| { }| Only one option may be selected| Brackets| []| Zero or one options may be selected| Ellipsis| ...| The preceding element may be repeated Bars| {{{pipe}} {{pipe}}}| One or more options may be selected. Any option may only be selected once.| [{{pipe}} {{pipe}}]| Zero or more options may be selected. Any option may only be selected once.As an example, consider the following description of an ADD statement:begin{array}{l}
underline{text{ADD}},
begin{Bmatrix}
text{identifier-1}
text{literal-1}
end{Bmatrix}dots
;underline{text{TO}},left{text{identifier-2},left[,underline{text{ROUNDED}},right]right}dots


quad
left[left|begin{array}{l}
text{ON},underline{text{SIZE}},underline{text{ERROR}},text{imperative-statement-1}
underline{text{NOT}},text{ON},underline{text{SIZE}},underline{text{ERROR}},text{imperative-statement-2}
end{array}right|right]


quad
left[,underline{text{END-ADD}},right]
end{array}This description permits the following variants:ADD 1 TO xADD 1, a, b TO x ROUNDED, y, z ROUNDEDADD a, b TO c
ON SIZE ERROR
DISPLAY "Error"
END-ADDADD a TO b
NOT SIZE ERROR
DISPLAY "No error"
ON SIZE ERROR
DISPLAY "Error"

Code format

COBOL can be written in two formats: fixed (the default) or free. In fixed-format, code must be aligned to fit in certain areas (a hold-over from using punched cards). Until COBOL 2002, these were:{| class="wikitable"! Name! Column(s)! Usage| Sequence number area| 1–6| Originally used for card/line numbers, this area is ignored by the compiler| Indicator area| 7| The following characters are allowed here:
  • – Comment line
  • / – Comment line that will be printed on a new page of a source listing
  • - – Continuation line, where words or literals from the previous line are continued
  • D – Line enabled in debugging mode, which is otherwise ignored| Area A| 8–11| This contains: DIVISION, SECTION and procedure headers; 01 and 77 level numbers and file/report descriptors| Area B| 12–72| Any other code not allowed in Area A| Program name area| 73–| Historically up to column 80 for punched cards, it is used to identify the program or sequence the card belongs to
In COBOL 2002, Areas A and B were merged to form the program-text area, which now ends at an implementor-defined column.{{sfn|ISO/IEC JTC 1/SC 22/WG 4|2001|loc=§ F.2}}COBOL 2002 also introduced free-format code. Free-format code can be placed in any column of the file, as in newer programming languages. Comments are specified using *>, which can be placed anywhere and can also be used in fixed-format source code. Continuation lines are not present, and the >>PAGE directive replaces the / indicator.{{sfn|ISO/IEC JTC 1/SC 22/WG 4|2001|loc=§ F.2}}

Identification division

The identification division identifies the following code entity and contains the definition of a class or interface.

Object-oriented programming

Classes and interfaces have been in COBOL since 2002. Classes have factory objects, containing class methods and variables, and instance objects, containing instance methods and variables.{{sfn|ISO/IEC JTC 1/SC 22/WG 4|2014|loc=§ D.18.2}} Inheritance and interfaces provide polymorphism. Support for generic programming is provided through parameterized classes, which can be instantiated to use any class or interface. Objects are stored as references which may be restricted to a certain type. There are two ways of calling a method: the {{code|INVOKE}} statement, which acts similarly to {{code|CALL}}, or through inline method invocation, which is analogous to using functions.{{sfn|ISO/IEC JTC 1/SC 22/WG 4|2014|loc=§ D.18}}
  • > These are equivalent.
INVOKE my-class "foo" RETURNING varMOVE my-class::"foo" TO var *> Inline method invocationCOBOL does not provide a way to hide methods. Class data can be hidden, however, by declaring it without a {{code|PROPERTY}} clause, which leaves the user with no way to access it.{{sfn|ISO/IEC JTC 1/SC 22/WG 4|2014|p=108}} Method overloading was added in COBOL 2014.{{sfn|ISO/IEC JTC 1/SC 22/WG 4|2014|p=896}}

Environment division

The environment division contains the configuration section and the input-output section. The configuration section is used to specify variable features suchas currency signs, locales and character sets. The input-output section contains file-related information.

Files

COBOL supports three file formats, or {{dfn|organizations}}: sequential, indexed and relative. In sequential files, records are contiguous and must be traversed sequentially, similarly to a linked list. Indexed files have one or more indexes which allow records to be randomly accessed and which can be sorted on them. Each record must have a unique key, but other, {{dfn|alternate}}, record keys need not be unique. Implementations of indexed files vary between vendors, although common implementations, such as C‑ISAM and VSAM, are based on IBM's ISAM. Relative files, like indexed files, have a unique record key, but they do not have alternate keys. A relative record's key is its ordinal position; for example, the 10th record has a key of 10. This means that creating a record with a key of 5 may require the creation of (empty) preceding records. Relative files also allow for both sequential and random access.{{sfn|ISO/IEC JTC 1/SC 22/WG 4|2014|loc=§ D.2.1}}A common non-standard extension is the {{dfn|line sequential}} organization, used to process text files. Records in a file are terminated by a newline and may be of varying length.WEB,weblink File Organizations, Micro Focus, File Handling, 1998, 27 June 2014,

Data division

The data division is split into six sections which declare different items: the file section, for file records; the working-storage section, for static variables; the local-storage section, for automatic variables; the linkage section, for parameters and the return value; the report section and the screen section, for text-based user interfaces.

Aggregated data

Data items in COBOL are declared hierarchically through the use of level-numbers which indicate if a data item is part of another. An item with a higher level-number is subordinate to an item with a lower one. Top-level data items, with a level-number of 1, are called {{dfn|records}}. Items that have subordinate aggregate data are called {{dfn|group items}}; those that do not are called {{dfn|elementary items}}. Level-numbers used to describe standard data items are between 1 and 49.{{sfn|ISO/IEC JTC 1/SC 22/WG 4|2014|loc=§ 8.5.1.2}}{{sfn|Cutler|2014|loc=Appendix A}}
01 some-record. *> Aggregate group record item
05 num PIC 9(10). *> Elementary item
05 the-date. *> Aggregate (sub)group record item
10 the-year PIC 9(4). *> Elementary item
10 the-month PIC 99. *> Elementary item
10 the-day PIC 99. *> Elementary item
In the above example, elementary item {{code|num}} and group item {{code|the-date}} are subordinate to the record {{code|some-record}}, while elementary items {{code|the-year}}, {{code|the-month}}, and {{code|the-day}} are part of the group item {{code|the-date}}.Subordinate items can be disambiguated with the {{code|IN}} (or {{code|OF}}) keyword. For example, consider the example code above along with the following example:
01 sale-date.
05 the-year PIC 9(4).
05 the-month PIC 99.
05 the-day PIC 99.
The names {{code|the-year}}, {{code|the-month}}, and {{code|the-day}} are ambiguous by themselves, since more than one data item is defined with those names. To specify a particular data item, for instance one of the items contained within the {{code|sale-date}} group, the programmer would use {{code|the-year IN sale-date}} (or the equivalent {{code|the-year OF sale-date}}). (This syntax is similar to the "dot notation" supported by most contemporary languages.)

Other data levels

A level-number of 66 is used to declare a re-grouping of previously defined items, irrespective of how those items are structured. This data level, also referred to by the associated {{dfn|{{code|RENAMES}} clause}}, is rarely usedBOOK, Sams Teach Yourself COBOL in 24 hours, Sams, SAMS Publishing, 1999, 40, 978-0672314537, Thane, Hubbell, 98087215, and, circa 1988, was usually found in old programs. Its ability to ignore the hierarchical and logical structure data meant its use was not recommended and many installations forbade its use.{{sfn|McCracken|Golden|1988|loc=§ 19.9}}
01 customer-record.
05 cust-key PIC X(10).
05 cust-name.
10 cust-first-name PIC X(30).
10 cust-last-name PIC X(30).
05 cust-dob PIC 9(8).
05 cust-balance PIC 9(7)V99.

66 cust-personal-details RENAMES cust-name THRU cust-dob.
66 cust-all-details RENAMES cust-name THRU cust-balance.
A 77 level-number indicates the item is stand-alone, and in such situations is equivalent to the level-number 01. For example, the following code declares two 77-level data items, {{code|property-name}} and {{code|sales-region}}, which are non-group data items that are independent of (not subordinate to) any other data items:
77 property-name PIC X(80).
77 sales-region PIC 9(5).
An 88 level-number declares a {{dfn|condition name}} (a so-called 88-level) which is true when its parent data item contains one of the values specified in its {{code|VALUE}} clause.{{sfn|Cutler|2014|loc=§ 5.8.5}} For example, the following code defines two 88-level condition-name items that are true or false depending on the current character data value of the {{code|wage-type}} data item. When the data item contains a value of {{code|'H'}}, the condition-name {{code|wage-is-hourly}} is true, whereas when it contains a value of {{code|'S'}} or {{code|'Y'}}, the condition-name {{code|wage-is-yearly}} is true. If the data item contains some other value, both of the condition-names are false.
01 wage-type PIC X.
88 wage-is-hourly VALUE "H".
88 wage-is-yearly VALUE "S", "Y".

Data types

Standard COBOL provides the following data types:{{sfn|ISO/IEC JTC 1/SC 22/WG 4|2014|loc=§ 8.5.2}}{| class="wikitable"! Data type! Sample declaration! Notes| AlphabeticPIC A(30)|lang=cobolfree}}| May only contain letters or spaces| AlphanumericPIC X(30)|lang=cobolfree}}| May contain any characters| BooleanPIC 1 USAGE BIT|lang=cobolfree}}| Data stored in the form of 0s and 1s, as a binary number| IndexUSAGE INDEX|lang=cobolfree}}| Used to reference table elements| NationalPIC N(30)|lang=cobolfree}}| Similar to alphanumeric, but using an extended character set, e.g. UTF-8| NumericPIC 9(5)V9(5)|lang=cobolfree}}| May contain only numbers| ObjectUSAGE OBJECT REFERENCE|lang=cobolfree}}| May reference either an object or NULL| PointerUSAGE POINTER|lang=cobolfree}}|Type safety is variable in COBOL. Numeric data is converted between different representations and sizes silently and alphanumeric data can be placed in any data item that can be stored as a string, including numeric and group data.{{sfn|ISO/IEC JTC 1/SC 22/WG 4|2014|loc=§ 14.9.24}} In contrast, object references and pointers may only be assigned from items of the same type and their values may be restricted to a certain type.{{sfn|ISO/IEC JTC 1/SC 22/WG 4|2014|loc=§ 14.9.35}}

PICTURE clause

A {{code|PICTURE}} (or {{code|PIC}}) clause is a string of characters, each of which represents a portion of the data item and what it may contain. Some picture characters specify the type of the item and how many characters or digits it occupies in memory. For example, a {{code|9}} indicates a decimal digit, and an {{code|S}} indicates that the item is signed. Other picture characters (called {{dfn|insertion}} and {{dfn|editing}} characters) specify how an item should be formatted. For example, a series of {{code|+}} characters define character positions as well as how a leading sign character is to be positioned within the final character data; the rightmost non-numeric character will contain the item's sign, while other character positions corresponding to a {{code|+}} to the left of this position will contain a space. Repeated characters can be specified more concisely by specifying a number in parentheses after a picture character; for example, {{code|9(7)}} is equivalent to {{code|9999999}}. Picture specifications containing only digit ({{code|9}}) and sign ({{code|S}}) characters define purely {{dfn|numeric}} data items, while picture specifications containing alphabetic ({{code|A}}) or alphanumeric ({{code|X}}) characters define {{dfn|alphanumeric}} data items. The presence of other formatting characters define {{dfn|edited numeric}} or {{dfn|edited alphanumeric}} data items.{{sfn|ISO/IEC JTC 1/SC 22/WG 4|2014|loc=§ 13.18.40}}{| class="wikitable"|+ Examples! {{code|PICTURE}} clause! Value in! Value out {{codelang=cobolfree}}100}}00100}}"Hello"}}"Hello"}} (this is legal, but results in undefined behavior){{sfn2014|loc=§ 14.9.24}}PIC +++++|lang=cobolfree}}-10}}| "  -10" (note leading spaces)PIC 99/99/9(4)|lang=cobolfree}}31042003}}"31/04/2003"}} {{codelang=cobolfree}}100.50}}"**100.50"}}| 0 "0.00"}}PIC X(3)BX(3)BX(3)|lang=cobolfree}}"ABCDEFGHI"}}"ABC DEF GHI"}}

USAGE clause

The {{code|USAGE}} clause declares the format data is stored in. Depending on the data type, it can either complement or be used instead of a {{code|PICTURE}} clause. While it can be used to declare pointers and object references, it is mostly geared towards specifying numeric types. These numeric formats are:{{sfn|ISO/IEC JTC 1/SC 22/WG 4|2014|loc=§ 13.18.60.3}}
  • Binary, where a minimum size is either specified by the PICTURE clause or by a USAGE clause such as BINARY-LONG.
  • {{code|USAGE COMPUTATIONAL|lang=cobolfree}}, where data may be stored in whatever format the implementation provides; often equivalent to  {{code|USAGE BINARY|lang=cobolfree}}
  • {{code|USAGE DISPLAY|lang=cobolfree}}, the default format, where data is stored as a string
  • Floating-point, in either an implementation-dependent format or according to IEEE 754.
  • {{code|USAGE NATIONAL|lang=cobolfree}}, where data is stored as a string using an extended character set
  • {{code|USAGE PACKED-DECIMAL|lang=cobolfree}}, where data is stored in the smallest possible decimal format (typically packed binary-coded decimal)

Report writer

The report writer is a declarative facility for creating reports. The programmer need only specify the report layout and the data required to produce it, freeing them from having to write code to handle things like page breaks, data formatting, and headings and footings.{{sfn|ISO/IEC JTC 1/SC 22/WG 4|2014|p=855}}Reports are associated with report files, which are files which may only be written to through report writer statements.
FD report-out REPORT sales-report.
Each report is defined in the report section of the data division. A report is split into report groups which define the report's headings, footings and details. Reports work around hierarchical {{dfn|control breaks}}. Control breaks occur when a key variable changes it value; for example, when creating a report detailing customers' orders, a control break could occur when the program reaches a different customer's orders. Here is an example report description for a report which gives a salesperson's sales and which warns of any invalid records:
RD sales-report
PAGE LIMITS 60 LINES
FIRST DETAIL 3
CONTROLS seller-name.


01 TYPE PAGE HEADING.
03 COL 1 VALUE "Sales Report".
03 COL 74 VALUE "Page".
03 COL 79 PIC Z9 SOURCE PAGE-COUNTER.


01 sales-on-day TYPE DETAIL, LINE + 1.
03 COL 3 VALUE "Sales on".
03 COL 12 PIC 99/99/9999 SOURCE sales-date.
03 COL 21 VALUE "were".
03 COL 26 PIC $$$$9.99 SOURCE sales-amount.


01 invalid-sales TYPE DETAIL, LINE + 1.
03 COL 3 VALUE "INVALID RECORD:".
03 COL 19 PIC X(34) SOURCE sales-record.


01 TYPE CONTROL HEADING seller-name, LINE + 2.
03 COL 1 VALUE "Seller:".
03 COL 9 PIC X(30) SOURCE seller-name.
The above report description describes the following layout:Sales Report Page 1Seller: Howard Bromberg
Sales on 10/12/2008 were $1000.00
Sales on 12/12/2008 were $0.00
Sales on 13/12/2008 were $31.47
INVALID RECORD: Howard Bromberg XXXXYY
Seller: Howard Discount...Sales Report Page 12
Sales on 08/05/2014 were $543.98
INVALID RECORD: William Selden 12O52014FOOFOO
Sales on 30/05/2014 were $0.00
Four statements control the report writer: {{code|INITIATE}}, which prepares the report writer for printing; {{code|GENERATE}}, which prints a report group; {{code|SUPPRESS}}, which suppresses the printing of a report group; and {{code|TERMINATE}}, which terminates report processing. For the above sales report example, the procedure division might look like this:
OPEN INPUT sales, OUTPUT report-out
INITIATE sales-report

PERFORM UNTIL 1 1
READ sales
AT END
EXIT PERFORM
END-READ

VALIDATE sales-record
IF valid-record
GENERATE sales-on-day
ELSE
GENERATE invalid-sales
END-IF
END-PERFORM

TERMINATE sales-report
CLOSE sales, report-out
.

Procedure division

Procedures

The sections and paragraphs in the procedure division (collectively called procedures) can be used as labels and as simple subroutines. Unlike in other divisions, paragraphs do not need to be in sections.{{sfn|ISO/IEC JTC 1/SC 22/WG 4|2014|loc=§ 14.4}}Execution goes down through the procedures of a program until it is terminated.{{sfn|ISO/IEC JTC 1/SC 22/WG 4|2014|loc=§ 14.6.3}}To use procedures as subroutines, the {{code|PERFORM}} verb is used.A {{code|PERFORM}} statement somewhat resembles a procedure call in a modern language in the sense that execution returns to the code following the {{code|PERFORM}} statement at the end of the called code; however, it does not provide any mechanism for parameter passing or for returning a result value. If a subroutine is invoked using a simple statement like {{code|PERFORM subroutine|lang=cobolfree}}, then control returns at the end of the called procedure. However, {{code|PERFORM}} is unusual in that it may be used to call a range spanning a sequence of several adjacent procedures. This is done with the {{code|PERFORM sub-1 THRU sub-n|lang=cobolfree}} construct:PROCEDURE so-and-so.
PERFORM ALPHA
PERFORM ALPHA THRU GAMMA
STOP RUN.
ALPHA.
DISPLAY 'A'.
BETA.
DISPLAY 'B'.
GAMMA.
DISPLAY 'C'.
The output of this program will be: "A A B C".{{code|PERFORM}} also differs from conventional procedure calls in that there is, at least traditionally, no notion of a call stack. As a consequence, nested invocations are possible (a sequence of code being {{code|PERFORM}}'ed may execute a {{code|PERFORM}} statement itself), but require extra care if parts of the same code are executed by both invocations. The problem arises when the code in the inner invocation reaches the exit point of the outer invocation. More formally, if control passes through the exit point of a {{code|PERFORM}} invocation that was called earlier but has not completed yet, the COBOL 2002 standard officially stipulates that the behaviour is undefined.The reason is that COBOL, rather than a "return address", operates with what may be called a continuation address. When control flow reaches the end of any procedure, the continuation address is looked up and control is transferred to that address. Before the program runs, the continuation address for every procedure is initialised to the start address of the procedure that comes next in the program text so that, if no {{code|PERFORM}} statements happen, control flows from top to bottom through the program. But when a {{code|PERFORM}} statement executes, it modifies the continuation address of the called procedure (or the last procedure of the called range, if {{code|PERFORM THRU}} was used), so that control will return to the call site at the end. The original value is saved and is restored afterwards, but there is only one storage position. If two nested invocations operate on overlapping code, they may interfere which each other's management of the continuation address in several ways.CONFERENCE,weblink Identifying Procedural Structure in Cobol Programs, 10.1145/381788.316163, John, Field, G., Ramalingam, PDF, PASTE '99, 1581131372,weblink September 1999, JOURNAL,weblink Cobol minefield detection, Software—Practice and Experience, November 2006, 36, 14, 10.1002/spe.v36:14,weblink" title="web.archive.org/web/20070306135410weblink">weblink yes, 6 March 2007, Veerman, Niels, Verhoeven, Ernst-Jan, The following example (taken from Veerman/Verhoeven, 2006) illustrates the problem:LABEL1.
DISPLAY '1'
PERFORM LABEL2 THRU LABEL3
STOP RUN.
LABEL2.
DISPLAY '2'
PERFORM LABEL3 THRU LABEL4.
LABEL3.
DISPLAY '3'.
LABEL4.
DISPLAY '4'.
One might expect that the output of this program would be "1 2 3 4 3": After displaying "2", the second {{code|PERFORM}} causes "3" and "4" to be displayed, and then the first invocation continues on with "3". In traditional COBOL implementations, this is not the case. Rather, the first {{code|PERFORM}} statement sets the continuation address at the end of {{code|LABEL3}} so that it will jump back to the call site inside {{code|LABEL1}}. The second {{code|PERFORM}} statement sets the return at the end of {{code|LABEL4}} but does not modify the continuation address of {{code|LABEL3}}, expecting it to be the default continuation. Thus, when the inner invocation arrives at the end of {{code|LABEL3}}, it jumps back to the outer {{code|PERFORM}} statement, and the program stops having printed just "1 2 3". On the other hand, in some COBOL implementations like the open-source TinyCOBOL compiler, the two {{code|PERFORM}} statements do not interfere with each other and the output is indeed "1 2 3 4 3". Therefore the behaviour in such cases is not only (perhaps) surprising, it is also not portable.A special consequence of this limitation is that {{code|PERFORM}} cannot be used to write recursive code. Another simple example to illustrate this (slightly simplified from Veerman/Verhoeven, 2006):
MOVE 1 TO A
PERFORM LABEL
STOP RUN.
LABEL.
DISPLAY A
IF A < 3
ADD 1 TO A
PERFORM LABEL
END-IF
DISPLAY 'END'.
One might expect that the output is "1 2 3 END END END", and in fact that is what some COBOL compilers will produce. But some compilers, like IBM COBOL, will produce code that prints "1 2 3 END END END END ..." and so on, printing "END" over and over in an endless loop. Since there is limited space to store backup continuation addresses, the backups get overwritten in the course of recursive invocations, and all that can be restored is the jump back to {{code|DISPLAY 'END'}}.

Statements

COBOL 2014 has 47 statements (also called {{dfn|verbs}}),{{sfn|ISO/IEC JTC 1/SC 22/WG4|2014|loc=§ 14.9}} which can be grouped into the following broad categories: control flow, I/O, data manipulation and the report writer. The report writer statements are covered in the report writer section.

Control flow

COBOL's conditional statements are {{code|IF}} and {{code|EVALUATE}}. {{code|EVALUATE}} is a switch-like statement with the added capability of evaluating multiple values and conditions. This can be used to implement decision tables. For example, the following might be used to control a CNC lathe: EVALUATE TRUE ALSO desired-speed ALSO current-speed
WHEN lid-closed ALSO min-speed THRU max-speed ALSO LESS THAN desired-speed
PERFORM speed-up-machine
WHEN lid-closed ALSO min-speed THRU max-speed ALSO GREATER THAN desired-speed
PERFORM slow-down-machine
WHEN lid-open ALSO ANY ALSO NOT ZERO
PERFORM emergency-stop
WHEN OTHER
CONTINUE
END-EVALUATEThe {{code|PERFORM}} statement is used to define loops which are executed {{em|until}} a condition is true (not {{em|while}} true, which is more common in other languages). It is also used to call procedures or ranges of procedures (see the procedures section for more details). {{code|CALL}} and {{code|INVOKE}} call subprograms and methods, respectively. The name of the subprogram/method is contained in a string which may be a literal or a data item.{{sfn|ISO/IEC JTC 1/SC 22/WG 4|2014|loc=§§ 14.9.4, 14.9.22}} Parameters can be passed by reference, by content (where a copy is passed by reference) or by value (but only if a prototype is available).{{sfn|ISO/IEC JTC 1/SC 22/WG 4|2014|loc=§ D.6.5.2.2}}{{code|CANCEL}} unloads subprograms from memory. {{code|GO TO}} causes the program to jump to a specified procedure.The {{code|GOBACK}} statement is a return statement and the {{code|STOP}} statement stops the program. The {{code|EXIT}} statement has six different formats: it can be used as a return statement, a break statement, a continue statement, an end marker or to leave a procedure.{{sfn|ISO/IEC JTC 1/SC 22/WG 4|2014|loc=§ 14.9.13.1}}Exceptions are raised by a {{code|RAISE}} statement and caught with a handler, or {{dfn|declarative}}, defined in the {{code|DECLARATIVES}} portion of the procedure division. Declaratives are sections beginning with a {{code|USE}} statement which specify the errors to handle. Exceptions can be names or objects. {{code|RESUME}} is used in a declarative to jump to the statement after the one that raised the exception or to a procedure outside the {{code|DECLARATIVES}}. Unlike other languages, uncaught exceptions may not terminate the program and the program can proceed unaffected.

I/O

File I/O is handled by the self-describing {{code|OPEN}}, {{code|CLOSE}}, {{code|READ}}, and {{code|WRITE}} statements along with a further three: {{code|REWRITE}}, which updates a record; {{code|START}}, which selects subsequent records to access by finding a record with a certain key; and {{code|UNLOCK}}, which releases a lock on the last record accessed.User interaction is done using {{code|ACCEPT}} and {{code|DISPLAY}}.

Data manipulation

The following verbs manipulate data:
  • {{code|INITIALIZE}}, which sets data items to their default values.
  • {{code|MOVE}}, which assigns values to data items ; MOVE CORRESPONDING assigns corresponding like-named fields.
  • {{code|SET}}, which has 15 formats: it can modify indices, assign object references and alter table capacities, among other functions.{{sfn|ISO/IEC JTC 1/SC 22/WG 4|2014|loc=§14.9.35.1}}
  • {{code|ADD}}, {{code|SUBTRACT}}, {{code|MULTIPLY}}, {{code|DIVIDE}}, and {{code|COMPUTE}}, which handle arithmetic (with {{code|COMPUTE}} assigning the result of a formula to a variable).
  • {{code|ALLOCATE}} and {{code|FREE}}, which handle dynamic memory.
  • {{code|VALIDATE}}, which validates and distributes data as specified in an item's description in the data division.
  • {{code|STRING}} and {{code|UNSTRING}}, which concatenate and split strings, respectively.
  • {{code|INSPECT}}, which tallies or replaces instances of specified substrings within a string.
  • {{code|SEARCH}}, which searches a table for the first entry satisfying a condition.
Files and tables are sorted using {{code|SORT}} and the {{code|MERGE}} verb merges and sorts files. The {{code|RELEASE}} verb provides records to sort and {{code|RETURN}} retrieves sorted records in order.

Scope termination

Some statements, such as {{code|IF}} and {{code|READ}}, may themselves contain statements. Such statements may be terminated in two ways: by a period ({{dfn|implicit termination}}), which terminates all unterminated statements contained, or by a scope terminator, which terminates the nearest matching open statement.
  • > Terminator period ("implicit termination")
IF invalid-record
IF no-more-records
NEXT SENTENCE
ELSE
READ record-file
AT END SET no-more-records TO TRUE.
  • > Scope terminators ("explicit termination")
IF invalid-record
IF no-more-records
CONTINUE
ELSE
READ record-file
AT END SET no-more-records TO TRUE
END-READ
END-IF
END-IFNested statements terminated with a period are a common source of bugs.{{sfn|ISO/IEC JTC 1/SC 22/WG 4|2014|p=899}}{{sfn|McCracken|Golden|1988|loc=§ 8.4}} For example, examine the following code:IF x
DISPLAY y.
DISPLAY z.
Here, the intent is to display y and z if condition x is true. However, z will be displayed whatever the value of x because the IF statement is terminated by an erroneous period after {{code|DISPLAY y|lang=cobolfree}}.Another bug is a result of the dangling else problem, when two IF statements can associate with an ELSE.IF x
IF y
DISPLAY a
ELSE
DISPLAY b.
In the above fragment, the ELSE associates with the  {{code|IF y|lang=cobolfree}}  statement instead of the  {{code|IF x|lang=cobolfree}}  statement, causing a bug. Prior to the introduction of explicit scope terminators, preventing it would require  {{code|ELSE NEXT SENTENCE|lang=cobolfree}}  to be placed after the inner IF.{{sfn|McCracken|Golden|1988|loc=§ 8.4}}

Self-modifying code

The original (1959) COBOL specification supported the infamous  {{code|ALTER X TO PROCEED TO Y|lang=cobolfree}}  statement, for which many compilers generated self-modifying code. X and Y are procedure labels, and the single  {{code|GO TO|lang=cobolfree}}  statement in procedure X executed after such an {{code|ALTER}} statement means  {{code|GO TO Y|lang=cobolfree}}  instead. Many compilers still support it,Examples of compiler support for {{code|ALTER}} can be seen in the following:
  • WEB


, Tiffin
, Brian
, September 2014
,weblink
, GNU Cobol
, 18 September 2013
, 5 January 2014
,
  • WEB


,weblink
, The ALTER Statement
, Micro Focus
, Micro Focus Visual COBOL 2.2 for Visual Studio 2013 COBOL Language Reference
, 5 January 2014
,
  • WEB


,weblink
, ALTER Statement (Nucleus)
, Fujitsu
, COBOL85 Reference Manual
, November 1996
, 5 January 2014
, 555
,weblink" title="web.archive.org/web/20140106031540weblink">weblink
, 6 January 2014
, yes
,
,
  • WEB


,weblink
, ALTER Statement
, IBM
, Enterprise COBOL for z/OS Language Reference
, June 2013
, 5 January 2014
, but it was deemed obsolete in the COBOL 1985 standard and deleted in 2002.{{sfn|ISO/IEC JTC 1/SC 22/WG 4|2001|loc=§ F.1}}

Hello, World!

A "Hello, World!" program in COBOL:
IDENTIFICATION DIVISION.
PROGRAM-ID. hello-world.
PROCEDURE DIVISION.
DISPLAY "Hello, World!"
.
When the – now famous – "Hello, World!" program example in The C Programming Language was first published in 1978 a similar mainframe COBOL program sample would have been submitted through JCL, very likely using a punch card reader, and 80 column punch cards. The listing below, with an empty DATA DIVISION, was tested using GNU/Linux and the System/370 Hercules emulator running MVS 3.8J. The JCL, written in July 2015, is derived from the Hercules tutorials and samples hosted by Jay Moseley.WEB,weblink COBOL Compiler from MVT, 17 January 2015, 19 July 2015, Jay, Moseley, In keeping with COBOL programming of that era, HELLO, WORLD is displayed in all capital letters.//COBUCLG JOB (001),'COBOL BASE TEST', 00010000// CLASS=A,MSGCLASS=A,MSGLEVEL=(1,1) 00020000//BASETEST EXEC COBUCLG 00030000//COB.SYSIN DD * 00040000
00000* VALIDATION OF BASE COBOL INSTALL 00050000
01000 IDENTIFICATION DIVISION. 00060000
01100 PROGRAM-ID. 'HELLO'. 00070000
02000 ENVIRONMENT DIVISION. 00080000
02100 CONFIGURATION SECTION. 00090000
02110 SOURCE-COMPUTER. GNULINUX. 00100000
02120 OBJECT-COMPUTER. HERCULES. 00110000
02200 SPECIAL-NAMES. 00120000
02210 CONSOLE IS CONSL. 00130000
03000 DATA DIVISION. 00140000
04000 PROCEDURE DIVISION. 00150000
04100 00-MAIN. 00160000
04110 DISPLAY 'HELLO, WORLD' UPON CONSL. 00170000
04900 STOP RUN. 00180000
//LKED.SYSLIB DD DSNAME=SYS1.COBLIB,DISP=SHR 00190000// DD DSNAME=SYS1.LINKLIB,DISP=SHR 00200000//GO.SYSPRINT DD SYSOUT=A 00210000// 00220000After submitting the JCL, the MVS console displayed:
19.52.48 JOB 3 $HASP100 COBUCLG ON READER1 COBOL BASE TEST
19.52.48 JOB 3 IEF677I WARNING MESSAGE(S) FOR JOB COBUCLG ISSUED
19.52.48 JOB 3 $HASP373 COBUCLG STARTED - INIT 1 - CLASS A - SYS BSP1
19.52.48 JOB 3 IEC130I SYSPUNCH DD STATEMENT MISSING
19.52.48 JOB 3 IEC130I SYSLIB DD STATEMENT MISSING
19.52.48 JOB 3 IEC130I SYSPUNCH DD STATEMENT MISSING
19.52.48 JOB 3 IEFACTRT - Stepname Procstep Program Retcode
19.52.48 JOB 3 COBUCLG BASETEST COB IKFCBL00 RC= 0000
19.52.48 JOB 3 COBUCLG BASETEST LKED IEWL RC= 0000
19.52.48 JOB 3 +HELLO, WORLD
19.52.48 JOB 3 COBUCLG BASETEST GO PGM=*.DD RC= 0000
19.52.48 JOB 3 $HASP395 COBUCLG ENDED
Line 10 of the console listing above is highlighted for effect, the highlighting is not part of the actual console output.The associated compiler listing generated over four pages of technical detail and job run information, for the single line of output from the 14 lines of COBOL.

Criticism and defense

Lack of structure

In the 1970s, adoption of the structured programming paradigm was becoming increasingly widespread. Edsger Dijkstra, a preeminent computer scientist, wrote a letter to the editor of Communications of the ACM, published 1975 entitled "How do we tell truths that might hurt?", in which he was critical of COBOL and several other contemporary languages; remarking that "the use of COBOL cripples the mind".WEB,weblink How do we tell truths that might hurt?, 29 August 2007, University of Texas at Austin, 18 June 1975, Dijkstra, Edsger W., EWD498, In a published dissent to Dijkstra's remarks, the computer scientist Howard E. Tompkins claimed that unstructured COBOL tended to be "written by programmers that have never had the benefit of structured COBOL taught well", arguing that the issue was primarily one of training.JOURNAL, 10.1145/948176.948186, In defense of teaching structured COBOL as computer science, ACM SIGPLAN Notices, 18, 4, 86–94, 1983, Tompkins, H. E., One cause of spaghetti code was the {{code|GO TO}} statement. Attempts to remove {{code|GO TO}}s from COBOL code, however, resulted in convoluted programs and reduced code quality.{{sfn|Riehle|1992|p=125}} {{code|GO TO}}s were largely replaced by the {{code|PERFORM}} statement and procedures, which promoted modular programming{{sfn|Riehle|1992|p=125}} and gave easy access to powerful looping facilities. However, {{code|PERFORM}} could be used only with procedures so loop bodies were not located where they were used, making programs potentially harder to understand.{{sfn|Shneiderman|1985|pp=349–350}}COBOL programs were infamous for being monolithic and lacking modularization.BOOK,weblink Beginning COBOL for Programmers, Apress, 13 August 2014, 4, Michael, Coughlan, 978-1430262534, 16 March 2014, COBOL code could be modularized only through procedures, which were found to be inadequate for large systems. It was impossible to restrict access to data, meaning a procedure could access and modify {{em|any}} data item. Furthermore, there was no way to pass parameters to a procedure, an omission Jean Sammet regarded as the committee's biggest mistake.{{sfn|Sammet|1978b|p=258}}Another complication stemmed from the ability to {{code|PERFORM THRU}} a specified sequence of procedures. This meant that control could jump to and return from any procedure, creating convoluted control flow and permitting a programmer to break the single-entry single-exit rule.{{sfn|Riehle|1992|p=126}}This situation improved as COBOL adopted more features. COBOL-74 added subprograms, giving programmers the ability to control the data each part of the program could access. COBOL-85 then added nested subprograms, allowing programmers to hide subprograms.{{sfn|Riehle|1992|p=127}} Further control over data and code came in 2002 when object-oriented programming, user-defined functions and user-defined data types were included.Nevertheless, much important legacy COBOL software uses unstructured code, which has become unmaintainable. It can be too risky and costly to modify even a simple section of code, since it may be used from unknown places in unknown ways.WEB,weblink COBOL and Legacy Code as a Systemic Risk {{!, naked capitalism|date=19 July 2016|language=en-US|access-date=23 July 2016}}

Compatibility issues

COBOL was intended to be a highly portable, "common" language. However, by 2001, around 300 dialects had been created.JOURNAL,weblink Cracking the 500-language problem, IEEE Software, November–December 2001, 18, 6, 79, 10.1109/52.965809, Ralf, Lämmel, Chris, Verhoef, Chris Verhoef,weblink" title="web.archive.org/web/20140819085841weblink">weblink 19 August 2014, yes, One source of dialects was the standard itself: the 1974 standard was composed of one mandatory nucleus and eleven functional modules, each containing two or three levels of support. This permitted 104,976 official variants.JOURNAL,weblink Towards more portable COBOL, The Computer Journal, April 1979, 22, 4, 290, 10.1093/comjnl/22.4.290, T. J., Howkins, M. T., Harandi, COBOL-85 was not fully compatible with earlier versions, and its development was controversial. Joseph T. Brophy, the CIO of Travelers Insurance, spearheaded an effort to inform COBOL users of the heavy reprogramming costs of implementing the new standard.{{sfn|Garfunkel|1987|p=11}} As a result, the ANSI COBOL Committee received more than 2,200 letters from the public, mostly negative, requiring the committee to make changes. On the other hand, conversion to COBOL-85 was thought to increase productivity in future years, thus justifying the conversion costs.{{sfn|Garfunkel|1987|p=15}}

Verbose syntax

| align=right
| width=30%
| quoted=1
}}COBOL syntax has often been criticized for its verbosity. Proponents say that this was intended to make the code self-documenting, easing program maintenance.{{sfn|Brown|1976|p=53}} COBOL was also intended to be easy for programmers to learn and use,{{sfn|CODASYL|1969|loc=§ II.1.1}} while still being readable to non-technical staff such as managers.{{sfn|Shneiderman|1985|p=350}}{{sfn|Sammet|1961|p=381}}{{sfn|Conner|1984|p=ID/10}}{{sfn|Marcotty|1978|p=263}}The desire for readability led to the use of English-like syntax and structural elements, such as nouns, verbs, clauses, sentences, sections, and divisions. Yet by 1984, maintainers of COBOL programs were struggling to deal with "incomprehensible" code{{sfn|Conner|1984|p=ID/10}} and the main changes in COBOL-85 were there to help ease maintenance.Jean Sammet, a short-range committee member, noted that "little attempt was made to cater to the professional programmer, in fact people whose main interest is programming tend to be very unhappy with COBOL" which she attributed to COBOL's verbose syntax.{{sfn|Conner|1984|p=ID/14}}

Isolation from the computer science community

The COBOL community has always been isolated from the computer science community. No academic computer scientists participated in the design of COBOL: all of those on the committee came from commerce or government. Computer scientists at the time were more interested in fields like numerical analysis, physics and system programming than the commercial file-processing problems which COBOL development tackled.{{sfn|Sammet|1961|p=380}} Jean Sammet attributed COBOL's unpopularity to an initial "snob reaction" due to its inelegance, the lack of influential computer scientists participating in the design process and a disdain for business data processing.{{sfn|Marcotty|1978|p=266}} The COBOL specification used a unique "notation", or metalanguage, to define its syntax rather than the new Backus–Naur form which the committee did not know of. This resulted in "severe" criticism.{{sfn|Sammet|1978b|p=255}}{{sfn|Shneiderman|1985|pp=348–349}}{{sfn|Bemer|1971|p=133}}Later, COBOL suffered from a shortage of material covering it; it took until 1963 for introductory books to appear (with Richard D. Irwin publishing a college textbook on COBOL in 1966)weblink By 1985, there were twice as many books on Fortran and four times as many on BASIC as on COBOL in the Library of Congress.{{sfn|Shneiderman|1985|p=349}} University professors taught more modern, state-of-the-art languages and techniques instead of COBOL which was said to have a "trade school" nature.{{sfn|Shneiderman|1985|p=351}} Donald Nelson, chair of the CODASYL COBOL committee, said in 1984 that "academics ... hate COBOL" and that computer science graduates "had 'hate COBOL' drilled into them".WEB,weblink An interview: Cobol defender, Computerworld, 10 September 1984, 8 June 2014, ID/29–ID/32, 0010-4841, 18, 37, A 2013 poll by Micro Focus found that 20% of university academics thought COBOL was outdated or dead and that 55% believed their students thought COBOL was outdated or dead. The same poll also found that only 25% of academics had COBOL programming on their curriculum even though 60% thought they should teach it.PRESS RELEASE,weblink Academia needs more support to tackle the IT skills gap, Micro Focus, 7 March 2013, 4 August 2014, In contrast, in 2003, COBOL featured in 80% of information systems curricula in the United States, the same proportion as C++ and Java.{{sfn|Carr|Kizior|2003|p=13}}There was also significant condescension towards COBOL in the business community from users of other languages, for example FORTRAN or assembler, implying that COBOL could be used only for non-challenging problems.{{citation needed | date=March 2017}}

Concerns about the design process

Doubts have been raised about the competence of the standards committee. Short-term committee member Howard Bromberg said that there was "little control" over the development process and that it was "plagued by discontinuity of personnel and ... a lack of talent."{{sfn|Beyer|2009|p=301}} Jean Sammet and Jerome Garfunkel also noted that changes introduced in one revision of the standard would be reverted in the next, due as much to changes in who was in the standard committee as to objective evidence.JOURNAL, Summary of Changes in COBOL, 1960–1985, Annals of the History of Computing, October 1985, 7, 4, 342, Jean, Sammet, Jerome, Garfunkel, 10.1109/MAHC.1985.10033, COBOL standards have repeatedly suffered from delays: COBOL-85 arrived five years later than hoped,CONFERENCE,weblink Data Base Facility for COBOL 80, Margaret M., Cook, 1978 National Computer Conference, The earliest date that a new COBOL standard could be developed and approved is the year 1980 [...]., 1107–1112, AFIPS Press, June 1978, Anaheim, California, 55-44701, 10.1109/AFIPS.1978.63, 2 September 2014, PDF, Ghosh, Sakti P., Liu, Leonard Y., COBOL 2002 was five years late,and COBOL 2014 was six years late.WEB,weblink Resolutions from WG4 meeting 24 – June 26–28, 2003 Las Vegas, Nevada, USA, 11 July 2003, 29 June 2014, doc, a June 2008 revision of the COBOL standard, 1, yes,weblink" title="web.archive.org/web/20160308015945weblink">weblink 8 March 2016, To combat delays, the standard committee allowed the creation of optional addenda which would add features more quickly than by waiting for the next standard revision. However, some committee members raised concerns about incompatibilities between implementations and frequent modifications of the standard.JOURNAL,weblink Cobol standard add-ons flayed, Computerworld, 20, 28, 1, 12, Charles, Babcock, 14 July 1986,

Influences on other languages

COBOL's data structures influenced subsequent programming languages. Its record and file structure influenced PL/I and Pascal, and the REDEFINES clause was a predecessor to Pascal's variant records. Explicit file structure definitions preceded the development of database management systems and aggregated data was a significant advance over Fortran's arrays.{{sfn|Shneiderman|1985|p=349}}PICTURE data declarations were incorporated into PL/I, with minor changes.COBOL's {{code|COPY}} facility, although considered "primitive",CONFERENCE, Michael, Marcotty, Full text of all questions submitted, Wexelblat, Richard L., History of Programming Languages, 1978, Academic Press, 1981, 0127450408, 10.1145/800025.1198371, 274, influenced the development of include directives.{{sfn|Shneiderman|1985|p=349}}The focus on portability and standardization meant programs written in COBOL could be portable and facilitated the spread of the language to a wide variety of hardware platforms and operating systems.This can be seen in:
  • WEB,weblink Visual COBOL, IBM, IBM PartnerWorld, 21 August 2013, 5 February 2014, Micro Focus Visual COBOL delivers the next generation of COBOL development and deployment for Linux x86-64, Linux for System z, AIX, HP/UX, Solaris, and Windows.,weblink" title="web.archive.org/web/20140712183624weblink">weblink 12 July 2014, no,
  • WEB,weblink COBOL Compilers family, IBM, ibm.com, 5 February 2014,weblink 23 February 2014, no,
  • WEB,weblink What platforms are supported by GNU Cobol?, 4 January 2014, 5 February 2014, Tiffin, Brian,weblink" title="web.archive.org/web/20131214110557weblink">weblink 14 December 2013, yes, Additionally, the well-defined division structure restricts the definition of external references to the Environment Division, which simplifies platform changes in particular.WEB,weblink Introduction to COBOL, 2002, 3 February 2014, Coughlan, Michael,

See also

Notes

{{notelist}}

References

Citations

{{Reflist|30em}}

Sources

  • JOURNAL


, harv
,weblink
, A View of the History of COBOL
, Honeywell Computer Journal
, 28 June 2014
, 5
, 3
, 1971
, Bob
, Bemer
, Bob Bemer
,weblink" title="web.archive.org/web/20160122164500weblink">weblink
, 22 January 2016
, yes
,
  • BOOK


, harv
,weblink
, Grace Hopper and the Invention of the Information Age
, MIT Press
, 2009
, 978-0262013109
, Kurt
, Beyer
, 2008044229
,
  • BOOK


, harv
,weblink
, Encyclopedia of Computer Science and Technology: Volume 5
, CRC Press
, 978-0824722555
, 1 December 1976
, COBOL
, William R.
, Brown
, Jack
, Belzer
, Albert G.
, Holzman
, Allen
, Kent
,
  • JOURNAL


, harv
,weblink
, Continued Relevance of COBOL in Business and Academia: Current Situation and Comparison to the Year 2000 Study
, 31 December 2003
, 4 August 2014
, Carr
, Donald E.
, Kizior
, Ronald J.
, Information Systems Education Journal
, 1
, 52
, 1545-679X
,
  • JOURNAL


, harv
,weblink
, CODASYL COBOL Journal of Development 1968, July 1969
, 73601243
, CODASYL
, CODASYL
, National Bureau of Standards
, 0591-0218
,
  • JOURNAL


, harv
,weblink
, Cobol, your age is showing
, Computerworld
, 18
, 20
, ID/7–ID/18
, Richard L.
, Conner
, 14 May 1984
, 0010-4841
,
  • WEB


, harv
,weblink
, GNU COBOL Programmer's Guide
, 9 April 2014
, 25 February 2014
, Cutler
, Gary
, 3rd
,
  • BOOK


, harv
, The COBOL 85 Example Book
, Jerome
, Garfunkel
, John Wiley & Sons, Wiley
, 1987
, 978-0471804611
,
  • WEB


, harv
,weblink
, ISO/IEC IS 1989:2001 – Programming language COBOL
, ISO/IEC JTC 1/SC 22/WG 4
, ISO/IEC JTC 1/SC 22
, ISO
, 4 December 2001
, 2 September 2014
,weblink" title="web.archive.org/web/20020124065139weblink">weblink
, 24 January 2002
, yes
, ZIP of PDF
,
  • BOOK


, harv
, INCITS/ISO/IEC 1989:2014 [2014] – Programming language COBOL
, ISO/IEC JTC 1/SC 22/WG 4
, INCITS
, 31 October 2014
,
  • WEB


, harv
,weblink
, The History of COBOL
, 4 October 2010
, 7 January 2014
, Klein
, William M.
,weblink" title="web.archive.org/web/20140107192608weblink">weblink
, 7 January 2014
, yes
,
  • CONFERENCE


, harv
, Michael
, Marcotty
, 263
, Transcript of question and answer session
, Wexelblat
, Richard L.
, History of Programming Languages
, 1978
, Academic Press
, 1981
, 0127450408
, 10.1145/800025.1198370
,
  • BOOK


, harv
, A Simplified Guide to Structured COBOL Programming
, Wiley
, 1988
, 978-0471610540
, Daniel D.
, McCracken
, Donald G.
, Golden
, 2nd
, 87034608
, Daniel D. McCracken
,
  • JOURNAL


, harv
, PERFORM considered harmful
, Communications of the ACM
, August 1992
, 10.1145/135226.376106
, 35
, 8
, 125–128
, Richard L.
, Riehle
,
  • CONFERENCE


, harv
, A method of combining ALGOL and COBOL
, Jean E.
, Sammet
, Jean E. Sammet
, May 1961
, Papers presented at the 9–11 May 1961, western joint IRE–AIEE–ACM computer conference
, 10.1145/1460690.1460734
, 379–387
, Association for Computing Machinery, ACM
,
  • CONFERENCE


, harv
, Jean E.
, Sammet
, The early history of COBOL
, Wexelblat
, Richard L.
, History of Programming Languages
, 1978a
, Academic Press
, 1981
, 0127450408
, 10.1145/800025.1198367
,
  • CONFERENCE


, harv
, Jean E.
, Sammet
, Transcript of presentation
, Wexelblat
, Richard L.
, History of Programming Languages
, 1978b
, Academic Press
, 1981
, 0127450408
, 10.1145/800025.1198368
,
  • BOOK


, harv
,weblink
, Concise Encyclopedia of Computer Science
, Wiley
, Jean E.
, Sammet
, 249810423
, 978-0470090954
, Edwin D.
, Reilly
, 23 July 2004
, COBOL
,
  • JOURNAL


, harv
, The Relationship Between COBOL and Computer Science
, Annals of the History of Computing, October 1985
, 7
, 4
, 348–352
, B.
, Shneiderman
, 10.1109/MAHC.1985.10041
,

External links

{{sisterlinks|d=Q131140|n=no|voy=no|s=no|q=no|m=no|mw=no|species=no|commons=Category:COBOL}}
  • {{Curlie|Computers/Programming/Languages/Cobol/}}
{{Major programming languages}}{{ISO standards}}{{Authority control}}

- content above as imported from Wikipedia
- "COBOL" does not exist on GetWiki (yet)
- time: 11:24pm EDT - Tue, Aug 20 2019
[ this remote article is provided by Wikipedia ]
LATEST EDITS [ see all ]
GETWIKI 09 JUL 2019
Eastern Philosophy
History of Philosophy
GETWIKI 09 MAY 2016
GETWIKI 18 OCT 2015
M.R.M. Parrott
Biographies
GETWIKI 20 AUG 2014
GETWIKI 19 AUG 2014
CONNECT