Знакомимся с COBOL — ч.1
Этой статьей я планирую начать целый цикл, который может быть со временем соберется в книгу. Информация про COBOL на русском представлена фактически статьей в Википедии и двумя советскими ГОСТами. Вы можете спросить меня зачем я начинаю “раскапывать труп” и прочие аналогичные вопросы. Ответ прост – а просто так. Потому что я люблю COBOL, потому что он вовсе не мертвый, потому что он интересный, потому что это часть важной истории и он продолжит оставаться частью будущего. Потому что COBOL – это событие. И пусть его ругает Дейкстра и другие, это ничуть не умаляет его объемов и его влияния на ИТ в бизнес.
Хватит введения, перейдем к самому изучаемому. COBOL – один из старейших языков программирования, расшифровывается его название как COmmon Business-Oriented Language, появившийся в 1959 году, благодаря “бабушке” Грейс Хоппер, и в основном применявшийся в различных финансовых и административных системах. Более подробно можно узнать его историю в ближайшем интернет-поисковике или (ну прям для совсем ленивых) — notes.sochi.org.ru/1333 (рус. яз.) или en.wikipedia.org/wiki/COBOL (eng.).
Для того, чтобы приступить к практическому изучению языка нам необходимо две вещи – редактор текстовый (1 шт.) и компилятор (1 шт.)
Если с редакторами все просто, тут подойдет даже Notepad и vi, emacs, nano и т.д. и т.п. Главное требование “классическое” это должен быть текстовые редактор, а не тексовый процессор (не помню что еще писали в достаточно старых книгах на эту тему 😉 ).
С компиляторами несколько сложнее, есть коммерческие, которые стоят безумных денег, есть студенческие версии коммерческих, есть версии старых компиляторов, есть даже несколько компиляторов с открытым кодом. Выбор остается за читателем, я лишь приведу список со своими комментариями.
www.opencobol.org OpenCOBOL (open-source, моя личная рекомендация, мультиплатформенный)
tiny-cobol.sourceforge.net TinyCobol (open-source, по сообщению автора 1 января 2011 года – прекратил развитие, да и до этого был не особо активен)
sourceforge.net/projects/cobolforgcc Cobol for GCC (open-source, преальфа, последние обновления 2009г.)
homepages.paradise.net.nz/jsoeberg COBOL 12 (freeware, 16-битный компилятор под DOS / Windows)
cev.cemotel.cz/cobol/cb_en/mx_all.htm Cevela MX COBOL (freeware, Windows)
www.microfocus.com/promotions/wwemvctd0510/default.aspx?page=form Micro Focus Visual COBOL R2 (trial, windows)
www.thekompany.com/products/kobol KOBOL (trial, linux, windows)
Также есть богатый выбор древних компиляторов под DOS.
Лично я использую OpenCOBOL, что в какой то мере единственный реальный вариант, на данный момент.
Теперь, когда вы все установили и готовы ринуться в бой – начнем. Естесственно, с Hello World.
Наберем в редакторе следующий код:
000100 IDENTIFICATION DIVISION. 000200 PROGRAM-ID. HELLOWORLD. 000300* --- Это пустая строчка. --- 000400 ENVIRONMENT DIVISION. 000500 DATA DIVISION. 000600 PROCEDURE DIVISION. 000700 BEGIN. 000800 DISPLAY “Hello World!”. 000900 STOP RUN.
Благополучно сохраняем это в файл с расширением .cob (или .cbl) – это самые популярные, исторические и логические расширения.
Далее в терминале или командной строке набираем cobc -x и получаем исполняемый файл. Запускаем его и оооооп!
Теперь давайте разберем этот код.
Начнем с внешнего вида. Это “классический” код. Со всеми требованиями, что были и 50 лет назад. Почему его использую я:
1. Код в таком формате подойдет любому компилятору.
2. Это “олдскулл”, “крутатенюшка” и просто мне нравится.
3. Всегда лучше начинаться со стандартных требований, а потом уже смотреть на возможности компилятора и собственный вкус.
Строка COBOL программы состоит из 80 символов.
Символ 1-6: номер строки (необязателен)
Символ 7: “индикатор”
* — строка комментарий,
— — строка “продолжение”,
D- строка debug.
Символ 8 – 11: Зона А. В ней должны начинаться DIVISION’ы, SECTION’ы, имена и заголовки параграфов, а также индикаторы и номера “уровней” (это все рассмотрим позже).
Символ 12-72: Зона Б. Собственно здесь должны начинаться сами по себе выражения “кода”.
Символ 73-80: Зона комментария. Не обрабатывается компилятором и полностью предоставлена програмисту.
С горизонтальной плоскостью разобрались, перейдем к вертикали.
Каждая COBOL программа содержит 4 раздела – DIVISION, идут они в строгом порядке и содержат определенные элементы.
DIVISION ПЕРВЫЙ. Вдохновляющий.
IDENTIFICATION DIVISION. — описывает программу и содержит такие параграфы, как
PROGRAM-ID. Helloworld. AUTHOR. Beginner. INSTALLATION. MyLocalCobolComputer. DATE-WRITTEN. 19/03/2011. DATE-COMPILED. 19/03/2011. SECURITY. Iwillnottellanybodythiscode.
Содержимое этих параграфов представляет собой обычный комментарий и в принципе записать туда можно хоть “2011 год от Рождества Христова”.
DIVISION ВТОРОЙ. Мистический.
ENVIRONMENT DIVISION. — Описывает ту среду, как и следует из названия, в которой пишется программа. Состоит из двух секций.
CONFIGURATION SECTION. Которая включает в себя параграфы SOURCE-COMPUTER. и OBJECT-COMPUTER. и SPECIAL-NAMES. Первые два несут сугубо комментирующую функцию и описывают на каком компьютере, для какого компьютера программа написана.
SPECIAL-NAMES. представляет собой достаточно глубинную штуку, которая будет рассмотрена позже (или можете поискать пока на эту тему сами информацию).
INPUT-OUTPUT SECTION. Описывает, как следует из названия ввод-вывод, очень нужно, очень важно и очень скоро мы с этим уже встретимся. Включает в себя параграфы FILE-CONTROL. и I-O-CONTROL.
DIVISION ТРЕТИЙ. Законодательный.
DATA DIVISION. — Содержит описания всех переменных. Включает в себя 4 секции:
FILE SECTION. — описывает структуру файлов.
WORKING-STORAGE SECTION. — описывает переменные.
LOCAL-STORAGE SECTION. — описывает переменные, которые создаются и инициализируются каждый раз при выполнении (поподробней в следующие разы).
LINKAGE SECTION. — описывает данные, которые мы получаем при вызове других программ.
DIVISION ЧЕТВЕРТЫЙ. Рабочий.
PROCEDURE DIVISION. — Содержит “саму” программу, которая делится на пользовательские секции, параграфы, которые и содержат выражения. В нашем случае
BEGIN. — пользовательский параграф.
DISPLAY “Hello World!”.
STOP RUN. Собственно сами выражения.
И напоследок. Каждое выражение должно заканчиваться “точкой”.
Спасибо за внимание. Жду вопросов в комментариях, которые обязательно будут отвечены и включены либо в следующие, либо в правку этой статьи.
Воронцов “nerfur” Вячеслав. 2011.
Когда создали язык программирования cobol
В 1950-е году было очень мало стандартных языков программирования, и большинство компьютеров работали на персональных вариантах. В 1959 году Министерство обороны США собрало 40 экспертов из правительства и компьютерной индустрии для создания Конференции по языкам систем обработки данных (CODASYL). Они вдохновились стандартным языком программирования FORTRAN, который использовался в научном сообществе, а также языками MATH-MATIC и FLOW-MATIC. В 1960 году COBOL был готов к коммерческому запуску, а к 1970 стал самым популярным компьютерным языком мира.
Сейчас COBOL считается устаревшим языком, и его больше не поддерживают новые системы. Тем не менее, он по-прежнему полезен. На COBOL до сих пор работают различные бизнес-системы, например, банковские.
Интересные отсылки
- В 1959 году, разочаровавшись в скорости разработки языка, один из членов CODASYL по имени Говард Бромберг заказал за $15 надгробие с надписью COBOL и отправил его Чарльзу Филипсу, директору отдела системных исследований Министерства обороны США.
- В фильме 1984 года «Терминатор» перед глазами главного героя появляются кусочки кода COBOL неизвестного происхождения. YouTube-канал Behind the Screens изучил их и обнаружил, что они были напечатаны в выпусках компьютерного журнала Nibble за 1984 год, а в некоторых из них были указаны координаты четырех советских спутников.
Почему бы не обновиться?
Сейчас с трудом можно найти новых программистов на COBOL, поэтому возникает очевидный вопрос: почему бы не перейти на более современные технологии?
Ответ прост: дорого и рискованно. COBOL работает с банковской индустрией, где любая ошибка может сильно ударить как по прибыли, так и по репутации, о чем недавно узнал на своем опыте британский банк TSB. В его мобильной банковской системе произошел сбой, из-за которого люди, зайдя в свой аккаунт, видели чужие данные.
Исследования показывают, что менее опасно дорабатывать существующие системы. Но все же любое изменение старых систем, в которых заложены десятилетия корпоративных данных, может быть рискованным, потому что сейчас становится все меньше программистов, хорошо разбирающихся в COBOL.
Австралийский опыт
В 2012 году Банк содружества начал заменять систему COBOL на программу, разработанную немецкой компанией SAP. После того, к чему это привело, вряд ли многие банки захотят последовать примеру Австралии.
Процесс занял пять лет и обошелся в более чем $749,9 миллиона. За это время произошло множество неприятностей. Например, в июне 2015-го в системе произошел сбой, из-за чего пропало 600 тысяч платежей и операций по списанию средств. Через три месяца случился еще один крупный сбой, из-за которого клиенты банка не могли пользоваться карточками, платежными приложениями и оплачивать счета. Некоторые успели понадеяться, что банк простил им задолженности, потому что на какое-то время у них обнулился остаток долга.
Другие древние языки
Можно ли считать COBOL «мертвым» языком программирования? Как ответил на Quora один программист, не существует мертвых языков, но зато есть много зомби. Они не добились такого же успеха, как COBOL, но их все равно можно найти в пыльных математических лабораториях различных университетов.
- ADA — названный в честь первой программистки Ады Лавлейс, этот язык был разработан в середине 1970-х Министерством обороны США в попытке объединить все другие языки. Но этот язык старался выполнить слишком много функций, из-за чего со временем вышел из обихода. Им до сих пор пользуются некоторые медицинские эксперты.
- ALGOL — гик-родственник COBOL (используется в науке, а не в бизнесе) и предок Pascal. Благодаря ALGOL в мире программирования появились блоки кода (“begin/end”) и вложенный (nested) код.
- APL — создан для упрощения сложных математических вычислений. Многие считают, что у него серьезные недостатки в виде чрезмерного разнообразия символов и отсутствия форматирования. APL до сих пор используется на кафедрах физики и математики.
- LISP — разработан в 1950-е годы первыми исследователями искусственного интеллекта. Получил распространение благодаря своему списку указателей, который был очень удобен для работы с множеством данных разного типа в одной структуре. Некоторые считают, что LISP стал предвестником технологий, которые используются в big data.
- Pascal — Никлаус Вирт разработал этот язык для обучения концептам структурированного программирования. Pascal сыграл важную роль в появлении первых программ на персональных компьютерах, и у него до сих пор есть фанаты. Однако он потерял свою привлекательность после появления объектно-ориентированного программирования.
- PL/I — компания IBM попыталась создать единый язык, который объединял в себе функции COBOL, ALGOL и FORTRAN. Он был слишком устаревшим и так и не прижился.
Материалы по теме: