Informix 4GL
Informix 4GL — это язык программирования четвёртого поколения (4GL), разработанный компанией Informix Software (в настоящее время — часть IBM) для создания приложений, работающих с реляционными базами данных (СУБД) Informix. Относится к классу языков, предназначенных для построения бизнес-приложений с тесной интеграцией с СУБД и генерации графических или символьных интерфейсов пользователя. Первая версия языка была выпущена в 1986 году и на протяжении десятилетий активно использовалась в корпоративных информационных системах, особенно в финансовом и производственном секторах.
История
Разработка Informix 4GL была начата в середине 1980-х годов как ответ на растущий спрос на инструменты для быстрой разработки приложений (RAD) для реляционных СУБД. С момента своего выпуска в 1986 году язык стал основным средством создания приложений для СУБД Informix. В 1990-е годы, в период расцвета реляционных баз данных, Informix 4GL получил распространение на платформах Unix (включая различные диалекты AT&T System V и BSD), в средах MS-DOS и Windows. С приобретением Informix Software корпорацией IBM в 2001 году язык вошёл в портфель продуктов IBM Rational. В 2010-х годах IBM анонсировала перевод Informix 4GL в режим поддержки, однако сообщество разработчиков продолжает его использование — в основном для сопровождения унаследованных систем. Существуют проекты сторонних компаний (например, «Four J’s Development Tools», ныне «Omnidex»), которые предоставляют компиляторы и среды выполнения, совместимые с синтаксисом языка.
Характеристики и особенности
Парадигма программирования
Informix 4GL является процедурным языком с элементами событийно-ориентированного программирования. Он не является объектно-ориентированным, хотя поддерживает модульную организацию кода через функции, процедуры и модули. Язык спроектирован для обработки транзакций: в его синтаксисе встроены конструкции для работы с курсорами, блокировками, транзакциями и обработкой ошибок.
Типизация и структура данных
Язык использует строгую статическую типизацию. Поддерживаются стандартные типы данных, включая:
- символьные (CHAR, VARCHAR, CHAR VARYING),
- числовые (INTEGER, SMALLINT, DECIMAL, FLOAT),
- денежные MONEY,
- даты и время (DATE, DATETIME, INTERVAL).
Допускается объявление массивов и записей (RECORD), но отсутствует поддержка динамических массивов (за исключением встроенного типа DECIMAL). Пользователь может определять свои типы через RECORD и ARRAY.
Взаимодействие с СУБД Informix
В языке присутствует гибридный синтаксис: вызовы SQL-запросов вставляются прямо в текст программы (так называемый «embedded SQL»). Компилятор обрабатывает такие вставки, формируя вызовы API СУБД через библиотеку ESQL/C. Это позволяет:
- выполнять SELECT, INSERT, UPDATE, DELETE,
- работать с курсорами (курсоры явного и неявного вида),
- вызывать хранимые процедуры,
- выполнять операции с большими объектами (TEXT, BYTE).
Типичное приложение на Informix 4GL состоит из последовательности SQL-операторов, объединённых логикой управления потоком. Поддерживается работа с несколькими базами данных в одной сессии, а также соединение с удалёнными базами (dblink).
Графический интерфейс пользователя
Одна из ключевых особенностей — встроенная поддержка экранных форм (screen forms). Язык позволяет описывать окна с полями ввода, кнопками, списками и таблицами. До версии 2.0 (1988) интерфейсы строились исключительно на символьном режиме (текстовый терминал, curses). Начиная с Informix 4GL v2.0, при компиляции под Windows возможно использование графического интерфейса (GUI) через набор виджетов, напоминающих стандартные элементы Windows (окна, списки, поля ввода). Для платформ Unix поддерживается как символьный, так и X-Window графический режим (через библиотеки Motif). Описание формы (обивки) хранится в отдельном файле формата .att (attachments).
Компиляция и исполнение
Исходный код (расширение .4gl, .4ge) транслируется в промежуточный код (p-code) с помощью компилятора (c4gl). Полученный байт-код выполняется специальной виртуальной машиной (runtime — r4gl или fglrun). Существуют также компиляторы, генерирующие исполняемый машинный код для платформ Linux (на базе GCC). В версиях IBM Informix 4GL возможно создание отдельного модуля (shared object), подгружаемого динамически.
Структура и синтаксис
Основные элементы
Типичная программа на Informix 4GL включает:
- раздел объявлений (GLOBALS, DEFINE) – определение глобальных переменных и функций,
- основную программу (MAIN) – точка входа,
- процедуры и функции (FUNCTION, PROCEDURE),
- определение форм (FORM form_name FROM «formfile.att»),
- обработчики событий (ON KEY, ON ACTION, AFTER INPUT).
Пример базового фрагмента кода: `` MAIN DEFINE nCount INTEGER DEFINE cName CHAR(80) PROMPT "Введите имя: " FOR cName LET nCount = LENGTH(cName) DISPLAY "Длина строки: ", nCount END MAIN ``
Конструкции управления потоком
В языке присутствуют:
- условные операторы: IF ... THEN ... ELSE ... END IF; CASE (начиная с v2.0),
- циклы: FOR, WHILE, FOREACH (для курсоров),
- исключения: WHENEVER ERROR, WHENEVER SQLERROR (начиная с v2.1).
Работа с окнами и сообщениями
Встроенные команды:
- OPEN WINDOW – создание нового окна,
- DISPLAY, DISPLAY BY NAME, DISPLAY ARRAY – вывод данных,
- INPUT, INPUT BY NAME – ввод данных в поля формы,
- MENU – создание полноэкранного меню,
- MESSAGE – вывод сообщения в строку статуса.
Классификация и варианты реализации
- IBM Informix 4GL – официальная версия, поддерживаемая IBM (с 2001 года). Выпускается под названием IBM Informix 4GL for Informix Dynamic Server (v7.31.x). Поддерживает только Unix (AIX, HP-UX, Solaris) и Linux (x86, x86_64). В настоящее время IBM не выпускает новые версии, ограничиваясь только исправлением ошибок до 2027 года (по данным на середину 2020-х годов). Для новых разработок не рекомендуется.
- Informix 4GL (Four J’s / Omnidex) – продукт компании «Omnidex Inc.» (ранее Four J’s Development Tools) – компилятор, интерпретатор и среда разработки для Windows, Linux, macOS, а также некоторых Unix-систем. Полностью совместим с синтаксисом IBM Informix 4GL, но добавляет поддержку современных протоколов (HTTP, JSON, REST) и улучшенный GUI. Выпускается как коммерческий продукт.
- Open Source проекты – существуют реализации на основе LLVM (Oakland 4GL), способные компилировать Informix 4GL в байт-код JVM или непосредственно в машинный код. Такие версии, как правило, не сертифицированы для работы с IBM Informix Dynamic Server, но могут быть использованы с другими СУБД (PostgreSQL, MySQL). Актуальность разработки на 2024 год — низкая.
Применение
Благодаря высокой производительности при работе до 1990-х годов с СУБД Informix Dynamic Server, Informix 4GL широко применялся для построения:
- учётных и складских систем (ERP-системы среднего и крупного бизнеса),
- банковских терминалов и кассовых приложений,
- автоматизации железнодорожного и авиационного транспорта,
- телекоммуникационных приложений (биллинг, управление сетями),
- встроенных систем (POS-терминалы).
На территории Российской Федерации Informix 4GL в 1990–2000-х годах использовался в некоторых банковских системах (например, АБС «Diasoft F»), системах логистики и учета на предприятиях с Unix-архитектурой. С уходом IBM из ряда сегментов рынка в 2010-х годах и переходом на Java/.NET, Informix 4GL сохраняется преимущественно в унаследованных проектах. Поддержка языка осуществляется силами сторонних разработчиков.
Критика и проблемы
- Устаревший синтаксис – язык не поддерживает современные парадигмы (ООП, аспектно-ориентированное программирование). Компилятор ibm Informix 4GL не способен генерировать код для мобильных платформ или веб-браузеров без дополнительных прослоек.
- Закрытость – исходные коды компилятора IBM закрыты. Все модификации и обновления доступны только по подписке на техническую поддержку IBM, которая с 2017 года постоянно дорожает. Сообществ поддержки на русском языке практически нет.
- Сложность интеграции с современными технологиями – для интеграции с облачными сервисами, REST-API, микросервисной архитектурой требуется создание обёрток на C/C++ или Python. Инструменты для автоматической трансляции Informix 4GL в JavaScript (для веба) существуют, но очень ограничены по функционалу.
- Отсутствие масштабирования на кластерные системы – в отличие от IBM Informix Dynamic Server, среда выполнения для Informix 4GL (fglrun) не поддерживает распределённые транзакции (XA). Для кластеризации и отказоустойчивости приходится использовать специализированные решения (Dra, HDR).
Источники
- IBM Informix 4GL Programmer’s Guide (2009), IBM Corporation.
- Using Informix 4GL, Jonathan Leffler (2001), Addison-Wesley.
- Informix Guide to SQL: Tutorial (1998), Informix Software.
- Официальная документация IBM по Informix 4GL на сайте IBM Knowledge Center (ibm.com/support/knowledgecenter/SSGU8G).
- Документация компании Four J’s Development Tools (omnidex.com/products/4gl/).
- Статья «История Informix» в журнале «Открытые системы», № 3, 2010 г.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →