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

Control Language

Control Language — это специализированный язык программирования, предназначенный для управления заданиями, ресурсами и потоками данных в операционных системах мейнфреймов и суперкомпьютеров, в первую очередь в системах IBM (z/OS, OS/390, MVS) и их предшественниках. Control Language (часто сокращённо CL) относится к классу языков управления заданиями (Job Control Language, JCL), но в отличие от классического JCL, используемого в IBM OS/360 и её потомках, является более высокоуровневым и интегрированным в операционную среду, например, в систему IBM i (ранее OS/400).

История и происхождение

Control Language возник в 1970-х годах в рамках развития операционной системы CPF (Control Program Facility) для миникомпьютеров IBM System/38. Система System/38 была выпущена в 1978 году и представляла собой революционную для своего времени платформу, основанную на объектно-ориентированной архитектуре и интегрированной реляционной базе данных. Для управления этой системой требовался язык, который мог бы работать с объектами, а не только с файлами и заданиями, как в традиционных мейнфреймах.

В 1988 году IBM представила систему AS/400 (Application System/400), которая стала преемницей System/36 и System/38. Операционная система OS/400 (позже переименованная в IBM i) унаследовала от System/38 не только архитектуру, но и язык управления — Control Language. В отличие от JCL, который был ориентирован на пакетную обработку и требовал описания шагов задания в виде последовательности операторов, CL был встроен в саму операционную систему и позволял управлять не только заданиями, но и пользователями, устройствами, базами данных и сетевыми ресурсами.

С развитием IBM i (ныне IBM i 7.x) Control Language остаётся основным средством администрирования и автоматизации. Он также используется в некоторых других системах, например, в операционной системе BS2000 от Fujitsu (ранее Siemens), где существует аналогичный язык — SDF (System Data Format), и в некоторых версиях Unix-подобных систем для мейнфреймов, но в меньшей степени.

Основные характеристики

Control Language является интерпретируемым языком (хотя существуют компиляторы, преобразующие CL-программы в машинный код для повышения производительности). Он обладает следующими ключевыми особенностями:

  • Интеграция с объектной моделью системы: CL работает с объектами (файлами, библиотеками, программами, устройствами, пользователями) как с едиными сущностями. Команды CL, как правило, имеют синтаксис «действие-объект», например, CRTLIB (Create Library — создать библиотеку), DLTF (Delete File — удалить файл), CHGUSRPRF (Change User Profile — изменить профиль пользователя).
  • Параметризация: Каждая команда может принимать множество параметров, которые задаются в виде ключевых слов. Например, команда создания библиотеки CRTLIB может иметь параметры LIB (имя библиотеки), TYPE (тип), TEXT (описание) и т.д.
  • Поддержка процедурного программирования: CL включает в себя конструкции для написания программ: переменные (типизированные, в основном символьные и числовые), условные операторы (IF/ELSE), циклы (DO/ENDDO), подпрограммы (CALL, SUBR), обработку ошибок (MONMSG — Monitor Message). Это позволяет создавать сложные сценарии автоматизации.
  • Управление сообщениями: CL имеет мощную подсистему сообщений. Команды могут отправлять сообщения пользователям, в журналы, а также перехватывать и обрабатывать сообщения от других программ. Это ключевой элемент для построения отказоустойчивых систем.
  • Безопасность: CL-программы и команды могут быть защищены на уровне пользовательских профилей. Администратор может разрешить или запретить выполнение конкретных команд для конкретных пользователей.

Синтаксис и структура

Синтаксис Control Language основан на ключевых словах и параметрах. Команда всегда начинается с глагола (действия), за которым следует объект (существительное). Параметры перечисляются после пробела, разделяются пробелами и, как правило, имеют форму КЛЮЧЕВОЕ_СЛОВО(значение). Значения могут быть строковыми (в кавычках) или числовыми.

Пример команды: `` CRTLIB LIB(MYLIB) TYPE(*TEST) TEXT('Тестовая библиотека') `` Эта команда создаёт библиотеку с именем MYLIB, типом «тестовая» и описанием «Тестовая библиотека».

Программа на CL пишется в виде набора команд, объединённых в один исходный файл (обычно с расширением .CLP или .CLLE). Программа может содержать:

  • Объявление переменных (команда DCL — Declare).
  • Основной блок (команды между PGM и ENDPGM).
  • Подпрограммы (между SUBR и ENDSUBR).
  • Обработчики ошибок (команда MONMSG).

Пример простой программы на CL: `` PGM DCL VAR(&MSG) TYPE(*CHAR) LEN(50) CHGVAR VAR(&MSG) VALUE('Привет, мир!') SNDPGMMSG MSG(&MSG) ENDPGM ` Эта программа объявляет переменную &MSG`, присваивает ей значение «Привет, мир!» и отправляет это сообщение в системный журнал.

Разновидности и родственные языки

Хотя Control Language в первую очередь ассоциируется с IBM i, существуют и другие языки управления, которые иногда называют Control Language:

  • Job Control Language (JCL): Классический язык для мейнфреймов IBM z/OS. Отличается от CL тем, что ориентирован исключительно на пакетные задания и не имеет встроенных возможностей программирования (циклов, условных переходов) в том же объёме. JCL описывает последовательность шагов задания, а не логику программы.
  • REXX (Restructured Extended Executor): Интерпретируемый язык, широко используемый на мейнфреймах IBM (z/OS, VM/CMS) и в некоторых версиях OS/400. REXX более гибок и удобен для написания сложных сценариев, чем CL, но менее интегрирован в системные объекты. В IBM i REXX может вызывать CL-команды.
  • CLIST (Command List): Язык сценариев для TSO (Time Sharing Option) на мейнфреймах IBM. Предшественник REXX, менее мощный.
  • SDF (System Data Format): Язык управления для операционной системы BS2000 (Fujitsu). По своим возможностям и синтаксису близок к CL, но имеет свои особенности, связанные с архитектурой BS2000.

Применение

Control Language используется в основном в следующих областях:

  • Администрирование системы: Создание и управление пользователями, библиотеками, устройствами, очередями заданий, сетевыми ресурсами. Администраторы IBM i пишут CL-программы для автоматизации рутинных задач, таких как резервное копирование, мониторинг производительности, управление дисковым пространством.
  • Автоматизация пакетной обработки: CL-программы запускают задания, контролируют их выполнение, обрабатывают ошибки и отправляют отчёты. Например, программа может запускать еженочную обработку транзакций, проверять результаты и при необходимости перезапускать задание.
  • Интеграция приложений: CL-программы могут вызывать другие программы (написанные на RPG, COBOL, C, Java) и передавать им данные. Это позволяет строить сложные бизнес-процессы, объединяющие разные системы.
  • Разработка системных утилит: Многие встроенные утилиты IBM i (например, для работы с базами данных, печати, передачи файлов) реализованы как CL-программы или их обёртки.
  • Обучение и прототипирование: Благодаря простоте синтаксиса и интеграции с системой, CL часто используется для быстрого создания прототипов административных сценариев.

Критика и ограничения

Несмотря на свою мощь и интеграцию, Control Language имеет ряд недостатков:

  • Закрытость и платформозависимость: CL привязан к операционной системе IBM i и не переносится на другие платформы. Это создаёт зависимость от вендора и затрудняет миграцию.
  • Ограниченные возможности для сложных вычислений: CL не предназначен для математических расчётов или обработки больших объёмов данных. Для этого используются другие языки (RPG, COBOL, C).
  • Устаревший синтаксис: Для программистов, привыкших к современным языкам (Python, PowerShell, Bash), синтаксис CL может показаться громоздким и неинтуитивным. Отсутствие поддержки регулярных выражений, структур данных (списков, словарей) и объектно-ориентированных конструкций делает его менее гибким.
  • Сложность отладки: Интерпретируемый характер CL и отсутствие современных средств отладки (IDE) усложняют поиск ошибок в больших программах.
  • Ограниченная поддержка в современных средах: С развитием облачных технологий и контейнеризации, использование CL в новых проектах сокращается. IBM, однако, продолжает поддерживать CL в IBM i и предлагает инструменты для интеграции с современными средами (например, через REST API).

Интересные факты

  • Control Language является одним из старейших активно используемых языков управления в мире. Его первая версия появилась в 1978 году, и он до сих пор применяется на тысячах систем AS/400 и IBM i по всему миру, особенно в банковском секторе, страховании, розничной торговле и государственных учреждениях.
  • В IBM i существует более 2000 встроенных команд CL. Они охватывают практически все аспекты управления системой: от создания файлов до настройки сетевых протоколов.
  • CL-программы могут быть скомпилированы в объектный код (команда CRTCLPGM), что значительно ускоряет их выполнение по сравнению с интерпретацией.
  • В 2020-х годах IBM выпустила инструменты для автоматизации задач на IBM i с использованием современных языков, таких как Python и Ansible, что позволяет частично заменить CL в определённых сценариях, но не вытесняет его полностью.

Источники

  • IBM Knowledge Center: IBM i Control Language (CL) — официальная документация по CL.
  • «AS/400 Control Language: A Comprehensive Guide» — книга Брайана Келли (1990-е годы).
  • «IBM i: The Complete Reference» — справочное руководство по IBM i.
  • Статьи журнала «IBM Systems Magazine» (раздел «IBM i») — публикации о применении CL в современных проектах.
  • Официальные руководства IBM по миграции с CL на Python и Ansible (2021-2023).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →