stringtranslate.com

КОБОЛ

COBOL ( / ˈ k b ɒ l , - b ɔː l / ; аббревиатура от «common business-oriented language») — это компилируемый англоподобный язык программирования, разработанный для использования в бизнесе. Это императивный , процедурный , и с 2002 года объектно-ориентированный язык. COBOL в основном используется в деловых, финансовых и административных системах для компаний и правительств. COBOL по-прежнему широко используется в приложениях, развернутых на мэйнфреймах , таких как крупномасштабные пакетные и транзакционные задания по обработке. Многие крупные финансовые учреждения разрабатывали новые системы на этом языке еще в 2006 году, [10] но большая часть программирования на COBOL сегодня заключается исключительно в поддержке существующих приложений. Программы переносятся на новые платформы, переписываются на современных языках или заменяются другим программным обеспечением. [11]

COBOL был разработан в 1959 году CODASYL и частично основан на языке программирования FLOW-MATIC , разработанном Грейс Хоппер . Он был создан в рамках усилий Министерства обороны США по созданию переносимого языка программирования для обработки данных. Первоначально он рассматривался как временная мера, но Министерство обороны быстро оказало давление на производителей компьютеров, чтобы они предоставили его, что привело к его широкому принятию. [12] Он был стандартизирован в 1968 году и пересматривался пять раз. Расширения включают поддержку структурированного и объектно-ориентированного программирования . Текущий стандарт — ISO / IEC  1989:2023. [13]

Операторы COBOL имеют прозаический синтаксис, такой как , который был разработан для самодокументирования и высокой читаемости. Однако он многословен и использует более 300 зарезервированных слов по сравнению с лаконичным и математически вдохновленным синтаксисом других языков.MOVE x TO y

Код COBOL разделен на четыре раздела (идентификация, среда, данные и процедура), содержащие жесткую иерархию разделов, параграфов и предложений. Не имея большой стандартной библиотеки , стандарт определяет 43 оператора, 87 функций и всего один класс.

Ученые-компьютерщики, как правило, не интересовались бизнес-приложениями, когда создавался COBOL, и не участвовали в его разработке; он был (фактически) разработан с нуля как компьютерный язык для бизнеса с упором на входы и выходы, единственными типами данных которых были числа и строки текста. [14]

COBOL критиковали за его многословность, процесс проектирования и плохую поддержку структурного программирования . Эти недостатки приводят к монолитным программам, которые трудно понять в целом, несмотря на их локальную читаемость.

В течение многих лет COBOL считался языком программирования для бизнес-операций на мэйнфреймах [15] , хотя в последние годы многие операции COBOL были перенесены в облачные вычисления . [16]

История и характеристики

Фон

В конце 1950-х годов пользователи и производители компьютеров стали беспокоиться о росте стоимости программирования. Исследование 1959 года показало, что в любой установке обработки данных программирование обходится в среднем в 800 000 долларов США, а перевод программ для работы на новом оборудовании обойдется в 600 000 долларов США. В то время, когда появлялись новые языки программирования , то же исследование предполагало, что если бы использовался общий бизнес-ориентированный язык, преобразование было бы намного дешевле и быстрее. [17]

8 апреля 1959 года Мэри К. Хоуз , специалист по компьютерам из Burroughs Corporation , созвала встречу представителей академических кругов, пользователей компьютеров и производителей в Университете Пенсильвании, чтобы организовать официальную встречу по общим деловым языкам. [18] Среди представителей были Грейс Хоппер (изобретатель англоподобного языка обработки данных FLOW-MATIC ), Джин Саммет и Сол Горн . [19] [20]

На апрельской встрече группа обратилась к Министерству обороны (DoD) с просьбой спонсировать усилия по созданию общего делового языка. Делегация произвела впечатление на Чарльза А. Филлипса, директора исследовательского персонала систем данных в DoD, [21] который считал, что они «полностью понимают» проблемы DoD. DoD эксплуатировало 225 компьютеров, заказало еще 175 и потратило более 200 миллионов долларов на внедрение программ для работы на них. Переносимые программы сэкономили бы время, сократили бы расходы и облегчили бы модернизацию. [22]

Чарльз Филлипс согласился спонсировать встречу и поручил делегации подготовить повестку дня. [23]

КОБОЛ 60

28 и 29 мая 1959 года (ровно через год после встречи ALGOL 58 в Цюрихе) в Пентагоне прошла встреча, на которой обсуждалось создание общего языка программирования для бизнеса. На ней присутствовало 41 человек, а председательствовал на ней Филлипс. [24] Министерство обороны беспокоилось о том, сможет ли оно запускать одни и те же программы обработки данных на разных компьютерах. FORTRAN , единственный основной язык в то время, не обладал функциями, необходимыми для написания таких программ. [25]

Представители с энтузиазмом описали язык, который мог бы работать в самых разных средах, от банковского дела и страхования до коммунальных услуг и управления запасами. Они единогласно согласились, что больше людей должны иметь возможность программировать и что новый язык не должен быть ограничен ограничениями современных технологий. Большинство согласилось, что язык должен максимально использовать английский язык, быть способным к изменениям, быть машинно-независимым и простым в использовании, даже за счет мощности. [26]

В результате встречи был создан руководящий комитет , а также краткосрочный, промежуточный и долгосрочный комитеты. Краткосрочному комитету было дано время до сентября (три месяца) для разработки спецификаций для промежуточного языка, который затем будет улучшен другими комитетами. [27] [28] Однако их официальной миссией было выявление сильных и слабых сторон существующих языков программирования; в нем не было явного указания им создать новый язык. [25]

Крайний срок был встречен с недоверием комитетом по краткосрочным мерам. [29] Один из членов, Бетти Холбертон , охарактеризовал трехмесячный срок как «грубый оптимизм» и усомнился в том, что формулировка действительно станет временной мерой. [30]

Руководящий комитет собрался 4 июня и согласился назвать всю деятельность Комитетом по языкам систем данных , или CODASYL , и сформировать исполнительный комитет. [31]

Члены комитета краткосрочного действия представляли шесть производителей компьютеров и три государственных учреждения. Производителями компьютеров были Burroughs Corporation , IBM , Minneapolis-Honeywell (Honeywell Labs), RCA , Sperry Rand и Sylvania Electric Products . Государственными учреждениями были ВВС США , David Taylor Model Basin ВМС и Национальное бюро стандартов (ныне Национальный институт стандартов и технологий). [32] Комитет возглавлял Джозеф Вегштейн из Национального бюро стандартов США. Работа началась с изучения описаний данных, заявлений, существующих приложений и пользовательского опыта. [33]

Комитет в основном рассматривал языки программирования FLOW-MATIC , AIMACO и COMTRAN . [25] [34] Язык FLOW-MATIC был особенно влиятельным, поскольку он был реализован, и поскольку AIMACO был его производным с небольшими изменениями. [35] [36] Изобретатель FLOW-MATIC, Грейс Хоппер, также была техническим консультантом комитета. [29] Основным вкладом FLOW-MATIC в COBOL были длинные имена переменных, английские слова для команд и разделение описаний данных и инструкций. [37]

Хоппер иногда называют «матерью COBOL» или «бабушкой COBOL» [38] [39] [40], хотя Жан Саммет , ведущий разработчик COBOL, сказал, что Хоппер «не была матерью, создателем или разработчиком COBOL». [41] [1]

Язык COMTRAN компании IBM, изобретенный Бобом Бемером , рассматривался в качестве конкурента FLOW-MATIC [42] [43] краткосрочным комитетом, состоящим из коллег Грейс Хоппер. [44] Некоторые из его функций не были включены в COBOL, чтобы не создавалось впечатление, что IBM доминировала в процессе проектирования, [27] и Джин Саммет сказала в 1981 году, что существовала «сильная анти-IBM предвзятость» со стороны некоторых членов комитета (включая ее саму). [45] В одном случае, после того как Рой Голдфингер, автор руководства COMTRAN и член комитета среднего уровня, посетил заседание подкомитета, чтобы поддержать свой язык и поощрить использование алгебраических выражений, Грейс Хоппер отправила меморандум в краткосрочный комитет, повторив усилия Сперри Рэнда по созданию языка на основе английского языка. [46]

В 1980 году Грейс Хоппер прокомментировала, что «COBOL 60 на 95% состоит из FLOW-MATIC» и что COMTRAN оказал «крайне незначительное» влияние. Более того, она сказала, что утверждала, что работа была под влиянием как FLOW-MATIC, так и COMTRAN только для того, чтобы «успокаивать других людей, [чтобы они] не пытались нас выбить». [47]

Функции из COMTRAN, включенные в COBOL, включали формулы, [48] предложение PICTURE, [49] улучшенный IFоператор, который устранил необходимость в GO TO , и более надежную систему управления файлами. [42]

Полезность работы комитета стала предметом больших дебатов. В то время как некоторые члены считали, что язык имел слишком много компромиссов и был результатом разработки комитета , другие считали, что он лучше, чем три рассмотренных языка. Некоторые считали, что язык был слишком сложным; другие, что слишком простым. [50]

Спорные функции включали те, которые некоторые считали бесполезными или слишком продвинутыми для пользователей обработки данных. Такие функции включали булевы выражения , формулы и табличные индексы (индексы). [51] [52] Другим спорным моментом было то, следует ли делать ключевые слова контекстно-зависимыми и как это повлияет на читаемость. [51] Хотя контекстно-зависимые ключевые слова были отклонены, этот подход позже использовался в PL/I и частично в COBOL с 2002 года. [53] Мало внимания уделялось интерактивности , взаимодействию с операционными системами (в то время их было мало) и функциям (считавшимся чисто математическими и бесполезными для обработки данных). [54] [55]

Спецификации были представлены исполнительному комитету 4 сентября. Они не оправдали ожиданий: Джозеф Вегштейн отметил, что «они содержат шероховатости и требуют некоторых дополнений», а Боб Бемер позже охарактеризовал их как «мешанину». Комитету дали срок до декабря, чтобы улучшить их. [29]

На встрече в середине сентября комитет обсудил название нового языка. Среди предложений были «BUSY» (Business System), «INFOSYL» (Information System Language) и «COCOSYL» (Common Computer Systems Language). [56] Неясно, кто придумал название «COBOL», [57] [58] хотя Боб Бемер позже утверждал, что это было его предложение. [59] [60] [61]

В октябре комитет промежуточного уровня получил копии спецификации языка FACT , созданной Роем Наттом . Его особенности произвели на комитет такое впечатление, что они приняли резолюцию о создании COBOL на его основе. [62]

Это был удар по комитету краткосрочного действия, который добился значительного прогресса в спецификации. Несмотря на техническое превосходство, FACT не был создан с учетом переносимости или консенсуса производителя и пользователя. Он также не имел наглядной реализации, [29] что позволило сторонникам COBOL на основе FLOW-MATIC отменить резолюцию. Представитель RCA Говард Бромберг также заблокировал FACT, чтобы работа RCA над реализацией COBOL не пропала даром. [63]

Вскоре стало очевидно, что комитет был слишком большим, чтобы быстро добиться дальнейшего прогресса. Разочарованный Говард Бромберг купил надгробный камень за 15 долларов с выгравированным на нем «COBOL» и отправил его Чарльзу Филлипсу, чтобы продемонстрировать свое недовольство. [b] [65] [66]

Для анализа существующих языков была сформирована подкомиссия, в состав которой вошли шесть человек: [25] [67]

Подкомитет выполнил большую часть работы по созданию спецификации, предоставив краткосрочному комитету возможность просмотреть и изменить свою работу перед выпуском готовой спецификации. [25]

Спецификации были одобрены исполнительным комитетом 8 января 1960 года и отправлены в правительственную типографию, которая напечатала их как COBOL 60. Заявленными целями языка были обеспечение возможности легкого написания эффективных, переносимых программ, предоставление пользователям возможности перехода на новые системы с минимальными усилиями и затратами, а также пригодность для неопытных программистов. [68]

Исполнительный комитет CODASYL позднее создал Комитет по обслуживанию COBOL для ответа на вопросы пользователей и поставщиков, а также для улучшения и расширения спецификаций. [69]

В течение 1960 года список производителей, планирующих создать компиляторы COBOL, вырос. К сентябрю к CODASYL присоединились еще пять производителей ( Bendix , Control Data Corporation , General Electric (GE), National Cash Register и Philco ), и все представленные производители объявили о создании компиляторов COBOL. GE и IBM планировали интегрировать COBOL в свои собственные языки, GECOM и COMTRAN соответственно. Напротив, International Computers и Tabulators планировали заменить свой язык CODEL на COBOL. [70]

Тем временем RCA и Sperry Rand работали над созданием компиляторов COBOL. Первая программа COBOL была запущена 17 августа на RCA 501. [71] 6 и 7 декабря та же программа COBOL (хотя и с небольшими изменениями) была запущена на компьютерах RCA и Remington-Rand Univac , что показало, что совместимость может быть достигнута. [72]

Относительное влияние используемых языков по-прежнему указывается в рекомендациях, напечатанных во всех справочных руководствах по COBOL:

COBOL является отраслевым языком и не является собственностью какой-либо компании или группы компаний, или какой-либо организации или группы организаций.

Никакие гарантии, выраженные или подразумеваемые, не предоставляются ни одним из участников или Комитетом CODASYL COBOL относительно точности и функционирования системы программирования и языка. Более того, ни один из участников или Комитет не несет ответственности в связи с этим. Авторами и владельцами авторских прав на материалы, защищенные авторским правом, используемые здесь, являются следующие:

FLOW-MATIC (торговая марка Unisys Corporation ), Программирование для UNIVAC (R) I и II, Системы автоматизации данных, защищено авторским правом 1958, 1959, Unisys Corporation; Форма коммерческого переводчика IBM № F28-8013, защищено авторским правом 1959 IBM; FACT, DSI 27A5260-2760, защищено авторским правом 1960 Minneapolis-Honeywell.

Они специально разрешили использовать этот материал, полностью или частично, в спецификациях COBOL. Такое разрешение распространяется на воспроизведение и использование спецификаций COBOL в руководствах по программированию или аналогичных публикациях. [73]

COBOL-61 в COBOL-65

Маловероятно, что Cobol появится к концу десятилетия.

Аноним, июнь 1960 г. [74]

В COBOL 60 было обнаружено множество логических недостатков , что заставило Чарльза Каца из General Electric предупредить, что его нельзя интерпретировать однозначно. Неохотный краткосрочный комитет провел полную очистку, и к марту 1963 года было сообщено, что синтаксис COBOL был столь же определяемым, как и ALGOL , хотя семантические неоднозначности оставались. [70]

COBOL — сложный язык для написания компилятора из-за большого синтаксиса и множества необязательных элементов в синтаксических конструкциях, а также необходимости генерировать эффективный код для языка со многими возможными представлениями данных, неявными преобразованиями типов и необходимыми настройками для операций ввода-вывода. [75] Ранние компиляторы COBOL были примитивными и медленными. Оценка ВМС США 1962 года показала скорость компиляции 3–11 операторов в минуту. К середине 1964 года она увеличилась до 11–1000 операторов в минуту. Было отмечено, что увеличение памяти радикально увеличит скорость, а затраты на компиляцию сильно различаются: затраты на оператор составляли от 0,23 до 18,91 доллара США. [76]

В конце 1962 года IBM объявила, что COBOL станет ее основным языком разработки и что разработка COMTRAN будет прекращена. [76]

Спецификация COBOL пересматривалась три раза в течение пяти лет после ее публикации. COBOL-60 был заменен в 1961 году на COBOL-61. Затем он был заменен расширенными спецификациями COBOL-61 в 1963 году, которые представили возможности сортировки и создания отчетов. [77] Добавленные возможности исправили недостатки, выявленные Honeywell в конце 1959 года в письме комитету по краткосрочным исследованиям. [71] Издание COBOL 1965 года внесло дополнительные разъяснения в спецификации и представило возможности для обработки файлов и таблиц массового хранения . [78]

КОБОЛ-68

Начались попытки стандартизировать COBOL для преодоления несовместимости между версиями. В конце 1962 года ISO и Институт стандартов Соединенных Штатов Америки (теперь ANSI ) сформировали группы для создания стандартов. ANSI выпустил стандарт США COBOL X3.23 в августе 1968 года, который стал краеугольным камнем для более поздних версий. [79] Эта версия была известна как Американский национальный стандарт (ANS) COBOL и была принята ISO в 1972 году. [80]

КОБОЛ-74

К 1970 году COBOL стал самым широко используемым языком программирования в мире. [81]

Независимо от комитета ANSI, Комитет по программированию языка CODASYL работал над улучшением языка. Они описали новые версии в 1968, 1969, 1970 и 1973 годах, включая такие изменения, как новые возможности межпрограммной коммуникации, отладки и слияния файлов, а также улучшенную обработку строк и функции включения библиотек . [82]

Хотя CODASYL не зависел от комитета ANSI, журнал CODASYL Journal of Development использовался ANSI для выявления функций, которые были достаточно популярны, чтобы оправдать внедрение. [83] Комитет по языку программирования также сотрудничал с ECMA и японским комитетом по стандарту COBOL. [82]

Однако Комитет по языку программирования не был широко известен. Вице-президент Уильям Райнхалс жаловался, что две трети сообщества COBOL не знали о существовании комитета. У него также не было средств, чтобы сделать общедоступными публичные документы, такие как протоколы собраний и предложения по изменениям. [84]

В 1974 году ANSI опубликовал пересмотренную версию (ANS) COBOL, содержащую новые функции, такие как организация файлов, DELETEоператор [85] и модуль сегментации . [86] Удаленные функции включали NOTEоператор, EXAMINEоператор (который был заменен на INSPECT), и определяемый разработчиком модуль произвольного доступа (который был заменен новыми последовательными и относительными модулями ввода-вывода). Они составили 44 изменения, которые сделали существующие операторы несовместимыми с новым стандартом. [87] Планировалось, что составитель отчетов будет удален из COBOL, но был восстановлен до публикации стандарта. [88] [89] Позднее ISO приняла обновленный стандарт в 1978 году. [80]

КОБОЛ-85

В июне 1978 года началась работа по пересмотру COBOL-74. Предложенный стандарт (обычно называемый COBOL-80) существенно отличался от предыдущего, вызывая опасения по поводу несовместимости и стоимости преобразования. В январе 1981 года Джозеф Т. Брофи, старший вице-президент Travelers Insurance, пригрозил подать в суд на комитет по стандарту, поскольку он не был совместим снизу вверх с COBOL-74. Г-н Брофи описал предыдущие преобразования их 40-миллионной кодовой базы как «непродуктивные» и «полную трату наших программистских ресурсов». [90] Позже в том же году Ассоциация управления обработкой данных (DPMA) заявила, что она «решительно выступает против» нового стандарта, ссылаясь на «непомерно высокие» затраты на преобразование и усовершенствования, которые были «навязаны пользователю». [91] [92]

В течение первого периода публичного обзора комитет получил 2200 ответов, из которых 1700 были отрицательными письмами. [93] Другие ответы представляли собой подробный анализ того, как COBOL-80 повлияет на их системы; прогнозировалось, что затраты на преобразование составят не менее 50 центов за строку кода. Менее дюжины ответов высказались в пользу предлагаемого стандарта. [94]

В 1979 году по инициативе Вима Эббинкхёйсена ISO TC97-SC5 создал международную группу экспертов COBOL . Группа состояла из экспертов COBOL из многих стран, включая США. Ее целью было достижение взаимопонимания и уважения между ANSI и остальным миром в отношении потребности в новых функциях COBOL. Через три года ISO изменила статус группы на официальную рабочую группу: WG 4 COBOL . Группа взяла на себя основную ответственность за разработку стандарта COBOL, где ANSI внесла большинство предложений.

В 1983 году DPMA сняло свое возражение против стандарта, сославшись на отзывчивость комитета к общественным проблемам. В том же году исследование Национального бюро стандартов пришло к выводу, что предлагаемый стандарт не вызовет особых проблем. [92] [95] Год спустя DEC выпустила VAX/VMS COBOL-80 и отметила, что преобразование программ COBOL-74 вызвало мало проблем. Новый EVALUATEоператор и встроенный код PERFORMбыли особенно хорошо приняты и повысили производительность благодаря упрощенному потоку управления и отладке . [96]

Второй публичный обзор собрал еще 1000 (в основном отрицательных) откликов, тогда как последний собрал всего 25, и к тому времени многие опасения были устранены. [92]

В 1985 году рабочая группа ISO 4 приняла тогдашнюю версию стандарта, предложенного ANSI, внесла несколько изменений и утвердила его в качестве нового стандарта ISO COBOL 85. Он был опубликован в конце 1985 года.

Шестьдесят функций были изменены или устарели, а 115 [97] были добавлены, например: [98] [99]

Новый стандарт был принят всеми национальными органами стандартизации, включая ANSI. [80]

В 1989 и 1993 годах последовали две поправки. Первая поправка ввела внутренние функции, а вторая внесла исправления. [80]

COBOL 2002 и объектно-ориентированный COBOL

В 1997 году Gartner Group подсчитала, что в общей сложности существовало 200 миллиардов строк COBOL, на которых работало 80% всех бизнес-программ. [c] [100]

В начале 1990-х годов началась работа по добавлению объектно-ориентированного программирования в следующую полную версию COBOL. Объектно-ориентированные возможности были взяты из C++ и Smalltalk . [3] [4]

Первоначальная оценка предполагала, что эта редакция будет завершена к 1997 году, и проект комитета ISO (CD) был доступен к 1997 году. Некоторые поставщики (включая Micro Focus , Fujitsu и IBM ) представили объектно-ориентированный синтаксис на основе проектов полной редакции. Окончательный утвержденный стандарт ISO был утвержден и опубликован в конце 2002 года. [101]

Fujitsu/GTSoftware, [102] Micro Focus представили объектно-ориентированные компиляторы COBOL, ориентированные на .NET Framework .

Было много других новых функций, многие из которых были в журнале CODASYL COBOL Journal of Development с 1978 года и упустили возможность быть включенными в COBOL-85. [103] Эти другие функции включают: [104] [105]

Для стандарта были опубликованы три исправления : два в 2006 году и одно в 2009 году. [106]

КОБОЛ 2014

В период с 2003 по 2009 год было подготовлено три технических отчета, описывающих завершение объектов , обработку XML и классы коллекций для COBOL. [106]

COBOL 2002 страдал от плохой поддержки: ни один компилятор не поддерживал стандарт полностью. Micro Focus обнаружила, что это было связано с отсутствием спроса пользователей на новые функции и отменой набора тестов NIST , который использовался для проверки соответствия компиляторов. Процесс стандартизации также оказался медленным и недостаточно обеспеченным ресурсами. [107]

COBOL 2014 включает следующие изменения: [108]

КОБОЛ 2023

В стандарт COBOL 2023 добавлено несколько новых функций:

На данный момент не существует известной полной реализации этого стандарта. [ необходима ссылка ]

Наследие

Программы COBOL используются во всем мире в государственных и коммерческих организациях и работают на различных операционных системах, таких как z/OS , z/VSE , VME , Unix , NonStop OS, OpenVMS и Windows . В 1997 году Gartner Group сообщила, что 80% мирового бизнеса работает на COBOL с более чем 200 миллиардами строк кода [c] и еще 5 миллиардов строк пишутся ежегодно. [114]

Ближе к концу 20-го века проблема 2000 года (Y2K) была в центре внимания значительных усилий по программированию на COBOL, иногда теми же программистами, которые проектировали системы десятилетиями ранее. Особый уровень усилий, необходимых для исправления кода COBOL, был приписан большому объему ориентированного на бизнес COBOL, поскольку бизнес-приложения активно используют даты, и полям данных фиксированной длины. [115] Некоторые исследования приписывают до «24% затрат на исправление программного обеспечения Y2K на Cobol». [116] После усилий по очистке, вложенных в эти программы для Y2K, исследование 2003 года показало, что многие из них остались в использовании. [117] Авторы заявили, что данные исследования указывают на «постепенное снижение важности COBOL в разработке приложений в течение [следующих] 10 лет, если ... не будет принята интеграция с другими языками и технологиями». [118]

В 2006 и 2012 годах опросы Computerworld (352 читателей) показали, что более 60% организаций использовали COBOL (больше, чем C++ и Visual Basic .NET ) и что для половины из них COBOL использовался для большинства их внутреннего программного обеспечения. [10] [119] 36% менеджеров заявили, что планируют перейти с COBOL, а 25% заявили, что сделали бы это, если бы не расходы на переписывание устаревшего кода. В качестве альтернативы некоторые предприятия перенесли свои программы COBOL с мэйнфреймов на более дешевое и быстрое оборудование. [10]

Показания перед Палатой представителей в 2016 году показали, что COBOL по-прежнему используется многими федеральными агентствами. [120 ] Агентство Reuters сообщило в 2017 году, что 43% банковских систем по-прежнему используют COBOL, при этом используется более 220 миллиардов строк кода COBOL. [121]

К 2019 году число программистов COBOL быстро сокращалось из-за выхода на пенсию, что привело к надвигающемуся разрыву в навыках в коммерческих и государственных организациях, которые все еще используют мэйнфреймовые системы для обработки больших объемов транзакций. Попытки переписать системы на новых языках оказались дорогими и проблематичными, как и аутсорсинг обслуживания кода, поэтому выдвигаются предложения обучить больше людей COBOL. [122]

Во время пандемии COVID-19 и последовавшего за ней всплеска безработицы несколько штатов США сообщили о нехватке квалифицированных программистов COBOL для поддержки устаревших систем, используемых для управления пособиями по безработице. Многие из этих систем находились в процессе перехода на более современные языки программирования до пандемии, но этот процесс был приостановлен. [123] Аналогичным образом Налоговая служба США поспешила исправить свой индивидуальный основной файл на основе COBOL , чтобы выплатить десятки миллионов платежей, предписанных Законом о помощи, льготах и ​​экономической безопасности в связи с коронавирусом . [124]

Функции

Синтаксис

COBOL имеет синтаксис, похожий на английский, который используется для описания почти всего в программе. Например, условие может быть выражено как   или более кратко как     или   . Более сложные условия могут быть сокращены путем удаления повторяющихся условий и переменных. Например,     может быть сокращено до . Для поддержки этого синтаксиса в COBOL имеется более 300 ключевых слов . [125] [d] Некоторые из ключевых слов являются простыми альтернативными или множественными написаниями одного и того же слова, что обеспечивает более грамматически подходящие утверждения и предложения; например, ключевые слова и могут использоваться взаимозаменяемо, как и , и и .x IS GREATER THAN yx GREATER yx > ya > b AND a > c OR a = da > b AND c OR = dINOFTIMETIMESVALUEVALUES

Каждая программа COBOL состоит из четырех основных лексических элементов : слов, литералов, строк символов изображений (см. § PICTURE) и разделителей. Слова включают зарезервированные слова и определяемые пользователем идентификаторы. Они имеют длину до 31 символа и могут включать буквы, цифры, дефисы и подчеркивания. Литералы включают цифры (например, 12) и строки (например, 'Hello!'). [127] Разделители включают символ пробела, запятые и точки с запятой, за которыми следует пробел. [128]

Программа на языке COBOL делится на четыре раздела: раздел идентификации, раздел среды, раздел данных и раздел процедур. Раздел идентификации определяет имя и тип исходного элемента и является местом, где указываются классы и интерфейсы. Раздел среды определяет все функции программы, которые зависят от системы, на которой она выполняется, такие как файлы и наборы символов . Раздел данных используется для объявления переменных и параметров . Раздел процедур содержит операторы программы . Каждый раздел подразделяется на разделы, которые состоят из абзацев.

Метаязык

Синтаксис COBOL обычно описывается уникальным метаязыком, использующим фигурные скобки, квадратные скобки, вертикальные линии и подчеркивание. Метаязык был разработан для оригинальных спецификаций COBOL. Хотя форма Бэкуса–Наура существовала в то время, комитет о ней не слышал. [129]

В качестве примера рассмотрим следующее описание утверждения ADD:

 

Это описание допускает следующие варианты:

ДОБАВИТЬ 1 К x ДОБАВИТЬ 1 , a , b К x ОКРУГЛ , y , z ОКРУГЛ           ДОБАВИТЬ a , b К c НА ОШИБКЕ РАЗМЕРА ОТОБРАЖЕНИЕ "Ошибка" КОНЕЦ-ДОБАВЛЕНИЕ         ДОБАВИТЬ a К b НЕ РАЗМЕР ОШИБКИ ОТОБРАЖАТЬ "Нет ошибки" ПРИ РАЗМЕР ОШИБКИ ОТОБРАЖАТЬ "Ошибка"             

Формат кода

Колода перфокарт программы COBOL, 1970-е годы
3270 сеанс

Пик популярности COBOL совпал с эпохой перфораторов и перфокарт . Сама программа была записана на перфокартах, затем считывалась и компилировалась, и данные, вводимые в программу, иногда также были на картах. [130]

COBOL может быть написан в двух форматах: фиксированном (по умолчанию) или свободном. В фиксированном формате код должен быть выровнен, чтобы соответствовать определенным областям (пережиток использования перфокарт). До COBOL 2002 это были:

В COBOL 2002 области A и B были объединены для формирования области текста программы, которая теперь заканчивается столбцом, определенным разработчиком. [131]

COBOL 2002 также представил код свободного формата. Код свободного формата может быть помещен в любой столбец файла, как в более новых языках программирования. Комментарии указываются с помощью *>, который может быть помещен в любом месте и может также использоваться в исходном коде фиксированного формата. Строки продолжения отсутствуют, и >>PAGEдиректива заменяет /индикатор. [131]

Отдел идентификации

Раздел идентификации идентифицирует следующую кодовую сущность и содержит определение класса или интерфейса.

Объектно-ориентированное программирование

Классы и интерфейсы присутствуют в COBOL с 2002 года. Классы имеют объекты-фабрики, содержащие методы и переменные класса, и объекты-экземпляры, содержащие методы и переменные экземпляра. [132] Наследование и интерфейсы обеспечивают полиморфизм . Поддержка универсального программирования обеспечивается через параметризованные классы, которые могут быть созданы для использования любого класса или интерфейса. Объекты хранятся как ссылки, которые могут быть ограничены определенным типом. Существует два способа вызова метода: оператор INVOKE, который действует аналогично CALL, или через вызов встроенного метода, который аналогичен использованию функций. [133]

*> Они эквивалентны. INVOKE my-class "foo" RETURNING var MOVE my-class :: "foo" TO var *> Вызов встроенного метода        

COBOL не предоставляет способа скрыть методы. Однако данные класса можно скрыть, объявив их без PROPERTYпредложения, что не оставляет внешнему коду возможности доступа к ним. [134] Перегрузка методов была добавлена ​​в COBOL 2014. [135]

Отдел охраны окружающей среды

Раздел среды содержит раздел конфигурации и раздел ввода-вывода. Раздел конфигурации используется для указания переменных функций, таких как знаки валют, локали и наборы символов. Раздел ввода-вывода содержит информацию, связанную с файлами.

Файлы

COBOL поддерживает три формата файлов или организации : последовательный, индексированный и относительный. В последовательных файлах записи являются смежными и должны последовательно просматриваться , подобно связанному списку . Индексированные файлы имеют один или несколько индексов, которые позволяют осуществлять произвольный доступ к записям и которые можно сортировать по ним. Каждая запись должна иметь уникальный ключ , но другие, альтернативные , ключи записи не обязательно должны быть уникальными. Реализации индексированных файлов различаются у разных поставщиков, хотя общие реализации, такие как C-ISAM и VSAM , основаны на ISAM от IBM . Другие реализации — это Record Management Services на OpenVMS и Enscribe на HPE NonStop (Tandem). Относительные файлы, как и индексированные файлы, имеют уникальный ключ записи, но у них нет альтернативных ключей. Ключ относительной записи — это ее порядковый номер; например, 10-я запись имеет ключ 10. Это означает, что создание записи с ключом 5 может потребовать создания (пустых) предыдущих записей. Относительные файлы также допускают как последовательный, так и произвольный доступ. [136]

Распространенным нестандартным расширением является последовательная организация строк , используемая для обработки текстовых файлов. Записи в файле завершаются новой строкой и могут иметь различную длину. [137]

Разделение данных

Раздел данных разделен на шесть разделов, в которых объявляются различные элементы: раздел файла для записей файла; раздел рабочей памяти для статических переменных ; раздел локальной памяти для автоматических переменных ; раздел связей для параметров и возвращаемого значения; раздел отчетов и раздел экрана для текстовых пользовательских интерфейсов .

Агрегированные данные

Элементы данных в COBOL объявляются иерархически с помощью номеров уровней, которые указывают, является ли элемент данных частью другого. Элемент с более высоким номером уровня подчинен элементу с более низким. Элементы данных верхнего уровня с номером уровня 1 называются записями . Элементы, имеющие подчиненные агрегированные данные, называются групповыми элементами ; те, которые не имеют, называются элементарными элементами . Номера уровней, используемые для описания стандартных элементов данных, находятся в диапазоне от 1 до 49. [138] [139]

  01 some-record . *> Элемент записи агрегированной группы 05 num PIC 9(10) . *> Элементарный элемент 05 the-date . *> Элемент записи агрегированной (под)группы 10 the-year PIC 9(4) . *> Элементарный элемент 10 the-month PIC 99 . *> Элементарный элемент 10 the-day PIC 99 . *> Элементарный элемент                    

В приведенном выше примере элементарный элемент numи групповой элемент the-dateподчинены записи some-record, в то время как элементарные элементы the-year, the-month, и the-dayявляются частью группового элемента the-date.

Подчиненные элементы могут быть устранены с помощью ключевого слова IN(или OF). Например, рассмотрим пример кода выше вместе со следующим примером:

  01 дата продажи . 05 год PIC 9(4) . 05 месяц PIC 99 . 05 день PIC 99 .         

Имена the-year, the-monthи the-dayнеоднозначны сами по себе, поскольку с этими именами определено более одного элемента данных. Чтобы указать конкретный элемент данных, например, один из элементов, содержащихся в sale-dateгруппе, программист использовал бы the-year IN sale-date(или эквивалент the-year OF sale-date). Этот синтаксис похож на «точечную нотацию», поддерживаемую большинством современных языков.

Другие уровни данных

Номер уровня 66 используется для объявления перегруппировки ранее определенных элементов, независимо от того, как структурированы эти элементы. Этот уровень данных, также упоминаемый связанным RENAMESпредложением , используется редко [140] и, около 1988 года, обычно встречался в старых программах. Его способность игнорировать иерархическую и логическую структуру данных означала, что его использование не рекомендовалось, и многие инсталляции запрещали его использование. [141]

  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 ПЕРЕИМЕНОВЫВАЕТ cust-name ЧЕРЕЗ cust-dob . 66 cust-all-details ПЕРЕИМЕНОВЫВАЕТ cust-name ЧЕРЕЗ cust-balance .                               

Номер уровня 77 указывает на то, что элемент является автономным, и в таких ситуациях эквивалентен номеру уровня 01. Например, следующий код объявляет два элемента данных уровня 77, property-nameи sales-region, которые являются негрупповыми элементами данных, которые независимы (не подчинены) ни от каких других элементов данных:

  77 наименование-свойства PIC X(80) . 77 регион-продаж PIC 9(5) .    

Номер уровня 88 объявляет имя условия (так называемый уровень 88), которое является истинным, когда его родительский элемент данных содержит одно из значений, указанных в его VALUEпредложении. [142] Например, следующий код определяет два элемента имени условия уровня 88, которые являются истинными или ложными в зависимости от текущего символьного значения данных wage-typeэлемента данных. Когда элемент данных содержит значение 'H', имя условия wage-is-hourlyявляется истинным, тогда как когда он содержит значение 'S'или 'Y', имя условия wage-is-yearlyявляется истинным. Если элемент данных содержит какое-либо другое значение, оба имени условия являются ложными.

  01 тип заработной платы PIC X . 88 почасовая заработная плата ЗНАЧЕНИЕ "H" . 88 годовая заработная плата ЗНАЧЕНИЕ "S" , "Y" .        

Типы данных

Стандартный COBOL предоставляет следующие типы данных: [143]

Безопасность типов является переменной в COBOL. Числовые данные преобразуются между различными представлениями и размерами молча, а буквенно-цифровые данные могут быть помещены в любой элемент данных, который может быть сохранен как строка, включая числовые и групповые данные. [144] Напротив, ссылки на объекты и указатели могут быть назначены только из элементов того же типа, и их значения могут быть ограничены определенным типом. [145]

Пункт ФОТОГРАФИЯ

Предложение PICTURE(или PIC) представляет собой строку символов, каждый из которых представляет часть элемента данных и то, что он может содержать. Некоторые символы изображения указывают тип элемента и сколько символов или цифр он занимает в памяти. Например, a 9указывает на десятичную цифру, а an Sуказывает на то, что элемент имеет знак . Другие символы изображения (называемые символами вставки и редактирования ) указывают, как элемент должен быть отформатирован. Например, ряд +символов определяет позиции символов, а также то, как должен располагаться начальный знак в конечных символьных данных; самый правый нечисловой символ будет содержать знак элемента, в то время как другие позиции символов, соответствующие a +слева от этой позиции, будут содержать пробел. Повторяющиеся символы можно указать более кратко, указав число в скобках после символа изображения; например, 9(7)эквивалентно 9999999. Спецификации изображений, содержащие только символы цифр ( 9) и знаков ( S), определяют чисто числовые элементы данных, в то время как спецификации изображений, содержащие буквенные ( A) или буквенно-цифровые ( X) символы, определяют буквенно-цифровые элементы данных. Наличие других символов форматирования определяет отредактированные числовые или отредактированные буквенно-цифровые элементы данных. [146]

Пункт ИСПОЛЬЗОВАНИЯ

Предложение USAGEобъявляет формат, в котором хранятся данные. В зависимости от типа данных оно может либо дополнять предложение, либо использоваться вместо него PICTURE. Хотя его можно использовать для объявления указателей и ссылок на объекты, оно в основном ориентировано на указание числовых типов. Эти числовые форматы: [147]

Автор отчета

Report writer — это декларативный инструмент для создания отчетов. Программисту нужно только указать макет отчета и данные, необходимые для его создания, что освобождает его от необходимости писать код для обработки таких вещей, как разрывы страниц, форматирование данных, а также заголовки и подстрочные столбцы. [148]

Отчеты связаны с файлами отчетов, которые представляют собой файлы, запись в которые возможна только с помощью операторов составителя отчетов.

  Отчет FD -out ОТЧЕТ отчет-продажи .   

Каждый отчет определяется в разделе отчетов в разделе данных. Отчет делится на группы отчетов, которые определяют заголовки, подвалы и детали отчета. Отчеты работают с иерархическими разрывами управления . Разрывы управления происходят, когда ключевая переменная изменяет свое значение; например, при создании отчета с подробным описанием заказов клиентов разрыв управления может произойти, когда программа достигает заказов другого клиента. Вот пример описания отчета для отчета, который дает продажи продавца и предупреждает о любых недействительных записях:

  Отчет о продажах RD ОГРАНИЧЕНИЕ СТРАНИЦЫ 60 СТРОК ПЕРВАЯ ДЕТАЛИ 3 УПРАВЛЯЕТ имя-продавца .             01 ТИП ЗАГОЛОВОК СТРАНИЦЫ . 03 СТОЛБЕЦ 1 ЗНАЧЕНИЕ "Отчет о продажах" . 03 СТОЛБЕЦ 74 ЗНАЧЕНИЕ "Страница" . 03 СТОЛБЕЦ 79 ИЗОБРАЖЕНИЕ Z9 ИСТОЧНИК СТРАНИЦЫ-СЧЕТЧИК .               01 продажи-на-день ТИП ДЕТАЛЬ , СТРОКА + 1 . 03 СТОЛБЕЦ 3 ЗНАЧЕНИЕ "Продажи на" . 03 СТОЛБЕЦ 12 ФОТО 99/99/9999 ИСТОЧНИК дата-продажи . 03 СТОЛБЕЦ 21 ЗНАЧЕНИЕ "были" . 03 СТОЛБЕЦ 26 ФОТО $$$$9.99 ИСТОЧНИК сумма-продажи .                      01 недействительные-продажи ТИП ДЕТАЛЬ , СТРОКА + 1 . 03 СТОЛБЕЦ 3 ЗНАЧЕНИЕ "НЕДЕЙСТВИТЕЛЬНАЯ ЗАПИСЬ:" . 03 СТОЛБЕЦ 19 ИЗОБРАЖЕНИЕ X(34) ИСТОЧНИК запись-продажи .              01 ТИП УПРАВЛЕНИЯ ЗАГОЛОВОК имя-продавца , СТРОКА + 2 . 03 СТОЛБЕЦ 1 ЗНАЧЕНИЕ "Продавец:" . 03 СТОЛБЕЦ 9 ИЗОБРАЖЕНИЕ X(30) ИСТОЧНИК имя-продавца .             

Приведенное выше описание отчета описывает следующую структуру:

Отчет о продажах, страница 1Продавец: Говард Бромберг Продажи на 10/12/2008 составили $1000.00 Продажи на 12.12.2008 составили 0,00 $ Продажи на 13/12/2008 составили 31,47 долл. НЕДЕЙСТВИТЕЛЬНАЯ ЗАПИСЬ: Говард Бромберг XXXXYYПродавец: Howard Discount...Отчет о продажах, страница 12 Продажи на 08.05.2014 составили 543,98 долл. США НЕДЕЙСТВИТЕЛЬНАЯ ЗАПИСЬ: Уильям Селден 12O52014FOOFOO Продажи на 30/05/2014 составили $0.00

Четыре оператора управляют генератором отчетов: INITIATE, который подготавливает генератор отчетов к печати; GENERATE, который печатает группу отчетов; SUPPRESS, который подавляет печать группы отчетов; и TERMINATE, который завершает обработку отчета. Для приведенного выше примера отчета о продажах разделение процедур может выглядеть следующим образом:

  ОТКРЫТЬ ВВОД продажи , ВЫВОД отчет-выход ИНИЦИАТИВА отчет-продаж ВЫПОЛНЯТЬ ДО 1 <> 1 ЧТЕНИЕ продаж В КОНЕЦ ВЫХОД ВЫПОЛНЯТЬ КОНЕЦ -ЧТЕНИЕ ПРОВЕРИТЬ запись - продаж ЕСЛИ верная-запись СГЕНЕРИРОВАТЬ продажи -за-день ИНАЧЕ СГЕНЕРИРОВАТЬ недействительные-продажи КОНЕЦ-ЕСЛИ КОНЕЦ-ВЫПОЛНИТЬ ЗАВЕРШИТЬ отчет-продажи ЗАКРЫТЬ продажи , отчет-выход .                                                    

Использование Report Writer может значительно различаться: некоторые организации используют его широко, а некоторые вообще не используют. [149] Кроме того, реализации Report Writer различаются по качеству, при этом те, что находятся на самом низком уровне, иногда используют чрезмерные объемы памяти во время выполнения. [149]

Процедурное отделение

Процедуры

Разделы и параграфы в процедурном разделе (совместно называемые процедурами) могут использоваться как метки и как простые подпрограммы . В отличие от других разделов, параграфы не обязательно должны быть в разделах. [150]

Выполнение продолжается по процедурам программы, пока не будет завершено. [151] Для использования процедур в качестве подпрограмм PERFORMиспользуется глагол.

Оператор PERFORMнесколько напоминает вызов процедуры в более новых языках в том смысле, что выполнение возвращается к коду, следующему за PERFORMоператором в конце вызываемого кода; однако он не предоставляет механизма для передачи параметров или возврата результирующего значения. Если подпрограмма вызывается с помощью простого оператора, например , то управление возвращается в конце вызываемой процедуры. Однако необычен тем, что может использоваться для вызова диапазона, охватывающего последовательность нескольких смежных процедур. Это делается с помощью конструкции:PERFORM subroutinePERFORMPERFORM sub-1 THRU sub-n

ПРОЦЕДУРА такая-то . ВЫПОЛНИТЬ АЛЬФА ВЫПОЛНИТЬ АЛЬФА ПО ГАММА ОСТАНОВИТЬ ЗАПУСК . АЛЬФА . ОТОБРАЖЕНИЕ «А» . БЕТА . ОТОБРАЖЕНИЕ «В» . ГАММА . ОТОБРАЖЕНИЕ «С» .            

Результатом работы этой программы будет: «AAB C».

PERFORMтакже отличается от обычных вызовов процедур тем, что, по крайней мере традиционно, нет понятия стека вызовов. Как следствие, возможны вложенные вызовы (последовательность кода, которая редактируется, PERFORMможет выполнить PERFORMсам оператор), но требуют особой осторожности, если части одного и того же кода выполняются обоими вызовами. Проблема возникает, когда код во внутреннем вызове достигает точки выхода внешнего вызова. Более формально, если управление проходит через точку выхода вызова PERFORM, который был вызван ранее, но еще не завершен, стандарт COBOL 2002 предусматривает, что поведение не определено .

Причина в том, что COBOL, а не «адрес возврата», работает с тем, что можно назвать адресом продолжения. Когда поток управления достигает конца любой процедуры, ищется адрес продолжения, и управление передается на этот адрес. Перед запуском программы адрес продолжения для каждой процедуры инициализируется начальным адресом процедуры, которая следует за ней в тексте программы, так что, если не PERFORMпроисходит никаких операторов, управление передается сверху вниз по программе. Но когда PERFORMвыполняется оператор, он изменяет адрес продолжения вызываемой процедуры (или последней процедуры вызываемого диапазона, если PERFORM THRUона использовалась), так что управление вернется к месту вызова в конце. Исходное значение сохраняется и впоследствии восстанавливается, но есть только одна позиция хранения. Если два вложенных вызова работают с перекрывающимся кодом, они могут мешать друг другу управлять адресом продолжения несколькими способами. [152] [153]

Следующий пример (взятый из Veerman & Verhoeven 2006) иллюстрирует проблему:

МЕТКА1 . ОТОБРАЖЕНИЕ «1» ВЫПОЛНИТЬ ОТ МЕТКИ2 ДО МЕТКИ3 ОСТАНОВИТЬ ВЫПОЛНИТЬ . МЕТКА2 . ОТОБРАЖЕНИЕ «2» ВЫПОЛНИТЬ ОТ МЕТКИ3 ДО МЕТКИ4 . МЕТКА3 . ОТОБРАЖЕНИЕ «3» . МЕТКА4 . ОТОБРАЖЕНИЕ «4» .              

Можно было бы ожидать, что вывод этой программы будет "1 2 3 4 3": После отображения "2" второй PERFORMвызов вызывает отображение "3" и "4", а затем первый вызов продолжается с "3". В традиционных реализациях COBOL это не так. Вместо этого первый PERFORMоператор устанавливает адрес продолжения в конце LABEL3, чтобы он перешел обратно к месту вызова внутри LABEL1. Второй PERFORMоператор устанавливает возврат в конце , LABEL4но не изменяет адрес продолжения LABEL3, ожидая, что это будет продолжение по умолчанию. Таким образом, когда внутренний вызов достигает конца LABEL3, он переходит обратно к внешнему PERFORMоператору, и программа останавливается, напечатав только "1 2 3". С другой стороны, в некоторых реализациях COBOL, таких как компилятор TinyCOBOL с открытым исходным кодом, два PERFORMоператора не мешают друг другу, и вывод действительно равен "1 2 3 4 3". Поэтому поведение в таких случаях не только (возможно) удивительно, но и непереносимо. [153]

Особым следствием этого ограничения является то, что его PERFORMнельзя использовать для написания рекурсивного кода. Еще один простой пример для иллюстрации этого (немного упрощенный из Veerman & Verhoeven 2006):

 ПЕРЕМЕСТИТЬ 1 НА МЕТКУ ВЫПОЛНИТЬ ОСТАНОВИТЬ ВЫПОЛНИТЬ . МЕТКА . ОТОБРАЖАТЬ A ЕСЛИ A < 3 ДОБАВИТЬ 1 К МЕТКЕ ВЫПОЛНИТЬ КОНЕЦ -ЕСЛИ ОТОБРАЖАТЬ ' КОНЕЦ' .                      

Можно было бы ожидать, что вывод будет "1 2 3 END END END", и на самом деле это то, что выдадут некоторые компиляторы COBOL. Но другие компиляторы, такие как IBM COBOL, выдадут код, который выведет "1 2 3 END END END END ..." и так далее, выведя "END" снова и снова в бесконечном цикле. Поскольку для хранения резервных адресов продолжения имеется ограниченное пространство, резервные копии будут перезаписаны в ходе рекурсивных вызовов, и все, что можно восстановить, это вернуться к DISPLAY 'END'. [153]

Заявления

COBOL 2014 имеет 47 операторов (также называемых глаголами ), [154], которые можно сгруппировать в следующие широкие категории: поток управления, ввод-вывод, манипулирование данными и автор отчетов. Операторы автора отчетов рассматриваются в разделе автора отчетов.

Поток управления

Условные операторы COBOL — это IFи EVALUATE. EVALUATE— это оператор типа switch с дополнительной возможностью оценки нескольких значений и условий. Это можно использовать для реализации таблиц решений . Например, следующее можно использовать для управления токарным станком с ЧПУ :

ОЦЕНИТЬ ИСТИНА ТАКЖЕ желаемая скорость ТАКЖЕ текущая скорость КОГДА крышка закрыта ТАКЖЕ минимальная скорость ДО максимальной скорости ТАКЖЕ МЕНЬШЕ желаемой скорости ВЫПОЛНИТЬ ускорение машины КОГДА крышка закрыта ТАКЖЕ минимальная скорость ДО максимальной скорости ТАКЖЕ БОЛЬШЕ желаемой скорости ВЫПОЛНИТЬ замедление машины КОГДА крышка открыта ТАКЖЕ ЛЮБОЕ ТАКЖЕ НЕ НУЛ ВЫПОЛНИТЬ аварийную остановку КОГДА ДРУГОЕ ПРОДОЛЖИТЬ КОНЕЦ ОЦЕНКИ                                           

Оператор PERFORMиспользуется для определения циклов, которые выполняются до тех пор, пока условие не станет истинным (а не while true, что более распространено в других языках). Он также используется для вызова процедур или диапазонов процедур (см. раздел процедур для получения более подробной информации). CALLи INVOKEвызова подпрограмм и методов соответственно. Имя подпрограммы/метода содержится в строке, которая может быть литералом или элементом данных. [155] Параметры могут передаваться по ссылке , по содержимому (когда копия передается по ссылке) или по значению (но только если доступен прототип ). [156]CANCEL выгружает подпрограммы из памяти. GO TOзаставляет программу перейти к указанной процедуре.

Оператор GOBACKявляется оператором возврата , и STOPоператор останавливает программу. EXITОператор имеет шесть различных форматов: он может использоваться как оператор возврата, оператор прерывания , оператор продолжения , маркер конца или для выхода из процедуры. [157]

Исключения вызываются оператором RAISEи перехватываются обработчиком или декларативом , определенным в DECLARATIVESчасти процедуры division. Декларативные — это разделы, начинающиеся с USEоператора, который указывает ошибки для обработки. Исключения могут быть именами или объектами. RESUMEиспользуется в декларативном для перехода к оператору после того, который вызвал исключение, или к процедуре за пределами DECLARATIVES. В отличие от других языков, неперехваченные исключения не могут завершить программу, и программа может продолжать работу без изменений.

Ввод/вывод

Файловый ввод-вывод обрабатывается самоописываемыми операторами OPEN, CLOSE, READи , WRITEа также еще тремя: REWRITE, который обновляет запись; START, который выбирает последующие записи для доступа, находя запись с определенным ключом; и UNLOCK, который снимает блокировку с последней записи, к которой был получен доступ.

Взаимодействие с пользователем осуществляется с помощью ACCEPTи DISPLAY.

Манипулирование данными

Следующие глаголы манипулируют данными:

Файлы и таблицы сортируются с помощью SORTи MERGEглагол объединяет и сортирует файлы. RELEASEГлагол предоставляет записи для сортировки и RETURNизвлекает отсортированные записи по порядку.

Прекращение действия

Некоторые операторы, такие как IFи READ, могут сами содержать операторы. Такие операторы могут быть завершены двумя способами: точкой ( неявное завершение ), которая завершает все содержащиеся незавершенные операторы, или терминатором области действия, который завершает ближайший соответствующий открытый оператор.

*> Точка завершения ("неявное завершение") ЕСЛИ недействительная-запись ЕСЛИ больше-записей нет СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ ИНАЧЕ ПРОЧИТАЙТЕ файл-записи В КОНЦЕ УСТАНОВИТЕ больше-записей в значение ИСТИНА .                *> Терминаторы области действия ("явное завершение") IF недействительная-запись IF больше-записей ПРОДОЛЖИТЬ ИНАЧЕ ЧИТАТЬ файл-записи В КОНЦЕ УСТАНОВИТЬ больше-записей в TRUE КОНЕЦ-ЧТЕНИЕ КОНЕЦ-ЕСЛИ КОНЕЦ -ЕСЛИ                   

Вложенные операторы, завершающиеся точкой, являются распространенным источником ошибок. [159] [160] Например, рассмотрим следующий код:

ЕСЛИ x ОТОБРАЖАТЬ y . ОТОБРАЖАТЬ z .     

Здесь намерение состоит в том, чтобы отобразить yи , zесли условие xистинно. Однако, zбудет отображено независимо от значения , xпоскольку IFоператор завершается ошибочной точкой после .DISPLAY y

Другая ошибка является результатом проблемы с висячим else , когда два IFоператора могут ассоциироваться с ELSE.

ЕСЛИ x ЕСЛИ y ОТОБРАЗИТЬ a ИНАЧЕ ОТОБРАЗИТЬ b .        

В приведенном выше фрагменте ELSEассоциируется с     оператором вместо     оператора, что приводит к ошибке. До введения явных терминаторов области действия, предотвращение этого требовало бы     размещения после внутреннего . [160]IF yIF xELSE NEXT SENTENCEIF

Самоизменяющийся код

Оригинальная (1959) спецификация COBOL поддерживала печально известное     выражение, для которого многие компиляторы генерировали самомодифицирующийся код . и являются метками процедур, а единственный     оператор в процедуре , выполняемый после такого оператора, означает     вместо этого. Многие компиляторы все еще поддерживают его, [161] но он был признан устаревшим в стандарте COBOL 1985 и удален в 2002. [162]ALTER X TO PROCEED TO YXYGO TOXALTERGO TO Y

Это ALTERутверждение было воспринято негативно, поскольку оно подрывало «локальность контекста» и делало общую логику программы трудной для понимания. [163] Как писал в 1976 году автор учебника Дэниел Д. Маккракен , когда «тот, кто никогда раньше не видел программу, должен был ознакомиться с ней как можно быстрее, иногда в условиях критического цейтнота, потому что программа дала сбой... вид оператора GO TO в абзаце сам по себе, сигнализирующий о существовании неизвестного количества операторов ALTER в неизвестных местах по всей программе, вселяет страх в сердце самого смелого программиста». [163]

Привет, мир

Программа «Hello, World!» на языке COBOL:

  РАЗДЕЛ ИДЕНТИФИКАЦИИ . ИДЕНТИФИКАТОР ПРОГРАММЫ . hello-world . РАЗДЕЛ ПРОЦЕДУР . ОТОБРАЖЕНИЕ "Hello, world!" .           

Когда в 1978 году был впервые опубликован знаменитый пример программы "Hello, World!" в языке программирования C, аналогичный пример программы на мэйнфрейме COBOL был отправлен через JCL , весьма вероятно, с использованием считывателя перфокарт и 80-колоночных перфокарт. Приведенный ниже листинг с пустым DATA DIVISION был протестирован с использованием Linux и эмулятора System/370 Hercules под управлением MVS 3.8J. JCL, написанный в июле 2015 года, основан на учебных пособиях и примерах Hercules, размещенных Джеем Мосли. [164] В соответствии с программированием на COBOL той эпохи, HELLO, WORLD отображается заглавными буквами.

// COBUCLG JOB ( 001 ), 'COBOL BASE TEST' , 00010000 // CLASS = A , MSGCLASS = A , MSGLEVEL = ( 1 , 1 ) 00020000 // BASETEST EXEC COBUCLG 00030000 // COB . SYSIN DD * 00040000 00000 * ПРОВЕРКА УСТАНОВКИ BASE COBOL 00050000 01000 ИДЕНТИФИКАЦИЯ DIVISION . 00060000 01100 ИДЕНТИФИКАТОР - ПРОГРАММЫ . 'HELLO' . 00070000 02000 ОКРУЖЕНИЕ DIVISION . 00080000 02100 РАЗДЕЛ КОНФИГУРАЦИИ . 00090000 02110 ИСХОДНЫЙ КОМПЬЮТЕР . GNULINUX . 00100000 02120 ОБЪЕКТ-КОМПЬЮТЕР . HERCULES . 00110000 02200 СПЕЦИАЛЬНЫЕ-ИМЕНА . 00120000 02210 КОНСОЛЬ - КОНСОЛЬ . 00130000 03000 РАЗДЕЛЕНИЕ ДАННЫХ . 00140000 04000 РАЗДЕЛЕНИЕ ПРОЦЕДУРЫ . 00150000 04100 00 - ГЛАВНЫЙ . 00160000 04110 ОТОБРАЖЕНИЕ " HELLO , WORLD" НА КОНСОЛЬ . 00170000 04900 ОСТАНОВКА ВЫПОЛНЕНИЯ . 00180000 // LKED.SYSLIB DD DSNAME = SYS1.COBLIB , DISP = SHR 00190000 // DD DSNAME = SYS1.LINKLIB , DISP = SHR 00200000 // GO.SYSPRINT DD SYSOUT = A 00210000 // 00220000                                                     

После отправки JCL консоль MVS отобразила:

 19.52.48 ЗАДАНИЕ 3 $HASP100 COBUCLG НА ТЕСТЕ БАЗЫ COBOL READER1 19.52.48 ЗАДАНИЕ 3 IEF677I ПРЕДУПРЕЖДАЮЩЕЕ СООБЩЕНИЕ(Я) ДЛЯ ЗАДАНИЯ COBUCLG ВЫДАНЫ 19.52.48 ЗАДАНИЕ 3 $HASP373 COBUCLG ЗАПУЩЕНО - INIT 1 - КЛАСС A - SYS BSP1 19.52.48 ЗАДАНИЕ 3 IEC130I SYSPUNCH DD ОТСУТСТВУЕТ 19.52.48 ЗАДАНИЕ 3 IEC130I SYSLIB DD ОТСУТСТВУЕТ 19.52.48 ЗАДАНИЕ 3 IEC130I SYSPUNCH DD ОТСУТСТВУЕТ 19.52.48 JOB 3 IEFACTRT - Stepname Procstep Program Retcode 19.52.48 РАБОТА 3 COBUCLG BASETEST COB IKFCBL00 RC= 0000 19.52.48 РАБОТА 3 COBUCLG BASETEST LKED IEWL RC= 0000 19.52.48 ЗАДАНИЕ 3 +ПРИВЕТ, МИР 19.52.48 ЗАДАНИЕ 3 COBUCLG BASETEST GO PGM=*.DD RC= 0000 19.52.48 РАБОТА 3 $HASP395 COBUCLG ЗАВЕРШЕНА

Строка 10 приведенного выше листинга консоли выделена для пущего эффекта, выделение не является частью фактического вывода консоли .

Соответствующий листинг компилятора сгенерировал более четырех страниц технических подробностей и информации о выполнении задания для одной строки вывода из 14 строк COBOL.

Прием

Отсутствие структуры

В 1970-х годах принятие парадигмы структурного программирования становилось все более распространенным. Эдсгер Дейкстра , выдающийся ученый-компьютерщик, написал письмо редактору Communications of the ACM , опубликованное в 1975 году, под названием «Как мы говорим правду, которая может ранить?», в котором он критиковал COBOL и несколько других современных языков; отмечая, что «использование COBOL калечит разум». [165]

В опубликованном несогласии с замечаниями Дейкстры компьютерный ученый Говард Э. Томпкинс утверждал, что неструктурированный COBOL, как правило, «писался программистами, которые никогда не имели возможности хорошо изучить структурированный COBOL», утверждая, что проблема в первую очередь в обучении. [166]

Одной из причин спагетти-кода был оператор. Однако GO TOпопытки удалить s из кода COBOL привели к запутанным программам и снижению качества кода. [167] s были в значительной степени заменены оператором и процедурами, которые способствовали модульному программированию [167] и давали легкий доступ к мощным средствам циклирования. Однако можно было использовать только с процедурами, поэтому тела циклов не располагались там, где они использовались, что затрудняло понимание программ. [168]GO TO GO TOPERFORMPERFORM

Программы COBOL были печально известны своей монолитностью и отсутствием модуляризации. [169] Код COBOL мог быть модуляризирован только с помощью процедур, которые, как было установлено, неадекватны для больших систем. Было невозможно ограничить доступ к данным, то есть процедура могла получить доступ и изменить любой элемент данных. Более того, не было способа передать параметры процедуре, упущение, которое Жан Саммет считал самой большой ошибкой комитета. [170]

Другое осложнение возникло из-за возможности PERFORM THRUопределенной последовательности процедур. Это означало, что управление могло переходить к любой процедуре и возвращаться из нее, создавая запутанный поток управления и позволяя программисту нарушать правило «один вход — один выход» . [171]

Эта ситуация улучшилась, когда COBOL принял больше функций. COBOL-74 добавил подпрограммы, дав программистам возможность контролировать данные, к которым могла получить доступ каждая часть программы. Затем COBOL-85 добавил вложенные подпрограммы, позволив программистам скрывать подпрограммы. [172] Дальнейший контроль над данными и кодом появился в 2002 году, когда были включены объектно-ориентированное программирование, определяемые пользователем функции и определяемые пользователем типы данных.

Тем не менее, многие важные устаревшие программы COBOL используют неструктурированный код, который стал практически неподдающимся поддержке. Может быть слишком рискованно и дорого изменять даже простую часть кода, поскольку он может использоваться из неизвестных мест неизвестными способами. [173]

Проблемы совместимости

COBOL был задуман как высокопортируемый, «общий» язык. Однако к 2001 году было создано около 300 диалектов. [174] Одним из источников диалектов был сам стандарт: стандарт 1974 года состоял из одного обязательного ядра и одиннадцати функциональных модулей, каждый из которых содержал два или три уровня поддержки. Это допускало 104 976 возможных вариантов. [175]

COBOL-85 не был полностью совместим с более ранними версиями, и его разработка была спорной. Джозеф Т. Брофи, CIO компании Travelers Insurance , возглавил усилия по информированию пользователей COBOL о высоких затратах на перепрограммирование при внедрении нового стандарта. [176] В результате комитет ANSI COBOL получил более 2200 писем от общественности, в основном негативных, требующих от комитета внести изменения. С другой стороны, считалось, что переход на COBOL-85 увеличит производительность в последующие годы, тем самым оправдывая затраты на переход. [177]

Подробный синтаксис

КОБОЛ: /кох′бол/, сущ.

Слабый, многословный и дряблый язык, используемый программистами для выполнения скучных бессмысленных задач на мэйнфреймах-динозаврах. [...] Само его название редко произносится без ритуальных выражений отвращения или ужаса.

Файл жаргона 4.4.8. [178]

Синтаксис COBOL часто критиковали за его многословность. Сторонники говорят, что это было сделано для того, чтобы сделать код самодокументируемым , что облегчило бы обслуживание программ. [179] COBOL также был предназначен для того, чтобы быть простым в изучении и использовании программистами, [180] и в то же время быть понятным для нетехнического персонала, например, менеджеров. [181] [182] [183] ​​[184]

Желание читабельности привело к использованию синтаксиса и структурных элементов, похожих на английский, таких как существительные, глаголы, предложения, секции и разделы. Однако к 1984 году разработчики программ COBOL изо всех сил пытались справиться с «непонятным» кодом [183] , и основные изменения в COBOL-85 были направлены на облегчение поддержки. [93]

Джин Саммет, член краткосрочного комитета, отметила, что «было сделано мало попыток угодить профессиональным программистам; на самом деле, люди, чей основной интерес — программирование, как правило, очень недовольны COBOL», что она приписала многословному синтаксису COBOL. [185]

Изоляция от сообщества компьютерных наук

Сообщество COBOL всегда было изолировано от сообщества компьютерных наук. Ни один академический специалист по информатике не принимал участия в разработке COBOL: все члены комитета были выходцами из коммерции или правительства. Специалисты по информатике в то время больше интересовались такими областями, как численный анализ, физика и системное программирование, чем коммерческими проблемами обработки файлов, которые решала разработка COBOL. [186] Жан Саммет приписывал непопулярность COBOL первоначальной «снобистской реакции» из-за его неэлегантности, отсутствия влиятельных специалистов по информатике, участвующих в процессе разработки, и пренебрежения к обработке бизнес-данных. [187] Спецификация COBOL использовала уникальную «нотацию», или метаязык , для определения своего синтаксиса, а не новую форму Бэкуса–Наура , о которой комитет не знал. Это привело к «жестокой» критике. [188] [189] [70]

Академический мир склонен считать COBOL многословным, неуклюжим и неэлегантным и пытается игнорировать его, хотя в мире, вероятно, программ и программистов на COBOL больше, чем на FORTRAN, ALGOL и PL/I вместе взятых. По большей части, только школы с непосредственной профессиональной целью предоставляют обучение на COBOL.

Ричард Конвей и Дэвид Грайс , 1973 [190]

Позже COBOL страдал от нехватки материала по нему; потребовалось время до 1963 года, чтобы появились вводные книги (с Ричардом Д. Ирвином, издавшим учебник для колледжей по COBOL в 1966 году). [191] К 1985 году в Библиотеке Конгресса было в два раза больше книг по FORTRAN и в четыре раза больше по BASIC, чем по COBOL . [129] Университетские профессора преподавали более современные, передовые языки и методы вместо COBOL, который, как говорили, имел природу «профессиональной школы». [192] Дональд Нельсон, председатель комитета CODASYL COBOL, сказал в 1984 году, что «академики ... ненавидят COBOL» и что выпускники компьютерных наук «им вдолбили в голову „ненависть COBOL“». [193]

К середине 1980-х годов в бизнес-сообществе также наблюдалось значительное снисхождение к COBOL со стороны пользователей других языков, например, FORTRAN или ассемблера , подразумевая, что COBOL можно использовать только для решения несложных задач. [194]

В 2003 году COBOL фигурировал в 80% учебных программ по информационным системам в Соединенных Штатах, в той же пропорции, что и C++ и Java . [195] Десять лет спустя опрос Micro Focus показал, что 20% университетских преподавателей считали COBOL устаревшим или мертвым, а 55% считали, что их студенты считали COBOL устаревшим или мертвым. Тот же опрос также показал, что только 25% преподавателей включали программирование на COBOL в свою учебную программу, хотя 60% считали, что должны его преподавать. [196]

Опасения по поводу процесса проектирования

Были высказаны сомнения относительно компетентности комитета по стандартам. Краткосрочный член комитета Говард Бромберг сказал, что «недостаточно было контроля» над процессом разработки и что он «страдал от непостоянства персонала и... отсутствия таланта». [81] Жан Саммет и Джером Гарфанкель также отметили, что изменения, внесенные в одну редакцию стандарта, будут отменены в следующей, как из-за изменений в составе комитета по стандартам, так и из-за объективных доказательств. [197]

Стандарты COBOL неоднократно страдали от задержек: COBOL-85 появился на пять лет позже, чем ожидалось, [198] COBOL 2002 опоздал на пять лет, [3] а COBOL 2014 опоздал на шесть лет. [101] [199] Чтобы бороться с задержками, комитет по стандартизации разрешил создание необязательных дополнений, которые добавляли бы функции быстрее, чем при ожидании следующей версии стандарта. Однако некоторые члены комитета выразили обеспокоенность по поводу несовместимости между реализациями и частыми модификациями стандарта. [200]

Влияние на другие языки

Структуры данных COBOL повлияли на последующие языки программирования. Его структура записи и файла повлияла на PL/I и Pascal , а REDEFINESпредложение было предшественником вариантов записей Pascal. Явные определения структуры файла предшествовали разработке систем управления базами данных , а агрегированные данные были значительным шагом вперед по сравнению с массивами Fortran. [129]

PICTUREдекларации данных были включены в PL/I с небольшими изменениями.

Возможности COBOL COPY, хотя и считаются «примитивными», [201] повлияли на разработку директив include . [129]

Фокус на переносимости и стандартизации означал, что программы, написанные на COBOL, могли быть переносимыми и способствовали распространению языка на широкий спектр аппаратных платформ и операционных систем. [202] Кроме того, четко определенная структура разделов ограничивает определение внешних ссылок на раздел Environment, что упрощает, в частности, смену платформы. [203]

Смотрите также

Примечания

  1. ^ Оказал особое влияние на объектно-ориентированные возможности COBOL 2002. [3] [4] [5]
  2. Надгробие в настоящее время находится в Музее истории компьютеров . [64]
  3. ^ ab Читатель должен быть предупрежден, что, хотя исследование Gartner Group 1997 года повсеместно ссылается на известную цитату «200 миллиардов строк COBOL», сам отчет найти трудно. [204] Более того, некоторые предполагают [205] , что «единственным участием Gartner в этих цифрах» было исследование 1995 года [206] , в котором «прогнозировалось, что исправление ошибки Y2K обойдется в 1 доллар за строку или в 300 миллиардов долларов в общей сложности», что и привело к неверной интерпретации отчета.
  4. ^ Расширения, специфичные для поставщика, приводят к тому, что многие реализации имеют гораздо больше ключевых слов: одна реализация распознает более 1100 ключевых слов. [126]

Ссылки

Цитаты

  1. ^ ab Sammet, Jean E. (март 2000 г.). "Настоящие создатели Cobol". IEEE Software . 17 (2): 30–32. doi :10.1109/52.841602. ISSN  1937-4194. Комитет Short-Range усердно работал с июня 1959 г., но было очень трудно заставить довольно большой комитет попытаться создать язык программирования. В ноябре председатель Комитета Short-Range назначил шесть человек для разработки спецификаций для рассмотрения: Уильяма Селдена и Гертруду Тирни (IBM), Говарда Бромберга и Нормана Дисконта (RCA), а также Вернона Ривза и Джин Э. Сэммет (Sylvania Electric Products). Мы работали две полные недели (включая несколько круглосуточных сессий) в ноябре 1959 г. и отправили предложенные спецификации в Комитет Short-Range в полном составе, который принял почти все из них. После некоторого редактирования (теми же шестью людьми) мы в декабре передали спецификации в качестве окончательного отчета Исполнительному комитету, который принял их в январе 1960 года. После некоторого дальнейшего редактирования Правительственная типография выпустила Cobol 60. [...] [Грейс Хоппер] не участвовала в его работе, за исключением общего руководства, которое она давала своим сотрудникам, являвшимся прямыми членами комитета. Таким образом, хотя ее косвенное влияние было очень важным, к сожалению, часто повторяющиеся заявления о том, что «Грейс Хоппер разработала Cobol» или «Грейс Хоппер была соразработчиком Cobol» или «Грейс Хоппер — мать Cobol», просто неверны.
  2. ^ Технический стандарт, язык COBOL (PDF) . X/Open Company Ltd., Великобритания, декабрь 1991 г. ISBN 1-872630-09-X.
  3. ^ abc Saade, Henry; Wallace, Ann (октябрь 1995 г.). "COBOL '97: A Status Report". Журнал доктора Добба . Архивировано из оригинала 22 апреля 2014 г. Получено 21 апреля 2014 г.
  4. ^ ab Arranga, Edmund C.; Coyle, Frank P. (февраль 1998). Объектно-ориентированный COBOL. Cambridge University Press . стр. 15. ISBN 978-0132611404Объектно -ориентированный стиль COBOL отражает влияние Smalltalk и C++.
  5. ^ Арранга, Эдмунд К.; Койл, Фрэнк П. (март 1997 г.). «Cobol: Perception and Reality». Computer . 30 (3): 127. doi :10.1109/2.573683. ISSN  0018-9162.
  6. ^ Imajo, Tetsuji; et al. (сентябрь 2000 г.). COBOL Script: бизнес-ориентированный язык сценариев . Enterprise Distributed Object Computing Conference. Макухари, Япония: IEEE. doi :10.1109/EDOC.2000.882363. ISBN 0769508650.
  7. ^ Хо, Вин Хонг (7 мая 2007 г.). «Введение в EGL» (PDF) . IBM Software Group. Архивировано из оригинала (PDF) 13 января 2019 г. Получено 12 января 2019 г.
  8. ^ Радин, Джордж (1978). Вексельблат, Ричард Л. (ред.). Ранняя история и характеристики PL/I . История языков программирования. Academic Press (опубликовано в 1981 г.). стр. 572. doi :10.1145/800025.1198410. ISBN 0127450408.
  9. ^ "Что такое PL/B - язык программирования для бизнеса?". sysmaker.com . Infopro, Inc . Получено 22 апреля 2022 г. ... преобразование в альтернативный, расширенный COBOL или в ANSI COBOL очень сложно, если вообще возможно
  10. ^ abc Mitchell, Robert L. (4 октября 2006 г.). "Cobol: Not Dead Yet". Computerworld . Получено 27 апреля 2014 г. .
  11. ^ Митчелл, Роберт Л. (14 марта 2012 г.). «Утечка мозгов: куда идут системы Cobol отсюда». Computerworld . Получено 9 февраля 2015 г.
  12. ^ Энсменгер, Натан Л. (2009). Компьютерные парни берут верх: компьютеры, программисты и политика технической экспертизы. MIT Press . стр. 100. ISBN 978-0262050937. LCCN  2009052638.
  13. ^ ISO/IEC JTC 1/SC 22/WG 4 2023.
  14. ^ Фергюсон, Эндрю. «История языков программирования». cs.brown.edu . Получено 12 марта 2018 г. .
  15. ^ «Программирование на COBOL для мэйнфреймов».
  16. ^ Гроенфельдт, Том. «Covid ускоряет миграцию мэйнфреймов банков в облако». Forbes .
  17. ^ Бейер 2009, стр. 282.
  18. Гюрер, Дениз (1 июня 2002 г.). «Женщины-пионеры в компьютерной науке». SIGCSE Bull . 34 (2): 175–180. doi :10.1145/543812.543853. ISSN  0097-8418. S2CID  2577644.
  19. ^ Бейер 2009, стр. 281–282.
  20. ^ Саммет 1978а, стр. 200.
  21. ^ Flahive, Paul (24 мая 2019 г.). «Как COBOL по-прежнему поддерживает мировую экономику в свои 60 лет». Texas Public Radio . Архивировано из оригинала 24 мая 2019 г. Получено 19 июля 2019 г. ( Грейс Хоппер) Код, прозванный Бабушкой Кобол, был основан на некоторых из ее ранних работ. Она сказала — услышав слухи — один из ее соавторов пошел и купил гранитный надгробный камень. «Он приказал вырезать слово COBOL спереди. Затем он отправил его экспресс-доставкой мистеру Филлипсу в Пентагон». Розыгрыш Чарльза Филлипса, руководителя проекта в министерстве обороны, привлек внимание властей и стал поворотным моментом, как она сказала. COBOL впоследствии стал самым широко используемым и самым долговечным компьютерным языком в истории.
  22. ^ Бейер 2009, стр. 283.
  23. ^ Бейер 2009, стр. 284.
  24. ^ "Ранние заседания конференции по языкам систем данных". IEEE Annals of the History of Computing . 7 (4): 316–325. 1985. doi :10.1109/MAHC.1985.10047. S2CID  35625728.
  25. ^ abcde Sammet 2004, стр. 104.
  26. ^ Бейер 2009, стр. 286.
  27. ^ ab Conner 1984, стр. ID/9.
  28. ^ Саммет 1978а, стр. 201.
  29. ^ abcd Бемер 1971, стр. 132.
  30. ^ Бейер 2009, стр. 288.
  31. ^ Саммет 1978а, стр. 203.
  32. ^ CODASYL 1969, § I.2.1.1.
  33. ^ Саммет 1978а, стр. 204.
  34. ^ CODASYL 1969, § I.1.2.
  35. ^ Бейер 2009, стр. 290.
  36. ^ Сэммет, Жан (1978). «Ранняя история COBOL». ACM SIGPLAN Notices . 13 (8): 121–161. doi :10.1145/960118.808378. S2CID  10743643.
  37. ^ Саммет 1978а, стр. 217.
  38. Адамс, Вики Портер (5 октября 1981 г.). «Капитан Грейс М. Хоппер: Мать COBOL». InfoWorld . Том 3, № 20. стр. 33. ISSN  0199-6649.
  39. Беттс, Митч (6 января 1992 г.). «Грейс Хоппер, мать Кобола, умерла». Computerworld . 26 (1): 14.
  40. ^ Лор, Стив (2008). Перейти к: История математиков, игроков в бридж, инженеров, шахматных волшебников, ученых-независимых и иконокластов — программистов, которые создали революцию программного обеспечения. Basic Books . стр. 52. ISBN 978-0786730766.
  41. ^ "Первопроходец в области разработки программного обеспечения и соавтор Cobol". The Irish Times .
  42. ^ ab Beyer 2009, стр. 292.
  43. ^ Бемер 1971, стр. 131.
  44. ^ Бейер 2009, стр. 296.
  45. ^ Саммет 1978а, стр. 221.
  46. ^ Бейер 2009, стр. 291.
  47. ^ "Устная история капитана Грейс Хоппер" (PDF) . Музей компьютерной истории . Декабрь 1980 г. стр. 37. Архивировано из оригинала (PDF) 25 декабря 2017 г. . Получено 28 июня 2014 г. .
  48. ^ Саммет 1978а, стр. 218.
  49. ^ Маркотти 1978a, стр. 268.
  50. ^ Саммет 1978a, стр. 205–206.
  51. ^ ab Sammet 1978a, Рисунок 8.
  52. ^ Саммет 1978a, стр. 230–231.
  53. ^ ISO/IEC JTC 1/SC 22/WG 4 2001, стр. 846.
  54. ^ Саммет 1978а, стр. 220.
  55. ^ Саммет 1978а, стр. 228.
  56. ^ Саммет 1978а, стр. 210.
  57. Бемер 1971, стр. 132: Мы не можем найти ни одного человека, который признался бы в создании аббревиатуры «COBOL» .
  58. ^ Sammet 1978a, стр. 210: На следующий день название COBOL было окончательно согласовано как аббревиатура от COmmon Business Oriented Language. К сожалению, в моих записях не указано, кто сделал это предложение .
  59. ^ Салливан, Патрисия (25 июня 2004 г.). «Компьютерный пионер Боб Бемер, 84». The Washington Post . стр. B06 . Получено 28 июня 2014 г.
  60. ^ "THE COBOL REPORT - Интервью с Бобом Бемером - отцом COBOL". Архивировано из оригинала 2 апреля 2018 года.
  61. ^ "THE COBOL REPORT - Интервью с Бобом Бемером - отцом COBOL". Архивировано из оригинала 23 декабря 2003 года.
  62. ^ Бейер 2009, стр. 293.
  63. ^ Бейер 2009, стр. 294.
  64. ^ Надгробие COBOL. Музей истории компьютеров. 1960. Получено 29 июня 2014 г.
  65. ^ "История надгробия COBOL" (PDF) . Отчет Музея компьютеров . 13 : 8–9. Лето 1985 г. Архивировано (PDF) из оригинала 3 апреля 2014 г. . Получено 29 июня 2014 г. .
  66. ^ Бемер 1971, стр. 130.
  67. ^ Бейер 2009, стр. 289.
  68. ^ CODASYL 1969, § I.1.1.
  69. Браун 1976, стр. 47.
  70. ^ abc Bemer 1971, стр. 133.
  71. ^ ab Beyer 2009, стр. 297.
  72. Уильямс, Кэтлин Брум (10 ноября 2012 г.). Грейс Хоппер: Адмирал Киберморя. Издательство Военно-морского института США. ISBN 978-1612512655. OCLC  818867202.
  73. ^ Compaq Computer Corporation: Compaq COBOL Reference Manual , Order Number: AA–Q2G0F–TK October 2000, Page xviii; Fujitsu Corporation: Net Cobol Language Reference , Version 15, January 2009; IBM Corporation: Enterprise COBOL for z/OS Language Reference , Version 4 Release 1, SC23-8528-00, December 2007
  74. Гарфанкел, Джером (11 ноября 1984 г.). «В защиту Cobol». Computerworld . 18 (24): ID/19.
  75. ^ Pratt, Terrence W. (1975). Языки программирования: проектирование и реализация . Englewood Cliffs, Нью-Джерси: Prentice Hall. стр. 361–362, 381–382. ISBN 0-13-730432-3.
  76. ^ ab Bemer 1971, стр. 134.
  77. Браун 1976, стр. 48.
  78. ^ CODASYL 1969, § I.2.2.4.
  79. ^ CODASYL 1969, § I.2.3.
  80. ^ abcd Фоллет, Роберт Х.; Сэммет, Джин Э. (2003). "Стандарты языков программирования" . В Ралстоне, Энтони; Рейли, Эдвин Д.; Хеммендингере, Дэвид (ред.). Энциклопедия компьютерных наук (4-е изд.). Wiley. стр. 1467. ISBN 978-0470864128.
  81. ^ ab Beyer 2009, стр. 301.
  82. ^ ab Brown 1976, стр. 49.
  83. Браун 1976, стр. 52.
  84. Тейлор, Алан (2 августа 1972 г.). «Мало кто осознает растраченные впустую ресурсы местных школ DP». Computerworld . 6 (31): 11.
  85. ^ Triance, JM (1974). Программирование на языке COBOL: курс из двенадцати телевизионных лекций. Manchester University Press. стр. 87. ISBN 978-0719005923.
  86. ^ Кляйн 2010, стр. 16.
  87. ^ Бэрд, Джордж Н.; Оливер, Пол (май 1977 г.). «Стандарт 1974 г. (X3.23–1974)». Стандарты языков программирования — кому они нужны? (PDF) (Отчет). Министерство ВМС . стр. 19–21. Архивировано (PDF) из оригинала 7 января 2014 г. . Получено 7 января 2014 г. .
  88. Каллетон, Джон Р. младший (23 июля 1975 г.). «Неравномерная доступность — проблема...» Computerworld . 9 (30): 17.
  89. Симмонс, Уильямс Б. (18 июня 1975 г.). «Неужели автор отчетов на языке Cobol действительно промахнулся?». Computerworld . 9 (25): 20.
  90. Шур, Рита (26 января 1981 г.). «Пользователь угрожает иском из-за Ansi Cobol-80». Computerworld . 15 (4): 1, 8.
  91. Шур, Рита (26 октября 1981 г.). «DPMA выступает против проекта Cobol». Computerworld . 15 (43): 1–2.
  92. ^ abc Gallant, John (16 сентября 1985 г.). «Пересмотренный стандарт Cobol может быть готов в конце 1985 г.». Computerworld . 19 (37): 1, 8.
  93. ^ ab "Эксперт рассматривает стандарт Cobol 85". Computerworld . 19 (37): 41, 48. 16 сентября 1985 г.
  94. Пол, Лоис (15 марта 1982 г.). «Отклики на Cobol-80 в подавляющем большинстве отрицательные». Computerworld . 16 (11): 1, 5.
  95. Пол, Лоис (25 апреля 1983 г.). «Исследование выявило мало проблем при переходе на Cobol-8X». Computerworld . 17 (17): 1, 6.
  96. Джиллин, Пол (19 ноября 1984 г.). «Пользователи DEC получают преимущество при внедрении Cobol-80». Computerworld . 18 (47): 1, 6.
  97. ^ ClearPath Enterprise Servers (апрель 2015 г.). "COBOL ANSI-85 Programming Reference Manual" (PDF) . public.support.unisys.com . Unisys . Получено 29 апреля 2022 г. .
  98. ^ Гарфанкель 1987, стр. 150.
  99. ^ Рой, МК; Дастидар, Д. Гост (1 июня 1989 г.). "Особенности COBOL-85". Программирование на COBOL: проблемы и решения (2-е изд.). McGraw-Hill Education. стр. 438–451. ISBN 978-0074603185.
  100. ^ Робинсон, Брайан (9 июля 2009 г.). «Cobol остается старым резервом в агентствах, несмотря на то, что показывает свой возраст». FCW . Public Sector Media Group. Архивировано из оригинала 27 апреля 2014 г. Получено 26 апреля 2014 г.
  101. ^ ab "COBOL Standards". Micro Focus. Архивировано из оригинала 31 марта 2004 года . Получено 2 сентября 2014 года .
  102. ^ "NetCOBOL for .Net". netcobol.com . GTSoftware. 2013. Архивировано из оригинала 8 июля 2014 года . Получено 29 января 2014 года .
  103. ^ "Список возможностей Codasyl Cobol". Computerworld . 18 (37): ID/28. 10 сентября 1984 г. Получено 8 июня 2014 г.
  104. ^ ISO/IEC JTC 1/SC 22/WG 4 2001, Приложение F.
  105. ^ Кляйн 2010, стр. 21.
  106. ^ ab "JTC1/SC22/WG4 – COBOL". ISO. 30 июня 2010 г. Архивировано из оригинала 14 февраля 2014 г. Получено 27 апреля 2014 г.
  107. ^ Биллман, Джон; Клинк, Хуиб (27 февраля 2008 г.). «Мысли о будущем стандартизации COBOL» (PDF) . Архивировано из оригинала (PDF) 11 июля 2009 г. . Получено 14 августа 2014 г. .
  108. ^ ISO/IEC JTC 1/SC 22/WG 4 2014, Приложение E.
  109. ^ Schricker, Don (2 декабря 1998 г.). "J4: COBOL Standardization". Micro Focus. Архивировано из оригинала 24 февраля 1999 г. Получено 12 июля 2014 г.
  110. ^ abc ISO/IEC JTC 1/SC 22/WG 4 2023, § E.3.1.
  111. ^ abcde ISO/IEC JTC 1/SC 22/WG 4 2023, § E.3.2.
  112. ^ ISO/IEC JTC 1/SC 22/WG 4 2023, § 12.4.4.9.
  113. ^ ISO/IEC JTC 1/SC 22/WG 4 2023, § 8.7.2.
  114. ^ Кизиор, Рональд Дж.; Карр, Дональд; Хэлперн, Пол. «Есть ли у COBOL будущее?» (PDF) . Труды конференции по образованию в области информационных систем 2000 г. 17 (126). Архивировано из оригинала (PDF) 17 августа 2016 г. Получено 30 сентября 2012 г.
  115. ^ Уайт, Дуг (12 июля 1998 г.). «Часто задаваемые вопросы (FAQ) о проблеме Y2K». homepages.wmich.edu . Архивировано из оригинала 7 ноября 2021 г. . Получено 29 апреля 2022 г. Таким образом, основная проблема Y2K — это проблема неверных результатов при проведении математических расчетов с датами.
  116. ^ Каппельман, Леон А. (2000). «Некоторые стратегические благословения Y2K». IEEE Software . 17 (2): 42–46. doi :10.1109/52.841605.
  117. ^ Карр и Кизиор 2003, стр. 16.
  118. ^ Карр и Кизиор 2003, стр. 10.
  119. ^ "Утечка мозгов из Cobol: результаты опроса". Computerworld . 14 марта 2012 г. Получено 27 апреля 2014 г.
  120. ^ Powner, David A. (25 мая 2016 г.). «Федеральным агентствам необходимо решать проблему старения устаревших систем» (PDF) . Счетная палата США . стр. 18. Архивировано из оригинала (PDF) 15 июня 2016 г. . Получено 19 июля 2019 г. Несколько агентств, таких как Министерство сельского хозяйства (USDA), DHS, HHS, Министерство юстиции, Казначейство и VA, сообщили об использовании Common Business Oriented Language (COBOL) — языка программирования, разработанного в конце 1950-х и начале 1960-х годов — для программирования своих устаревших систем. Широко известно, что агентствам необходимо переходить на более современные, поддерживаемые языки, когда это уместно и осуществимо.
  121. ^ "COBOL blues". Reuters . Получено 8 апреля 2020 г.
  122. ^ Теплицки, Фил (25 октября 2019 г.). «Закрытие пробела в навыках программирования на COBOL». IBM Systems Magazine, IBM Z. Архивировано из оригинала 13 апреля 2020 г. Получено 11 июня 2020 г.
  123. Ли, Алисия (8 апреля 2020 г.). «Срочно требуются: люди, знающие компьютерный язык, которому полвека, чтобы штаты могли обрабатывать заявления о пособии по безработице». CNN . Получено 8 апреля 2020 г.
  124. Лонг, Хизер; Стайн, Джефф; Рейн, Лиза; Ромм, Тони (17 апреля 2020 г.). «Проверки стимулирования и другие меры по борьбе с коронавирусом затруднены устаревшими технологиями и сложным развертыванием правительства». The Washington Post . Получено 19 апреля 2020 г.
  125. ^ ISO/IEC JTC 1/SC 22/WG 4 2014, § 8.9.
  126. ^ "Таблица зарезервированных слов". Micro Focus Visual COBOL 2.2 COBOL Language Reference . Micro Focus . Получено 3 марта 2014 г. .
  127. ^ ISO/IEC JTC 1/SC 22/WG 4 2014, § 8.3.1.2.
  128. ^ ISO/IEC JTC 1/SC 22/WG 4 2014, § 8.3.2.
  129. ^ abcd Шнейдерман 1985, стр. 349.
  130. ^ Маккракен 1976, стр. 2, 6–9.
  131. ^ ab ISO/IEC JTC 1/SC 22/WG 4 2001, § F.2.
  132. ^ ISO/IEC JTC 1/SC 22/WG 4 2014, § D.18.2.
  133. ^ ISO/IEC JTC 1/SC 22/WG 4 2014, § D.18.
  134. ^ ISO/IEC JTC 1/SC 22/WG 4 2014, стр. 108.
  135. ^ ISO/IEC JTC 1/SC 22/WG 4 2014, стр. 896.
  136. ^ ISO/IEC JTC 1/SC 22/WG 4 2014, § D.2.1.
  137. ^ "File Organizations". File Handling . Micro Focus. 1998. Архивировано из оригинала 4 марта 2016 года . Получено 27 июня 2014 года .
  138. ^ ISO/IEC JTC 1/SC 22/WG 4 2014, § 8.5.1.2.
  139. ^ Катлер 2014, Приложение А.
  140. ^ Хаббелл, Тейн (1999). Sams Teach Yourself COBOL за 24 часа . SAMS Publishing . стр. 40. ISBN 978-0672314537. LCCN  98087215.
  141. ^ Маккракен и Голден 1988, § 19.9.
  142. ^ Катлер 2014, § 5.8.5.
  143. ^ ISO/IEC JTC 1/SC 22/WG 4 2014, § 8.5.2.
  144. ^ ab ISO/IEC JTC 1/SC 22/WG 4 2014, § 14.9.24.
  145. ^ ISO/IEC JTC 1/SC 22/WG 4 2014, § 14.9.35.
  146. ^ ISO/IEC JTC 1/SC 22/WG 4 2014, § 13.18.40.
  147. ^ ISO/IEC JTC 1/SC 22/WG 4 2014, § 13.18.60.3.
  148. ^ ISO/IEC JTC 1/SC 22/WG 4 2014, стр. 855.
  149. ^ МакКракен 1976, стр. 338.
  150. ^ ISO/IEC JTC 1/SC 22/WG 4 2014, § 14.4.
  151. ^ ISO/IEC JTC 1/SC 22/WG 4 2014, § 14.6.3.
  152. ^ Филд, Джон; Рамалингам, Г. (сентябрь 1999 г.). Определение процедурной структуры в программах на языке Cobol (PDF) . PASTE '99. doi :10.1145/381788.316163. ISBN 1581131372. Архивировано (PDF) из оригинала 24 декабря 2010 года.
  153. ^ abc Veerman, Niels; Verhoeven, Ernst-Jan (ноябрь 2006 г.). "Обнаружение минных полей Cobol" (PDF) . Software: Practice and Experience . 36 (14). doi :10.1002/spe.v36:14. S2CID  18619757. Архивировано из оригинала (PDF) 6 марта 2007 г.
  154. ^ ISO/IEC JTC 1/SC 22/WG 4 2014, § 14.9.
  155. ^ ISO/IEC JTC 1/SC 22/WG 4 2014, §§ 14.9.4, 14.9.22.
  156. ^ ISO/IEC JTC 1/SC 22/WG 4 2014, § D.6.5.2.2.
  157. ^ ISO/IEC JTC 1/SC 22/WG 4 2014, § 14.9.13.1.
  158. ^ ISO/IEC JTC 1/SC 22/WG 4 2014, §14.9.35.1.
  159. ^ ISO/IEC JTC 1/SC 22/WG 4 2014, стр. 899.
  160. ^ ab McCracken & Golden 1988, § 8.4.
  161. ^ Примеры поддержки компилятором ALTERможно увидеть ниже:
    • Тиффин, Брайан (18 сентября 2013 г.). "Сентябрь 2013". GNU Cobol . Архивировано из оригинала 5 мая 2014 г. . Получено 5 января 2014 г. .
    • "Оператор ALTER". Micro Focus Visual COBOL 2.2 для Visual Studio 2013 Справочник языка COBOL . Micro Focus . Получено 5 января 2014 г. .
    • "ALTER Statement (Nucleus)" (PDF) . COBOL85 Reference Manual . Fujitsu. Ноябрь 1996 г. стр. 555. Архивировано из оригинала (PDF) 6 января 2014 г. Получено 5 января 2014 г.
    • "ALTER Statement". Enterprise COBOL for z/OS Language Reference . IBM. Июнь 2013 г. Получено 5 января 2014 г.
  162. ^ ISO/IEC JTC 1/SC 22/WG 4 2001, § F.1.
  163. ^ МакКракен 1976, стр. 355.
  164. ^ Moseley, Jay (17 января 2015 г.). "COBOL Compiler from MVT" . Получено 19 июля 2015 г. .
  165. ^ Дейкстра, Эдсгер В. (18 июня 1975 г.). «Как мы говорим правду, которая может ранить?». Техасский университет в Остине. EWD498. Архивировано из оригинала 2 мая 2017 г. Получено 29 августа 2007 г.
  166. ^ Томпкинс, Х. Э. (1983). «В защиту преподавания структурированного COBOL как компьютерной науки». ACM SIGPLAN Notices . 18 (4): 86–94. doi : 10.1145/948176.948186 . S2CID  33803213.
  167. ^ ab Riehle 1992, стр. 125.
  168. Шнейдерман 1985, стр. 349–350.
  169. ^ Кофлан, Майкл (16 марта 2014 г.). Beginning COBOL for Programmers. Apress. стр. 4. ISBN 978-1430262534. Получено 13 августа 2014 г.
  170. ^ Саммет 1978б, стр. 258.
  171. ^ Риле 1992, стр. 126.
  172. ^ Риле 1992, стр. 127.
  173. ^ "COBOL и устаревший код как системный риск | голый капитализм". 19 июля 2016 г. Получено 23 июля 2016 г.
  174. ^ Лэммель, Ральф; Верхоеф, Крис (ноябрь–декабрь 2001 г.). «Cracking the 500-language problem» (PDF) . IEEE Software . 18 (6): 79. doi :10.1109/52.965809. hdl :1871/9853. Архивировано из оригинала (PDF) 19 августа 2014 г.
  175. ^ Хаукинс, Т.Дж.; Харанди, М.Т. (апрель 1979 г.). «К более портативному COBOL». The Computer Journal . 22 (4): 290. doi : 10.1093/comjnl/22.4.290 .
  176. ^ Гарфанкель 1987, стр. 11.
  177. ^ Гарфанкель 1987, стр. 15.
  178. ^ Raymond, Eric S. (1 октября 2004 г.). "COBOL". The Jargon File, версия 4.4.8 . Архивировано из оригинала 30 августа 2014 г. . Получено 13 декабря 2014 г. .
  179. Браун 1976, стр. 53.
  180. ^ CODASYL 1969, § II.1.1.
  181. ^ Шнейдерман 1985, стр. 350.
  182. Саммет 1961, стр. 381.
  183. ^ ab Conner 1984, стр. ID/10.
  184. ^ Маркотти 1978a, стр. 263.
  185. ^ Коннер 1984, стр. ID/14.
  186. Саммет 1961, стр. 380.
  187. ^ Маркотти 1978a, стр. 266.
  188. ^ Саммет 1978б, стр. 255.
  189. ^ Шнейдерман 1985, стр. 348–349.
  190. ^ Конвей, Ричард; Грайс, Дэвид (1973). Введение в программирование: структурированный подход с использованием PL/1 и PL/C . Кембридж, Массачусетс: Winthrop Publishers. стр. 341. ISBN 0-87626-405-4.
  191. ^ "COBOL Logic and Programming, third edition 1974". Архивировано из оригинала 5 марта 2016 года . Получено 25 февраля 2016 года .
  192. ^ Шнейдерман 1985, стр. 351.
  193. ^ «Интервью: защитник Cobol». Computerworld . 18 (37): ID/29–ID/32. 10 сентября 1984 г. Получено 8 июня 2014 г.
  194. ^ Pratt, Terrence W.; Zelkowitz, Marvin V. (1984). Языки программирования: проектирование и реализация (2-е изд.). Englewood Cliffs, NJ : Prentice Hall. ISBN 0136780121.
  195. ^ Карр и Кизиор 2003, стр. 13.
  196. ^ «Академии нужна дополнительная поддержка для решения проблемы дефицита ИТ-навыков» (пресс-релиз). Micro Focus. 7 марта 2013 г. Получено 4 августа 2014 г.
  197. ^ Сэммет, Жан; Гарфанкель, Джером (октябрь 1985 г.). «Краткое изложение изменений в COBOL, 1960–1985». Annals of the History of Computing . 7 (4): 342. doi :10.1109/MAHC.1985.10033. S2CID  17940092.
  198. ^ Кук, Маргарет М. (июнь 1978 г.). Гош, Сакти П.; Лю, Леонард И. (ред.). Data Base Facility for COBOL 80 (PDF) . Национальная компьютерная конференция 1978 г. Анахайм, Калифорния: AFIPS Press. стр. 1107–1112. doi :10.1109/AFIPS.1978.63. LCCN  55-44701 . Получено 2 сентября 2014 г. Самая ранняя дата, когда новый стандарт COBOL мог быть разработан и одобрен, — 1980 год [...].
  199. ^ "Резолюции встречи WG4 24 – 26–28 июня 2003 г., Лас-Вегас, Невада, США". 11 июля 2003 г. стр. 1. Архивировано из оригинала (doc) 8 марта 2016 г. Получено 29 июня 2014 г. Пересмотр стандарта COBOL в июне 2008 г.
  200. Бабкок, Чарльз (14 июля 1986 г.). «Стандартные дополнения к Cobol разоблачены». Computerworld . 20 (28): 1, 12.
  201. ^ Маркотти 1978b, стр. 274.
  202. ^ Это можно увидеть в:
    • "Visual COBOL". IBM PartnerWorld . IBM . 21 августа 2013 г. Архивировано из оригинала 12 июля 2014 г. . Получено 5 февраля 2014 г. Micro Focus Visual COBOL обеспечивает следующее поколение разработки и развертывания COBOL для Linux x86-64, Linux для System z, AIX, HP/UX, Solaris и Windows.
    • "IBM COBOL Compiler Family". IBM . Получено 11 сентября 2024 г. .
    • "GnuCOBOL - GNU Project" . Получено 11 сентября 2024 г. .
  203. ^ Coughlan, Michael (2002). "Введение в COBOL". Архивировано из оригинала 5 марта 2023 года.
  204. ^ "Gartner Group Studies". 1997-2001.state.gov . Офис управления программами 2000 года. 2000 . Получено 23 апреля 2022 г. .
  205. ^ Энгельманн, Виктор (8 апреля 2021 г.). "COBOL Fact-Check". cobsolete.de . COBSOLETE . Получено 23 апреля 2022 г. .
  206. ^ «Что нас ждет в будущем». CIO . International Data Group. 15 декабря 1995 г. – 1 января 1996 г. стр. 82.

Источники

Внешние ссылки