RSL

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 9. června 2013; kontroly vyžadují 49 úprav .
RSL
Jazyková třída

multiparadigma :
objektově orientované ,
doménově orientované procedurální ,

rušný
Typ provedení interpretován
Objevil se v 1994
Autor Sergej Kubrin
Přípona souboru ..mac
Uvolnění 1151 [1]  ( 19. března 2015 )
Typový systém dynamický
Hlavní implementace RS-Bank , InterBank, RS-Securities, RS-Platby
webová stránka softlab.ru

RSL nebo Object RSL ( zkratka z anglického  R-Style Language ) je objektově orientovaný , doménově orientovaný , interpretovaný , proprietární programovací jazyk vyvinutý společností R-Style Softlab pro použití v jejích softwarových produktech .

Vývojové prostředí s názvem „RSL Shell“ zahrnuje:

RSL se také nazývá makrojazyk a programy na něm založené se nazývají makra . Nástroje pro vytváření a ladění RSL programů jsou k dispozici ke stažení zdarma na stránkách vývojáře, nicméně taková makra by neměla obsahovat volání modulů obsahujících obchodní logiku a zabudovaných do hlavních programů R-Style Softlab. Interpret je implementován pod Windows , umožňuje pracovat pod Wine . Dřívější verze podporovaly MS-DOS .

Podpora RSL je zabudována do všech subsystémů RS-Bank ABS , stejně jako InterBank, RS-Payments.

Historie

Jazykové moduly

RSLSRV

Modul RSLSRV registruje v systému objekt RSLSrv.RslEngine, což umožňuje použít makro RSL jako ActiveX objekt . Globální makro proměnné se stávají vlastnostmi a procedury metodami. Řekněme například, že existuje makro myactivex.mac :

var str1: String = "Testovací řetězec" ; makro func1(a) return a*a; konec ;

pak můžete použít následující kód jazyka Visual Basic :

Sub TestRSL () Set eng = CreateObject ( "RSLSrv.RslEngine" ) Set MyObj = eng . LoadModule ( "myactivex.mac" ) Ladění . Tisk MyObj . str1 ' vypíše Testovací řetězec Debug . Tisk MyObj . func1 ( 2 ) ' vytiskne 4 End Sub

RSD

RSD je knihovna navržená pro univerzální přístup ke zdrojům dat podporujícím SQL z programů C++ a RSL . Objektový model je založen na ADO .

Knihovna má několik úrovní (každá následující úroveň je založena na té předchozí: deleguje většinu funkcí na základní úroveň):

  1. Ovladače : a) Ovladač zdroje dat pro poskytování nízkoúrovňového přístupu ke službám knihovny z jazyka C. Rozhraní je obecné, ale implementace je specifická pro zdroj dat. V současné době existuje ovladač pro ODBC . b) Ovladač univerzální sady záznamů (Recordset), která poskytuje jednotný navigační přístup k datům.
  2. Třídy C++ a rozhraní pro objektově orientovaný přístup k datům nezávislé na zdroji.
  3. Třídy RSL a rozhraní pro přístup z RSL.

Úrovně 1 a 2 jsou implementovány jako DLL , zatímco úroveň 3 je implementována jako DLM.

RSLX

RsEngine

Zprávy systému Windows

Windows Reports  je objektově orientovaná knihovna pro výstup sestav do formátů kancelářských aplikací MS Excel , MS Word , Internet Explorer . Knihovna je založena na technologiích RSCOM a ActiveX . Většina je napsána v RSL, součástí jsou i DLM moduly.

Práce s databázemi

RSL má vestavěnou podporu pro práci s databázemi (DB) spravovanými Pervasive PSQL ( dříve Btrieve a Pervasive.SQL ). Databázové slovníky mají příponu .def(analog .ddf), soubory databázových tabulek - .dbt(analog .mkd). Je také možné pracovat s databázovými soubory .dbf. Práce s SQL je organizována pomocí ADO prostřednictvím modulu RSLX a knihoven RSD .

Syntaxe a jazykové konstrukce

Pokud jde o syntaxi, RSL sdílí podobnosti s C++ a Pascal . Například přiřazovací a porovnávací operace „rovná se“, „nerovná“ se zapisuje stejně jako v C++ ( =, ==, !=). A logické operace jsou jako v Pascalu ( and, or, not).

Komentáře

RSL (podobně jako C++ ) podporuje dva typy komentářů : víceřádkové a jednořádkové .

/* Příklad velkého komentáře, skládající se z několika řádků */ // Zbytek řádku je komentář

Jazyk RSL umožňuje vnořené komentáře obou typů, a to jak samostatně, tak společně.

Datové typy

Všechny podporované datové typy v RSL jsou rozděleny na skalární a objektové.
Skalární typy:

  • Celé číslo : Integer.
  • Plovoucí desetinná čárka : Double.
  • BCD číslo s plovoucí desetinnou čárkou: Decimal, Numeric.
  • Typ pro peněžní hodnoty: Money.
  • Řetězec : String.
  • Boolean : Bool(s hodnotami TRUEa FALSE).
  • Datum: Date.
  • Čas: Time.
  • Datum a čas: DateTime.
  • Adresa paměti: MemAddr.
  • Odkaz na postup RSL: ProcRef.
  • Odkaz na metodu objektu RSL: MethodRef.
  • Typ speciálních hodnot " Null value " a " Default value ": SpecVal(s hodnotami NullVala OptVal).
  • Speciální hodnota " Empty " bez typu: NULL.
  • Obecný typ: Variant.

Typy objektů:

  • Odkaz na objekt "databázový soubor": Tbfile.
  • Odkaz na objekt "struktura v paměti": TRecHandler.
  • Odkaz na objekt "pole hodnot": TArray.
  • Odkaz na objekt "textový soubor": TStreamDoc.
  • Odkaz na jakýkoli objekt třídy RSL: Object.

RSL poskytuje implicitní a explicitní převod z jednoho datového typu na jiný.

  • K implicitní (automatické) konverzi dochází v následujících případech:
  • Když aritmetická operace zahrnuje dva operandy různých typů, pro které není definován žádný explicitní postup pro výpočet operace, typ operandu s nižší váhou typu se převede na typ operandu s vyšší váhou typu. Níže jsou uvedeny možnosti převodu typů podle jejich „váhy“: Integer→ Double→ Numeric→ String.
  • Při přiřazení hodnoty proměnné s jiným typem, než který byl do ní deklarován.
  • ifPři použití jiných než booleovských instrukcí a whilehodnot v podmíněných výrazech . V tomto případě bude proveden pokus o převod na booleovský typ.
  • Explicitní převody se provádějí pomocí speciálních postupů: Int(), Double(), Decimal(), Numeric(), String()atd Money().

Objektově orientované vlastnosti jazyka

V roce 1997 se RSL stal objektově orientovaným a změnil svůj název na Object RSL [3] . Představuje třídy, které poskytují tři nejdůležitější vlastnosti objektově orientovaného programování (OOP): zapouzdření , dědičnost a polymorfismus .

Objekty

V RSL (na rozdíl od jiných programovacích jazyků, například C++) probíhá konstrukce objektů ve dvou fázích:

  • Vytváření objektů: alokace paměti s přihlédnutím k hierarchii dědičnosti , vytváření seznamů náhrad pro virtuální metody , všechny vlastnosti třídy jsou nastaveny na NULL . Poté, protože objekt neobsahuje žádná neinicializovaná data, je připraven k řádnému zničení.
  • Inicializace objektu: volání metody Init. Pokud má být inicializace provedena pro nadřazenou třídu, pak by její metoda Initměla být volána explicitně při inicializaci odvozené třídy.

Ve třídách RSL se tedy nepoužívají uživatelsky definované destruktory (objekty a jejich vlastnosti se automaticky smažou).

Dědičnost

V RSL vám dědičnost umožňuje popsat novou třídu na základě již existující (nadřazené, základní) třídy. Všechny metody a vlastnosti nadřazené třídy se tedy stávají také metodami a vlastnostmi podřízené třídy. Kromě toho může podřízená třída přidat své vlastní vlastnosti a metody nebo přepsat metody nadřazené třídy . Dědičnost umožňuje vytvářet hierarchie tříd. Vícenásobné dědictví je v RSL zakázáno.

Při dědění je název nadřazené třídy uveden v závorkách za klíčovým slovem Class. Chcete-li inicializovat nadřazenou třídu, musíte zavolat předdefinovanou metodu, jejíž název je tvořen přidáním předpony k názvu nadřazené třídy Init.

Příklad dědění třídou Zaměstnanec ("Zaměstnanec") třídy Osoba ("Osoba"), když k ní přidáte vlastnost Příspěvek ("Pozice"):

Třída Osoba (Jméno, Příjmení) // Seznam vlastností a metod třídy Osoba end ;

Třída (Osoba) Zaměstnanec (Jméno, Příjmení, Post) InitPerson (Jméno, Příjmení); // Inicializace třídy Osoba ve třídě Report() maker zaměstnance println ( "Post: " , Post); konec ; konec ; Zapouzdření

V RSL je zapouzdření implementováno specifikací úrovně přístupu k vlastnostem a metodám třídy a také k proměnným a procedurám makromodulu.

  • V hlavním těle modulu maker jsou všechny proměnné, procedury a třídy deklarované bez modifikátoru přístupu ve výchozím nastavení globální . Jsou dostupné nejen uvnitř makromodulu, ale také ve všech ostatních makromodulech, které jej importují. Proměnné lze také změnit na globální silou (více o tom viz níže ).
  • Modifikátor přístupu privateumožňuje deklarovat proměnné, procedury a třídy jako private , což zakazuje přístup k nim zvenčí. Tento modifikátor je analogický modifikátoru protectedv C++.
  • Modifikátor locallze použít k deklaraci proměnných, objektů a procedur jako místní . Lokální proměnné jsou dostupné pouze pro lokální procedury. Není možné přistupovat k lokální proměnné v rámci jiné procedury modulu makra.
     
místní var str; // Lokální proměnná modulu, viditelná pouze // v těle aktuálního modulu nebo v makru lokální procedury Proc1() // Globální procedura modulu str = "Text1" ; // Chyba! str není k dispozici end ;

lokální makro Proc2() // Procedura lokálního modulu str = "Text2" ; // Správně! konec ;

proc2(); str = str + "Text3" ; // Správně! println (str);
Pokud zadáte modifikátor localpřed vlastností třídy, přestane být vlastností třídy jako takovou a stane se proměnnou lokálního konstruktoru. Modifikátor localje tedy použitelný pouze pro procedury inicializace konstruktoru modulů a tříd.
  • Chcete-li přistupovat přímo k proměnným, které jsou uvnitř procedur, musíte je silou změnit na globální . To se provede jejich uzavřením do složených závorek ( {}):
     
macroProc (); var x = 2 , // Tato proměnná nebude přístupná mimo proceduru {y} = 3 ; // K této proměnné se bude přistupovat mimo proceduru end ;

proc(); // Volání procedury

println (x); // Chyba: "nedefinovaný identifikátor x" println ( {y} ); // Výsledek: 3
Navíc aa {a}jsou různé proměnné. Pokud je vlastnost třídy uzavřena ve složených závorkách, přestává být vlastností jako takovou a stává se globální proměnnou makromodulu. Bude k němu přistupováno přímo podle názvu, nikoli prostřednictvím odkazu na objekt třídy.

Úrovně přístupu k vlastnostem a metodám třídy :

Přístup Místní
(místní)
Soukromé
(soukromé)
Globální
Globální síla
Ve třídě ano / ne Ano ano
(přes objekt třídy)
Ano
V dědicích Ne Ano ano
(přes objekt třídy)
Ano
Zvenku Ne Ne ano
(přes objekt třídy)
Ano

Úrovně přístupu k proměnným , procedurám a objektům makromodulů :

Přístup Místní
(místní)
Soukromé
(soukromé)
Globální
Globální síla
V makro modulu ano / ne Ano Ano Ano
V modulech, které
toto importují
Ne Ne Ano Ano
Polymorfismus

Všechny metody tříd RSL jsou virtuální . RSL tedy implementuje inkluzní polymorfismus (nebo čistý polymorfismus) prostřednictvím dědičnosti. Pokud přidáte metodu do odvozené třídy s názvem, který se již používá pro jednu z metod nadřazené třídy, odvozená metoda nadřazenou metodu přepíše. Nadřazená metoda bude přístupná pouze z podřízené metody, která ji přepíše. Tato rodičovská metoda se nazývá svým názvem. Ale v podřízené třídě, mimo přepisovací metodu, nebude mít přístup k přepsané rodičovské metodě. Bude také nemožné získat přístup k této metodě nadřazené třídy prostřednictvím odkazu na objekt podřízené třídy v hlavní části programu.

Class First() // Nadřazená třída Var x = 2 , y = 3 ;

Makro Sum() return x + y; konec ; konec ;

Class (First) Second() // Potomková třída InitFirst(); Var a = 100 ;

Makro Sum() // Zahájení přepisování rodičovské metody Sum() return Sum() + a; // Použití rodičovské metody Sum() v metodě Sum() potomka end ; // Konec přepsání rodičovské metody Sum()

Makro Sum2() return Sum() + a; // Použití metody Sum() potomka end ; konec ;

obj = sekunda(); // Vytvoří objekt třídy Second()

println (obj.Sum()); // Výsledek: 105 println (obj.Sum2()); // Výsledek: 205

V tomto příkladu, pokud je metoda odstraněna z nadřazené třídy Sum(), bude metoda volána rekurzivněSum() v podřízené třídě .

Ostatní

Není nutné deklarovat proměnné a specifikovat jejich typ. Porovnávací operátory mají vyšší prioritu než logické operátory. Pokud například potřebujete provést "akci" v případě, že proměnná a je rovna 1 nebo 2, musíte použít následující konstrukci:

if ((a == 1 ) nebo (a == 2 )) // akce konec ;

Provádění programu začíná prvním příkazem, který není součástí třídy nebo procedury, jako v php .

makro funkce1 [Jsem funkce 1 ]; konec ; // zde začíná provádění [Pojďme!];

Příklady programů

Ahoj světe! » na RSL [4] :

[Ahoj světe!];

Quine na RSL (formátování pro čitelnost):

s= "''s=Print(SubStr(s,1,2)+StrFor(34)+s+StrFor(34)+StrFor(59)+SubStr(s,3));''" ; Tisk ( SubStr (s, 1 , 2 )+ StrFor ( 34 )+s+ StrFor ( 34 )+ StrFor ( 59 )+ SubStr (s, 3 ));

Viz také

  • Vestavěný programovací jazyk 1C:Enterprise

Poznámky

  1. Pro RS-Bank V. 5.50.003.58
  2. Pro režim konzoly a režim EasyWin .
  3. Jazyk se však nadále zkracuje jako „RSL“.
  4. RSL ve sbírce Hello World (odkaz není k dispozici) . Získáno 28. června 2009. Archivováno z originálu 5. prosince 2011. 

Odkazy