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

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

Типизация и структура данных

Язык использует строгую статическую типизацию. Поддерживаются стандартные типы данных, включая:

Допускается объявление массивов и записей (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).

Источники

  1. IBM Informix 4GL Programmer’s Guide (2009), IBM Corporation.
  2. Using Informix 4GL, Jonathan Leffler (2001), Addison-Wesley.
  3. Informix Guide to SQL: Tutorial (1998), Informix Software.
  4. Официальная документация IBM по Informix 4GL на сайте IBM Knowledge Center (ibm.com/support/knowledgecenter/SSGU8G).
  5. Документация компании Four J’s Development Tools (omnidex.com/products/4gl/).
  6. Статья «История Informix» в журнале «Открытые системы», № 3, 2010 г.
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru