RSL
RSL или Object RSL (аббр. от англ. R-Style Language) — объектно-ориентированный, предметно-ориентированный, интерпретируемый, проприетарный язык программирования, разработанный компанией R-Style Softlab для использования в своих программных продуктах. Среда разработки под названием «Оболочка RSL» включает в себя:
RSL также называют макроязыком, а программы на нём — макросами. Инструменты для создания и отладки программ на RSL доступны для свободного скачивания на сайте разработчика, однако такие макросы не должны содержать вызовов модулей, содержащих бизнес-логику и встроенных в основные программы R-Style Softlab. Интерпретатор реализован под Windows, позволяет работать под Wine. Ранние версии поддерживали MS-DOS. Поддержка RSL встроена во все подсистемы АБС RS-Bank, а также InterBank, RS-Payments. История
Модули языкаRSLSRVМодуль RSLSRV регистрирует в системе объект RSLSrv.RslEngine, который позволяет использовать макрос на RSL как объект ActiveX. Глобальные переменные макроса становятся свойствами, а процедуры — методами. Например, пусть существует макрос myactivex.mac: var str1:String = "Test string"; macro func1(a) return a*a; end; тогда можно использовать следующий код на Visual Basic: Sub TestRSL()
Set eng = CreateObject("RSLSrv.RslEngine")
Set MyObj = eng.LoadModule("myactivex.mac")
Debug.Print MyObj.str1 ' печатает Test string
Debug.Print MyObj.func1(2) ' печатает 4
End Sub
RSDRSD — библиотека предназначена для универсального доступа к источникам данных, поддерживающим SQL, из программ на языках C++ и RSL. Объектная модель построена на основе ADO. Библиотека имеет несколько уровней (каждый последующий уровень базируется на предыдущем: большую часть функциональности делегирует нижележащему уровню):
Уровни 1 и 2 реализованы в виде DLL, а уровень 3 — как DLM. RSLX
RsEngine
Windows ReportsWindows Reports — объектно-ориентированная библиотека для вывода отчётов в форматы офисных приложений MS Excel, MS Word, Internet Explorer. Библиотека основана на технологиях RSCOM и ActiveX. Большая часть написана на RSL, также в состав входят DLM-модули. Работа с базами данныхRSL имеет встроенную поддержку работы с базами данных (БД), управляемых Pervasive PSQL (ранее Btrieve и Pervasive.SQL). Словари БД имеют расширение Синтаксис и языковые конструкции
В части синтаксиса RSL имеет общие черты с языками C++ и Pascal. Например, присваивание и операции сравнения «равно», «не равно» записываются так же, как и в C++ ( КомментарииRSL (аналогично C++) поддерживает комментарии двух типов: многострочные и однострочные. /*
Пример большого комментария,
состоящего из нескольких строк
*/
// Вся оставшаяся часть строки является комментарием
Язык RSL разрешает наличие вложенных комментариев обоих типов как по отдельности, так и вместе. Типы данныхВсе поддерживаемые типы данных в RSL разделяются на скалярные и объектные.
Объектные типы:
В RSL предусмотрено неявное и явное преобразование из одного типа данных в другой.
Объектно-ориентированные особенности языкаВ 1997 году язык RSL стал объектно-ориентированным и изменил название на Object RSL[3]. Он вводит классы, которые обеспечивают три самых важных свойства объектно-ориентированного программирования (ООП): инкапсуляцию, наследование и полиморфизм. В RSL (в отличие от других языков программирования, к примеру, от C++) конструирование объектов происходит в два этапа:
Таким образом, в классах RSL деструкторы, определяемые пользователем, не применяются (объекты и их свойства удаляются автоматически). В RSL наследование позволяет описать новый класс на основе уже существующего (родительского, базового) класса. Таким образом, все методы и свойства класса-родителя также становятся методами и свойствами класса-наследника. Кроме этого, класс-наследник может добавлять свои свойства и методы или переопределять методы класса-родителя. Наследование позволяет строить иерархии классов. Множественное наследование в RSL запрещено. При наследовании имя класса-родителя указывается в круглых скобках после ключевого слова Пример наследования классом Employee («Сотрудник») класса Person («Персона»), при добавлении к нему свойства Post («Должность»): Class Person (Name, Surname) // Список свойств и методов класса Person end; Class (Person) Employee (Name, Surname, Post) InitPerson (Name, Surname); // Инициализация класса Person в классе Employee Macro Report() println("Post: ", Post); end; end; В RSL инкапсуляция реализуется через указание уровня доступа к свойствам и методам класса, а также к переменным и процедурам макромодуля.
Уровни доступа к свойствам и методам класса:
Уровни доступа к переменным, процедурам и объектам макромодуля:
Все методы классов RSL являются виртуальными. Так, RSL реализует полиморфизм включения (или чистый полиморфизм) посредством наследования. При добавлении в классе-наследнике метода с именем, которое уже используется для одного из методов класса-родителя, метод наследника переопределит метод родителя. К методу родителя доступ будет только из метода наследника, который его переопределяет. Обращение к этому методу родителя осуществляется по его имени. Но в классе-наследнике вне переопределяющего метода не будет доступа к переопределенному методу родителя. Также станет невозможным обратиться к этому методу класса-родителя через ссылку на объект класса-наследника в основной части программы. Class First() // Класс-родитель Var x = 2, y = 3; Macro Sum() return x + y; end; end; Class (First) Second() // Класс-наследник InitFirst(); Var a = 100; Macro Sum() // Начало переопределения родительского метода Sum() return Sum() + a; // Использование родительского метода Sum() в методе Sum() наследника end; // Конец переопределения родительского метода Sum() Macro Sum2() return Sum() + a; // Использование метода Sum() наследника end; end; obj = Second(); // Создание объекта класса Second()
println(obj.Sum()); // Результат: 105 println(obj.Sum2()); // Результат: 205 Если в этом примере из класса-родителя убрать метод ДругоеОбъявлять переменные и указывать их тип не обязательно. Операторы сравнения имеют более высокий приоритет, чем логические операторы. Например, если надо выполнить «действие» в том случае, когда переменная a равна 1 или 2, то необходимо применить следующую конструкцию: if ((a == 1) or (a == 2)) // действие end; Выполнение программы начинается с первой инструкции, не входящей в класс или процедуру, как в php. macro func1 [I'm function 1]; end; // выполнение начнётся здесь [Let's go!]; Примеры программПрограмма «Hello, world!» на RSL[4]: [Hello, world!]; Квайн на RSL (форматирование для удобства чтения): s="''s=Print(SubStr(s,1,2)+StrFor(34)+s+StrFor(34)+StrFor(59)+SubStr(s,3));''"; Print(SubStr(s,1,2)+StrFor(34)+s+StrFor(34)+StrFor(59)+SubStr(s,3)); См. такжеПримечания
Ссылки
|
Portal di Ensiklopedia Dunia