Az új nyelvi motor nem gyorsabb csupán, de rengeteg új nyelvi elemmel is bővült és megszűntek a korábbi korlátok például az indexelésnél. Lehetőség van továbbá a nyelv szintaxisának a megválasztására. Jelenleg a megszokott és a korábbi változatokkal kompatibilitást biztosító XSDL mellett Pascal-ban és C-ben programozható a rendszer, de fejlesztés alatt áll a Java, ill. Javascript és az Xcode. Nemsokára mindenki olyan nyelven programozhatja a VISION-t, ami a legjobban fekszik neki. Nézzük a részleteket.
1.1. Új XSDL nyelvi elemek
|
Nyelvi elem |
Leírás, példa |
|
Case utasítás |
Megjelent a case utasítás (C-ben switch):
case idx of 1: szivattyu1=1; Szivattyu2=2; 4: szivattyu1=2; 9: szivattyu1=3; end
Az érték nem csak szám lehet, de szövegkonstans is! Amellett, hogy egyszerűbb elágazni a programban így, a case utasítás jóval gyorsabb is, mivel csak az értéknek megfelelő feltételes ág értékelődik ki a végrehajtás során. Break nem kell az utasítások végére (mint a C-ben). |
|
Konstans tömb |
const2[8]:=[101,102,103,104,105,106,107,108];
Felsorolhatjuk tehát egyszerűen a tömbelemeket. |
|
Változó felsorolás |
Lehetővé vált a változó megadásánál a felsorolás, azaz egyszerre több változót is megadhatunk ugyanarra a típusra:
i[10],j,k,l: integer;
Ez a megadási mód a VISION változófájlban is megengedett:
Kond_1, Kond_2: 300,133920,20,Kond,m,1,0,0,6,0,6,0,0,0,8065 'Kondenz |
|
Direkt típusmegadás |
A változófájlban ezentúl hivatkozhatunk a típusra közvetlenül is, vagyis nem kell többé a változókat típus szerint csoportokba rendezni:
Integertrends Kond_1: 300,133920,20,Kond,m,1,0,0, 6,0,6,0,0,0,8065 'Kondenz
Helyett írható ez is: Kond_1: Tintegertrend 300,133920,20,Kond,m,1,0,0, 6,0,6,0,0,0,8065
Ennek a megadási módnak az a fő előnye, hogy a változók sorrendjét teljesen függetleníti a változók típusától. |
|
Variant |
Megjelent a variant típus:
v: Variant;
Ennek az az érdekessége, hogy a típusa az értékadásnál dől el (v=false; v=123; v=”szöveg”). Tartalmazhat bool, integer, real, string változót, sőt változó objektumot is! |
|
Univerzális Xnumerics, Xdigits, Xstrings |
Az Xnumerics, Xdigits, Xstrings típusok ezentúl használhatók függvények, eljárások argumentumában is, vagyis a cím szerinti univerzális változó-átadás teljesen általánosan használhatóvá vált (korábban csak szimbólumok és képek argumentumai között lehetett szerepeltetni, eljárásokban nem). |
|
Változó-átadás bármilyen mélységben |
Nincs többé korlát a paraméter átadást illetően szimbólumok és képek egymásba ágyazásakor, mivel valódi cím szerinti átadás történik. Bármilyen mélységben is ugyanúgy hivatkozhatunk tehát a változóra és annak összes elemére (Min, Max, Dim, Mean…). |
|
Break |
Megjelent a break utasítás, amivel ciklusokból lehet kiugrani:
break;
Egyaránt használható for, repeat-until és do-while ciklusokban. |
|
Nem kötelező az eljárás-paraméter |
Eljárásoknál és függvényeknél ezentúl nem kell kötelező argumentum (korábban legalább 1 paramétert kellett szerepeltetni a function/procedure/ kulcsszó után):
datum:: string function begin datum=Date; end
|
|
Strukturált változók kiterjesztése |
Az X9-ben a strukturált változóknak csak az első tagját lehetett átadni a Tstructure típusú paraméternek. Az X10-ben bármelyik részét.
Például a Bpest.IVker.fiok1.gozsziv változónak egyaránt áthadó a Bpest, a Bpest.IVker, vagy a Bpest.IVker.fiok1 tagja, míg korábban csak a Bpest–et lehetett struktúra prefixnek tekinteni.
Az X10 valódi szöveg behelyettesítéssel operál. |
Emellett a belső string műveletek mind unicode-ban történnek (bármilyen nyelv) és a szöveghossz sem korlátozott 255 karakterre, mint korábban. Egy-egy közbülső szöveg lehet akár 2^31 karakter hosszúságú is. Persze a stringváltozó mérete továbbra is korlátozza, hogy mennyi tárolható el ebből.
Az X10 eljárások és függvények realtime környezetben is megkötés nélkül használhatók, mivel bármelyik szálból újrahívhatók (reentráns). Ez korábban csak azoknál az eljárásoknál volt lehetséges, amelyek nem használtak lokális változókat az eljárástömbön belül. Ezek ui. a taszk szintjén globális változók voltak, így pl. ugyanazt a ciklusszámlálót használta volna két különböző szálból hívott eljárás. Ez a megkötés megszűnt, mivel minden paraméter és lokális változó is a stack-ben van.
1.2. Új változó típusok
Van pár hasznos új változó típus. Ezek a következők:
|
Változó típus |
Leírás |
|
BCD |
Analóg, azaz skálázható BCD szó (OMRON) |
|
BCDtrend |
Analóg trend, azaz skálázható és trendelhető BCD szó (OMRON) |
|
Extended |
10 - bájtos lebegőpontos szám extra pontosságú műveletekhez |
1.3. Új objektum típusok
Van pár új objektum típus is:
|
Objektum típus |
Leírás |
|
TStringList |
Klasszikus stringlist szövegfájlok programból való feldolgozására |
|
TCSV |
Cella szerkezetű objektum CSV és XLS fájlok adatainak cellánkénti feldolgozására (csv: TCSV; csv.Cells[1,2]=123;) |
|
TDataSet |
SQL utasítások eredményhalmazainak a hatékonyabb feldolgozására szolgál (ds: TDataSet; ds=sql “DATA.Table”,”select * from Table”; ds.Field(“Adat”).AsString…; ds.Next…) |
Ezeket az objektumokat is pont úgy hozhatjuk létre, mint a képi objektumokat. Például:
Csv: Tcsv;
A megszüntetéséről nem kell külön gondoskodni (ahogy a képi objektumok megszüntetéséről sem).
A hagyományos objektumokhoz képest az a nagy különbség, hogy ezekben nem csak tulajdonságokat, de metódusokat és függvényeket is megtalálhatunk. Például:
csv.LoadFromFile(“c:\Doksik\Adatok.csv”);
További részletek a kibővített teljes dokumentációban.