Object RSL

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 21:33, 8 июня 2016.
RSL
Парадигма

мультипарадигменный: объектно-ориентированный, проблемно-ориентированный процедурный,

событийный
Спроектировано Сергей Кубрин
Печать дисциплины динамическая
Портал: http://www.softlab.ru/
Главная реализация
RS-Bank, InterBank, RS-Securities, RS-Payments

RSL или Object RSL (R-Style Language) — проблемно-ориентированный, интерпретируемый, проприетарный язык программирования, разработанный компанией R-Style Softlab для использования в своих программных продуктах. Является макроязыком. Находится в свободном распространении и доступен для скачивания всем желающим.

История

Язык RSL был создан в 1994 году. Первые дополнения появились лишь в 1997, а именно была добавлена возможность подключения С++ модулей и язык стал объектно-ориентированным. В 1998 году в язык добавили несколько стандартных классов. В 2003 году была добавлена поддержка модулей платформы .NET

Оболочка RSL

Оболочка RSL - среда разработки, включающая в себя:

  1. текстовый редактор
  2. отладчик
  3. интерпретатор / прекомпилятор
  4. редактор консольных диалоговых окон
  5. редактор структур БД Pervasive PSQL
  6. редактор графических отчётов Visual RSL
  7. SDK для создания подключаемых модулей на языке C DLM SDK

Пример программы

Пример программы для обработки сообщений диалогового окна:

macro EvenMacro(dlg, cmd, id, key)
/* Установим фокус ввода на поле Dat */
 if (cmd == DLG_INIT)
 SetFocus (dlg, “Dat”)
 return CM_IGNORE; 
/* Нажата клавиша F3 */
 elif (cmd == DLG_KEY)
 if (key == 317)
 dlg.Int = 500;
 dlg.Lab = “NewLabel”;
 dlg.Str =
 “Это новая строка”;
 UpdateFields (dlg);
/* Нажата клавиша Enter */
 elif ( (key == 13) and
 (id == 6 ) )
 SetFocus (dlg, 0);
 return CM_IGNORE;
 end;
/* Нажата экранная кнопка */
 elif (cmd == DLG_BUTTON)
 /* Выйти с сохранением */
 if (trim (fldname (dlg, id)) == “~O~k”)
 return CM_SAVE;
 /* Выйти без сохранения */
 elif (trim (fldname (dlg, id)) == “~C~ancel”)
 return CM_CANCEL;
 end;
 end;
/* Проверка правильности ввода данных */
 if (cmd == DLG_REMFOCUS)
 if ( (id == 1) and (dlg.Int < 100) )
 MsgBox (“Значение должно быть больше 100”);
 return CM_CANCEL;
 end;
 elif (cmd == DLG_SETFOCUS)
 message (“Focus installed”);
 elif (cmd == DLG_SAVE)
 if (dlg.Int < 100)
 SetFocus (dlg, 1);
 MsgBox (“Значение
 должно быть |>100”));
 return CM_CANCEL;
 end;
 elif (cmd == DLG_DESTROY)
 message (“Dialog is destroyed”);
 end;
 return CM_DEFAULT;
end

Типы данных

Скалярные типы

Название типа Ключевое слово для декларации Код типа Принимаемые значения
Целое число Integer V_INTEGER От -2147483648 до 2147483647
Число с плавающей точкой Double V_DOUBLE 15 значащих десятичных цифр
Число с плавающей точкой длинное DoubleL V_DOUBLEL 15 значащих десятичных цифр (аналог Double)
Строка символов String V_STRING
Логическая величина Bool V_BOOL True, False
Дата Date V_DATE
Время Time V_TIME
Дата и время DateTime V_DTTM
Адрес памяти MemAddr V_MEMADDR
Ссылка на процедуру RSL ProcRef V_PROC
Ссылка на метод объекта RSL MethodRef V_R2M
Двоично-десятичное число с 4-мя знаками после запятой Decimal V_DECIMAL 28 значащих цифр (аналог Numeric)
Двоично-десятичное число с плавающей точкой. Используется для вещественных величин (денежных сумм, курсов валют, процентных ставок и пр.) Numeric V_NUMERIC 28 значащих цифр
Тип для денежных величин Money V_MONEY 28 значащих цифр (аналог Numeric)
Длинный тип для денежных величин MoneyL V_MONEYL 28 значащих цифр(аналог Numeric)
Специальное значение "Нулевое значение", или "Умалчиваемое значение" SpecVal Специальной константы нет. Код типа: 26 OptVal или NullVal
Специальное значение "Пусто" ----- V_UNDEF Null

Особенности:

  1. Лексемы типа DoubleL являются синонимом типа Double;
  2. Лексемы MoneyL являются синонимом Money;
  3. Лексемы Decimal являются синонимом Numeric.

Для внутреннего представления переменных типа Money используется тип Numeric. Эти типы, используемые в ранних версиях RSL, оставлены только для совместимости исходного кода на RSL.

Объектные типы

Объектные типы данных подразделяются на специализированные объекты и обобщённые объекты (GenObject). Обобщённые объекты создаются либо непосредственным вызовом конструктора RSL-класса, либо при помощи стандартной процедуры GenObject, принимающей имя RSL-класса в качестве строкового параметра. И конструктор, и процедура GenObect возвращают ссылку на созданный объект. В настоящее время специализированные объекты являются устаревшими. В новом коде рекомендуется использовать обобщённые объекты, реализованные на замену специализированных объектов.

Название типа Ключевое слово для декларации Код типа Тип аналогичного обобщённого объекта
Ссылка на специализированный объект "файл базы данных" BtFileRef V_FILE TBfile
Ссылка на специализированный объект "структура в памяти" StrucRef V_STRUC TRecHandler
Ссылка на специализированный объект "массив значений" ArrayRef V_ARRAY TArray
Ссылка на специализированный объект "текстовый файл" TxtFileRef V_TXTFILE Нет
Ссылка на специализированный объект "Файл dBase" DbfFileRef V_DBFFILE Нет
Ссылка на обобщённый объект RSL класса Object для любого объектного типа, или <Имя RSL класс> V_GENOBJ

Ссылки

Примечания