Введение
После публикации первой версии COBOL IDE на Delphi я получил несколько откликов и продолжил улучшать инструмент. В этой статье расскажу о новых возможностях: подключении внешних библиотек (например, GMP), улучшениях в подсветке синтаксиса и отладке, а также о небольших удобствах, которые появились в редакторе.
Что нового
? Поддержка внешних библиотек (на примере GMP)
Теперь IDE позволяет компилировать программы с подключением дополнительных библиотек. Например, библиотека GMP (GNU Multiple Precision Arithmetic Library) может использоваться для работы с большими числами и точной арифметикой.
Для этого была добавлена поддержка дополнительных ключей компиляции, включая -I
, -L
и -l
, например:
cobc -x temp_compile.cbl -IC:/msys64/mingw64/include -LC:/msys64/mingw64/lib -lgmp
Это открывает путь к использованию математических и системных библиотек прямо из COBOL-кода.
? Улучшенная подсветка синтаксиса
-
Обновлён
TCobolHighlighter
:Добавлены новые ключевые слова и разделители
Улучшена работа с кавычками и строками
Исправлена чувствительность к регистру
Подсветка стала быстрее и точнее даже на больших файлах
Пример с GMP
IDENTIFICATION DIVISION.
PROGRAM-ID. PAYROLL-CALCULATOR.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 EMPLOYEE-NAME PIC A(20).
01 HOURS-WORKED PIC 999.
01 HOURLY-RATE PIC 9(3)V99.
01 GROSS-PAY PIC 9(5)V99.
01 BONUS PIC 9(5)V99 VALUE 0.
01 TOTAL-BEFORE-TAX PIC 9(6)V99.
01 TAX-AMOUNT PIC 9(6)V99.
01 FINAL-PAY PIC 9(6)V99.
01 F-GROSS PIC $ZZ,ZZ9.99.
01 F-BONUS PIC $ZZ,ZZ9.99.
01 F-TOTAL-BEFORE-TAX PIC $ZZ,ZZ9.99.
01 F-TAX PIC $ZZ,ZZ9.99.
01 F-FINAL PIC $ZZ,ZZ9.99.
PROCEDURE DIVISION.
DISPLAY "Enter employee name:".
ACCEPT EMPLOYEE-NAME.
DISPLAY "Enter number of hours worked:".
ACCEPT HOURS-WORKED.
DISPLAY "Enter hourly rate (e.g., 15.75):".
ACCEPT HOURLY-RATE.
COMPUTE GROSS-PAY = HOURS-WORKED * HOURLY-RATE.
IF HOURS-WORKED > 160
COMPUTE BONUS = GROSS-PAY * 0.10
END-IF.
COMPUTE TOTAL-BEFORE-TAX = GROSS-PAY + BONUS.
COMPUTE TAX-AMOUNT = TOTAL-BEFORE-TAX * 0.13.
COMPUTE FINAL-PAY = TOTAL-BEFORE-TAX - TAX-AMOUNT.
MOVE GROSS-PAY TO F-GROSS.
MOVE BONUS TO F-BONUS.
MOVE TOTAL-BEFORE-TAX TO F-TOTAL-BEFORE-TAX.
MOVE TAX-AMOUNT TO F-TAX.
MOVE FINAL-PAY TO F-FINAL.
DISPLAY "Employee: " EMPLOYEE-NAME.
DISPLAY "Gross Pay: " F-GROSS.
DISPLAY "Bonus (if any): " F-BONUS.
DISPLAY "Total before tax: " F-TOTAL-BEFORE-TAX.
DISPLAY "Tax (13%): " F-TAX.
DISPLAY "Final Pay: " F-FINAL.
STOP RUN.
Итоги
С каждым обновлением COBOL IDE становится всё удобнее:
Подключение внешних библиотек
Более стабильная подсветка и редактор
Поддержка современных фич для обучения и прототипирования
Где скачать
Все исходники и последние обновления выложены в GitHub:
Комментарии (3)
SpiderEkb
23.07.2025 06:57Скажите, а чем это лучше Rocket COBOL для Visual Studio?
И тут еще такой момент - COBOL в большинстве случаев работает не на десктопах, а на "больших машинах". Серверах с совершенно другой архитектурой. А там процесс разработки несколько иной. Пишем на локалке, потом отправляем на сервер, там запускаем сборку (с получением ошибок и предупреждений обратно на локалку)... Отладка - тоже на сервере (с подключением локалки к серверу в режиме отладки).
Если интересно - можно попробовать взять VSCode, установить IBM i Development Pack (там есть в т.ч. и COBOL, зарегистрироваться на бесплатном публичном AS/400 сервере PUB400 и попробовать как все это работает на самом деле.
SpiderEkb
23.07.2025 06:57Например, сборка на нашем тестовом сервере с использованием нашей же системы сборки (на основе gradle) из VSCode выглядит в терминале примерно так:
PS C:\Users\***\GIT\vpom> chcp 65001 Active code page: 65001 PS C:\Users\***\GIT\vpom> gradle as400syncanddeploy -PreleaseFile="VPOM#170" Starting a Gradle Daemon, 4 busy and 1 incompatible Daemons could not be reused, use --status for details > Configure project : Found config file source: https://***/config_20241112152851.zip modified on 2024-11-12T16:28:51.358+0400 setting.yml Current plugin version: 1.1.55.6 created on 08/07/2025 11:35:03 Log location: C:\Users\***\GIT\vpom\2025-07-23_15-41-05.log Temp files location: C:\Users\***\GIT\vpom\build add folder <DTAQ> add folder <USRIDX> add folder <ERRORS> add folder <CONTAIN> Include packages for deploy ... [buildinfo] Not using buildInfo properties file for this build. > Task :as400generateMemberList Getting files list for release ... add file C:\Users\***\vpom\src\main\ERRORS\DSERR37.RPGLE add file C:\Users\***\GIT\vpom\src\main\ERRORS\RPGPSDS.RPGLE add file C:\Users\***\GIT\vpom\src\main\ERRORS\ONERROR.RPGLE git: ssh://git@***/vpom.git Using enviroment from class: ***.gradle.as400pluginEnvironment.EQEnviroment [maven][0][jar][0]pgm srvpgm cpysrc command display printer panelgroup bnddir > Task :as400validate Validating project structure ... OK Validating data ... Validation completed > Task :as400connect ... Connecting to server *** using credentials for *** IBMi job: 441572/QUSER/QZRCSRVS jobUserID: *** > Task :as400enviroment Calling RTVATTR Creating eviroment completed > Task :as400sendFilesToServer Previous copy failed or status unknown. Copying all Add generated installer @CRVPOM to files list Copy file C:\Users\***\GIT\vpom\src\main\ERRORS\DSERR37.RPGLE to member VPOMSRC170/DSERR37 Copy file C:\Users\***\GIT\vpom\src\main\ERRORS\RPGPSDS.RPGLE to member VPOMSRC170/RPGPSDS Copy file C:\Users\***\GIT\vpom\src\main\ERRORS\ONERROR.RPGLE to member VPOMSRC170/ONERROR Copy file C:\Users\***\GIT\vpom\src\main\@CRVPOM.CLLE to member VPOMSRC170/@CRVPOM > Task :lockObjects Allocating necessary objects for deploy ... OK > Task :as400disconnect Disconnected on AS400 > Task :as400result BUILD SUCCESSFUL BUILD SUCCESSFUL in 1m 4s 14 actionable tasks: 14 executed
По gradle скриптам автоматически создается программа инсталлятор которая собирает на сервере все объекты поставки.
Дальше - подключение к серверу, копирование туда всех объектов поставки (включая сгенерированный инсталлятор), компиляция инсталлятора и его запуск. Если будут ошибки - они отобразятся здесь же.
В принципе, плагины для VSCode позволяют работать с кодом прямо с сервера, без копирования его на локал.
georgiy08
Рекомендую добавить скриншоты демонстрирующие внешний вид программы, а также оформить README файл для большего привлечения внимания.
(А коммитам давать более ясное название, нежели просто v1.4)