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 →