Язык программирования cobol уроки

Современный COBOL: руководство по реализации микросервиса

Язык программирования cobol уроки. Смотреть фото Язык программирования cobol уроки. Смотреть картинку Язык программирования cobol уроки. Картинка про Язык программирования cobol уроки. Фото Язык программирования cobol уроки

Предварительные условия

Вы знаете основные принципы, методы и стандарты COBOL. В этом руководстве мы используем GnuCOBOL — бесплатный компилятор COBOL, реализующий значительную часть стандартов COBOL 85, COBOL 2002, COBOL 2014 и X/Open COBOL, а также многие расширения, включённые в другие компиляторы COBOL.

Вы знакомы с протоколом HTTP — форматами запросов и ответов.

У вас есть аккаунт на GitHub для публикации микросервисов.

Полный исходный код этого руководства на GitHub.

Спецификации

Одна из сильных сторон COBOL — это десятичные вычисления. В этом руководстве мы создадим высокоточный микросервис обмена валют, обрабатывающий HTTP API и возвращающий сумму в евро в формате JSON.

Обменные курсы — это курсы евро, опубликованные Европейским центральным банком. Ежедневные обновления курса и поддержка многопоточности выходят за рамки этого руководства.

Структура

Наконец, создадим пустые файлы microservice.cbl и microservice-test.cbl в каталогах src и tests соответственно. Они понадобятся нам позже.

Зависимости

Наш микросервис зависит от:

Этот файл, уже известный как COBOL Copybook, включает в себя все прямые и унаследованные зависимости для микросервиса. Мы используем его внутри нашей программы на следующем этапе.

Программа

По сути наша программа должна:

Программа receive-tcp — это сервер, который принимает входящие соединения, считывает содержимое запроса в буфер и делится буфером с программой обратного вызова. Обратный вызов парсит содержимое и заменяет буфер ответом. Сервер отправляет ответ обратно клиенту. Полный листинг программы на GitHub.

Давайте установим среду выполнения GnuCOBOL Docker:

В этом руководстве мы используем GnuCOBOL 2.2, единственный стабильный GnuCOBOL компилятор, доступный в настоящее время в бинарных дистрибутивах. Вы так же можете найти его и установить в исходном формате на свой компьютер.

Наш микросервис будет следовать практике непрерывной интеграции, когда разработчики интегрируют исходный код в общий репозиторий, где каждая интеграция тестируется автоматически. Для тестирования воспользуемся простой тестовой средой GCBLUnit, уже установленной ранее как зависимость для отладки.

Давайте создадим Dockerfile микросервиса:

Мы открываем 8000 порт и выполняем работу microservice-test при каждой сборке образа. Последний элемент всей картины — это тест-файл microservice-test.cbl :

Для целей тестирования я подготовил минимальное CSV содержимое только с одной валютой — USD. Как видно из определения буфера, тест запрашивает конвертацию 1 USD. Мы ожидаем ненулевые HTTP-заголовки, а также обменную сумму с высокой точностью 0.8750437521876093. Последняя строка включает в себя основную тестируемую программу.

Контейнер

Создадим образ Docker:

Прекрасно! Наш образ Docker успешно прошёл тест, рассчитав 4 выражения, и готов к запуску:

Откроем http://localhost:8000/USD/99.99 и http://localhost:8000/ABC/1 в браузере и посмотрим, что произойдёт. Чтобы остановить и удалить контейнер, запустим:

GitHub

Заключение

Мы реализовали микросервис с помощью библиотеки Git, менеджера пакетов, модульного тестирования и виртуализации в рамках подхода непрерывной интеграции. COBOL, которому уже 60 лет, подходит для современной разработки программного обеспечения!

Источник

cobol Getting started with cobol

Remarks

COBOL is the COmmon Business Oriented programming Language.

Even though it has become a pronounceable name, COBOL is still treated as an acronym by the standards committee, and COBOL is the preferred spelling by the ISO and INCITS standards bodies.

Standard Specification

The current specification is

ISO/IEC 1989:2014 Information technology – Programming languages, their environments and system software interfaces – Programming language COBOL

That document was published in May of 2014 and can be purchased from various branches of standard bodies, officially homed at

Principal field of use

Business oriented. That usually means transaction processing. Banking, government agencies, and the insurance industry are major areas of COBOL application deployments. IBM mainframe systems usually have a COBOL compiler installed. There are upwards of 300 COBOL dialects in existence, with perhaps 10 or so versions taking the lion’s share of deployments. Most of these compilers are proprietary systems, but free software COBOL is also available.

Category

COBOL is a procedural, imperative, compiled programming language. As of the COBOL 2002 spec, Object Oriented features were added to the standard.

By design intent, COBOL is a very verbose programming language. Although algebraic form is allowed:

the initial intent was to use full words for computational descriptions and data manipulation:

This design decision has both champions and detractors. Some feel it is too verbose, while others argue that the syntax allows for greater readability in a business environment.

Decimal Math

COBOL is designed around decimal arithmetic, unlike most languages that use a binary internal representation. The COBOL spec calls for very precise fixed point decimal calculations, an aspect of the language that has been well regarded in financial sectors. COBOL also allows for USAGE BINARY, but leans towards decimal (base-10) representations.

History

COBOL dates back to the late 1950s, with initial implementations published in 1960.

U.S. Navy Rear Admiral Grace Hopper is often associated with COBOL, and championed on behalf of the language during the early stages of development. She was not the only person involved in the design and development of COBOL, by any means, but is often referred to as the Mother of COBOL.

Due to early backing by governments and large corporations, COBOL has been in wide use for many decades. It remains a point of pride for some, and a thorn for others, who see it as outdated. The truth likely lies somewhere in between these extreme views. When applied to transaction processing, COBOL is at home. When applied to modern web screens and networking applications it may not feel as comfortable.

Structure

COBOL programs are written in four separate divisions.

Data Descriptions

Being designed to handle decimal data, COBOL allows for PICTURE based data descriptions, in grouped hierarchies.

That defines balance as a signed eight digit value with two digits assumed after the decimal point. rate is three digits before and three digits after an assumed decimal point. show-balance is a numeric-edit field that will have a leading dollar sign, seven digits (zero suppressed) with at least one digit shown preceding two digits after a decimal point.

balance can be used in calculations, show-balance is only for display purposes and cannot be used in computational instructions.

Procedural statements

COBOL is a reserved keyword heavy language. MOVE, COMPUTE, MULTIPLY, PERFORM style long form words make up most of the standard specification. Over 300 keywords and 47 operational statements in the COBOL 2014 spec. Many compiler implementations add even more to the reserved word list.

Hello, world

The days of punch card layout and uppercase only inputs are far behind. Yet most COBOL implementations still handle the same code layout. Even current implementations follow the same (often even in uppercase,) compiled and in production.

A well-formatted modern implementation might look like:

With some implementations of COBOL, this can be shortened to:

This format usually requires compile time switches to put a COBOL compiler into a relaxed syntax mode, as some of the normally mandatory DIVISION statements are missing.

COBOL assumes FIXED format sources by default, even in the current specification.

ColumnArea
1-6Sequence Number Area
7Indicator Area
8-12Area A
12-72Area B
73-80Program Name Area

IBM mainframe text editors are still configured for this form in some cases.

Post 2002 and into COBOL 2014, Area A and B were merged and extended to column 255, and the Program Name Area was dropped.

ColumnArea
1-6Sequence Number Area
7Indicator Area
8-Program text Area

Column 8 thru an implementation defined column Margin R, is usually still limited to column 72, but allowed by spec to run up to column 255.

COBOL 2002 introduced FORMAT FREE source text. There is no Sequence Number Area, no Indicator Area, and source lines can be any length (up to an implementation defined Margin R limit, usually less than 2048 characters per line, commonly 255).

But the compiler starts out in FORMAT FIXED mode by default. There is usually a compilation switch or Compiler Directive Facility statement before free format source is recognized.

Where bbbbbb represents 6 blanks, or any other characters. (These are ignored as part of the initial default fixed format mode Sequence Number Area.)

Install gnu-cobol on Mac OS X

gnu-cobol is available via the homebrew system.

If you do not have the homebrew system installed, add it by typing, or copying and pasting into your terminal:

Once the command has finished, type:

That is it, you can now compile Cobol programs on your Mac.

Источник

Знакомимся с 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.

Наберем в редакторе следующий код:

Теперь давайте разберем этот код.

Начнем с внешнего вида. Это “классический” код. Со всеми требованиями, что были и 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. — описывает программу и содержит такие параграфы, как

Содержимое этих параграфов представляет собой обычный комментарий и в принципе записать туда можно хоть “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. Собственно сами выражения.

И напоследок. Каждое выражение должно заканчиваться “точкой”.

Спасибо за внимание. Жду вопросов в комментариях, которые обязательно будут отвечены и включены либо в следующие, либо в правку этой статьи.

Источник

Enterprise COBOL: пример проекта

Эта статья завершает Курс программирования на COBOL, освещая важные аспекты разработки программного обеспечения, такие как модульность кодовой базы, зависимости, модульное тестирование, мокинг, DevOps на z/OS и автодокументация. Современный подход представлен здесь наилучшим образом — на примере.

Photo by Hunter Haley on Unsplash

Предварительные условия

Предполагается, что вы уже знакомы с основными принципами, методами и стандартами IBM Enterprise COBOL для z/OS — проприетарного компилятора COBOL, который реализует значительную часть стандартов COBOL 85, COBOL 2002 и COBOL 2014. Мы будем запускать проект на z/OS — проприетарной 64-разрядной операционной системе для мэйнфреймов IBM, которая вышла в октябре 2000 года и все еще обратно совместима с функциями, появившимися с 1960-х годов.

Убедитесь, что у вас установлен NPM, менеджер пакетов для JavaScript:

У вас есть аккаунт мэйнфрейма IBM.

Вы можете получить аккаунт в учебных целях бесплатно. Зарегистрируйтесь в IBM и следуйте инструкциям. Вы получите емейл с указанным USER ID, IP и PORT. Затем войдите в Open Mainframe Project Slack и добавьте приложение zih через Apps меню. Отправьте приложению сообщение, например, Hi, и бот попросит ввести емейл и USER ID, которые вы получили. Отправьте эти данные, и бот создаст ваш PASSWORD.

Вам понадобится COBOLget, менеджер пакетов для COBOL:

Вам понадобится Zowe, платформа управления для мэйнфреймов с открытым исходным кодом, и ваш профиль Zowe, созданный с использованием указанных выше данных:

Вы можете выбрать любой текстовый редактор по вашему желанию, но я рекомендую Visual Studio Code с установленным расширением IBM Z Open Editor.

Спецификация

У хороших проектов есть исчерпывающее описание функциональности и ограничений. Наш проект Sales суммирует вымышленные продажи в определенном регионе. Данные о продажах представлены в формате CSV, где каждая строка (кроме заголовка) описывает одну продажу следующим образом:

Декомпозиция

Благодаря Zowe программисты COBOL могут создавать любую структуру проекта, свободную от условностей и ограничений мэйнфреймов. Современная разработка имеет тенденцию фокусироваться на проблемной области, делегируя специфичные для платформы задачи на уровень DevOps.

Разберем спецификацию на функциональные блоки. В основном программа:

Читает файл продаж.

Разбирает строки одну за другой.

Проверяет Region на соответствие.

Агрегирует Total Revenue.

Отображает агрегированное значение.

Таким образом, можно выделить как минимум четыре блока — три программы и одну copybook. Точка входа определяет фильтр по региону, вызывает Reader и отображает результат. Программа Reader инкапсулирует операции с файлами (DataSet) и анализирует записи CSV, возвращаемые Parser. Программа Parser преобразует строки CSV в записи.

Другими словами, наша copybook — это структурированная форма строки CSV, совместно используемая в Reader и Parser. Поместим ее в файл CPY:

Зависимости

До того, как Zowe разделил среду разработки и исполнения, инженеры Enterprise COBOL использовали следующие блоки комментариев для документирования изменений:

Этот метод не вполне отражает историю программы и не может использоваться для ретроспективного анализа. Напротив, Системы Контроля Версий в настоящее время являются стандартом в разработке программного обеспечения, позволяя командам сотрудничать через пространство, время и границы организаций. Эксперименты с кодом, параллельные версии, атомарные модификации и обзоры кода помогают разрабатывать софт эффективно с низким уровнем риска.

Тенденция разделения монолитных программ с огромным количеством SECTIONS на более мелкие и многократно используемые блоки была бы невозможна без Семантического Версионирования и Управления Пакетами. Несмотря на то, что в наших модулях мы не использовали никакой внешний код, встроенных в COBOL функций (Intrinsic functions) обычно недостаточно в более сложных проектах.

С 2020 года у COBOL есть собственный менеджер пакетов COBOLget, который стандартизирует повторное использования исходного кода разработчиками как открытого, так и проприетарного кода. Инструмент командной строки автоматизирует процесс установки и обновления библиотек, разрешения зависимостей и интеграции внешнего кода COBOL в проекты. Реестр COBOLget аккумулирует библиотеки на диалектах GnuCOBOL и Enterprise COBOL, помогая доставлять публичный и закрытый код командам.

Сердце COBOLget — это Манифест modules.json, который описывает проект и его зависимости.

Как видно, структура очень похожа на манифест в NPM. В свойствах modules перечислены COBOL-модули проекта, свойство dialect определяет целевую платформу. Назначение зависимости ecblunit будет объяснено в следующей главе.

Тестирование

Инструменты

Для этого IBM предлагает проприетарную среду модульного тестирования — zUnit. zUnit реализует стандарт xUnit, позволяющий разрабатывать, выполнять и оценивать результаты тестов на любом языке z/OS. Конвейер выглядит так:

Test Runner читает файл Test Suite;

Test Runner по очереди вызывает Test Cases;

ADDTESTS добавляет тестовые программы в Test Case;

SETUP выделяет необходимые ресурсы;

тестовая программа вызывает модуль и проверяет результат;

TEARDOWN высвобождает выделенные ресурсы.

Test Runner — программа z/OS, которая управляет процессом тестирования.
Test Suite — XML-файл, в котором перечислены Test Cases для Test Runner.
Test Case — COBOL программа, вызывающая модуль.
Assertion — COBOL условие, сравнивающее ожидаемые и фактические значения.
Test Fixture — COBOL программы для настройки, запуска и завершения тестов.

Проблема в том, что для одного минимального теста zUnit требуется более 100 строк типового кода, что в простых случаях применения чрезмерно. К счастью, имеется альтернатива с открытым исходным кодом — ECBLUnit. В отличие от zUnit, этот инструмент ориентирован только на элементы Test Runner и Assertion. Написанный на Enterprise COBOL, инструмент полностью совместим с z/OS. Тесты ECBLUnit — это программы на COBOL, намного более простые, чем тесты zUnit. Поскольку ECBLUnit это обычный пакет COBOLget, мы можем добавить его как зависимость:

Мокинг

Кажется, в нашем проекте полностью изолированным элементом является только Parser. Reader требует поддержки z/OS для доступа к CSV-файлу. Тем не менее, мы можем изолировать Reader, создав его alter egoМок. Цель имитации — сосредоточиться на тестируемом коде, а не на поведении или состоянии его окружения. Мок реализует контракт исходного модуля с поддельной реализацией:

Поскольку в процессе тестирования JCL компилирует мок сразу после настоящих модулей, тестовая программа не замечает подмены.

Этот простой подход позволяет тестировать бизнес-логику любой сложности, избегая нежелательных зависимостей. Давайте теперь соберем и протестируем наши модули на z/OS:

DevOps

Не отчаивайтесь, если приведенная выше команда не сработала. В scripts манифеста вы найдете все необходимые сценарии для согласования сред разработки и выполнения. Вы можете запускать эти команды отдельно или в группах, указав начальное имя сценария. Замените все в скриптах на свой и попробуйте создать датасеты мэйнфрейма разом:

Если датасет уже существует, команда завершится ошибкой. Тогда придется создать датасеты по одному, например:

Если все прошло успешно, то теперь можно развернуть и запустить проект Sales на z/OS:

Сценарии сборки, развертывания, тестирования и демонстрации запущены и работают. Отлично!

Проект следует практике Непрерывной Интеграции, где каждая модификация кода тестируется в репозитории. Среди файлов проекта вы можете найти два шаблона:

nodejs.yml — для GitHub

.gitlab-ci.yml — для GitLab

Оба шаблона повторяют шаги, описанные выше, и имеют похожий синтаксис. GitLab и GitHub будут запускать CI процессы автоматически и сообщать о прогрессе во вкладках Pipelines и Actions соответственно. Ненулевой код выхода на любом этапе пометит процесс как сбойный.

Если вы решите опубликовать проект в своем репозитории, не забудьте объявить переменные HOST, PORT, USER и PASS в Settings->CI/CD->Variables в GitLab или в Settings->Actions secrets в GitHub.

Документация

Программисты постоянно читают код. Обычно соотношение времени, потраченного на чтение и на запись, намного превышает 10:1. Говорящие названия переменных, разделов, абзацев, множество комментариев объясняют читателю, что происходит и почему. IBM рекомендует использовать IDENTIFICATION DIVISION для описания программ. Вот фрагмент, вставляемый IBM Z Open Editor:

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

В 2020 году Bruno Pacheco выпустил инструмент с открытым исходным кодом, который генерирует документацию из исходного кода COBOL — coboldoc. Инструмент решает проблему несовместимости стандартов документации между диалектами COBOL. Coboldoc распознает теги Microfocus, MSDN и Free Format и может создавать документацию в форматах HTML и Markdown.

Имея некоторый опыт работы с последователями Javadoc, вы найдете данный фрагмент очевидным. Теперь установим Coboldoc и сгенерируем документацию для модулей:

Заключение

60-летний язык программирования по-прежнему актуален. По оценкам Micro Focus, COBOL используется в 70% глобальных систем обработки транзакций, на нем написаны 220 миллиардов строк кода. Надеюсь, что аспекты, освещенные в этой статье, вдохновят вас на дальнейшее развитие экосистемы. Спасибо за чтение!

Вы энтузиаст COBOL? Давайте разрабатывать недостающие библиотеки вместе — читайте далее Enterprise COBOL: реализация библиотеки.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *