A ScriptKernel programozási nyelv

Típusok, típuskonstrukciók

Típusszerkezet

A típusszerkezete egyszerű. Néhány alaptípus és a tömb áll rendelkezésre. A deklaráció ugyanúgy történik, mint C-ben. Új típusok létrehozására: csak rekord, de később lesz alias/subtype valamit osztály is.

Elemi típusok

Egész típusok:

Lebegőpontos típusok: Egyéb: Literál nélküli:
A literál nélküli típusokra csak egyenlőség, nem-egyenlőség vizsgálat használható, valamint érték szerinti másolás. Kezdőértékük nullhandle() illetve nulldhandle(), vagyis 0. Ezeket a típusokat a gazda program pointerei helyett használhatjuk. Így a pointereket nem lehet módosítani, még véletlenül se - mert fordítási hibát okoz.

Tömb típus

A tömb típust a seq template típussal hozhatunk létre. Ez csak a fordító számára template! Templatek nincsenek a nyelv jelenlegi verziójában.

seq<i32> t; // 't' egy i32-kből álló tömb
...
t[0u] = 6;
Az indexelés 0-tól történik, egy u32 típusú kifejezéssel. Az indexhatárokat ellenőrzi, és ha túlindexelés történik, akkor IndexOutOfRangeException kivételt dob.

Rekord típus

Rekord típust a record kulcsszóval lehet bevezetni. Hasonló a C-ben megszokott struct-hoz, csak nem kell pontosvesszőt tenni a csukó kapcsos zárójel után.

declare
{
record MyRecord
{
string str;
u32 u;
i64 l;
seq<string> ss;
}
}
main
{
MyRecord r;
r.str = "abc";
r.u = 5u;
r.l = 6l;
r.ss = hiext(r.ss, "xyz");
}
Egyetlen megszorítás tartozik a rekordokhoz: egymásba ágyazott rekordok esetén külön declare/export/import blokkba kell kerüljön. Ennek a problémának a megoldása készülőben van.

Típuskonverziók

Típusok közötti átjárás csak konverziós függvényekkel lehetséges. A konverzióks függvények ellenőrzik a típusok értékkészletét, és illegális konverzió esetén ConstraintErrorException kivételt dob.

Változók, konstansok

A változók típusai csak a fentebb említett alaptípusok illetve a tömb lehet. Lehetőség van globális változók használatára is (global blokk).
Konstansok nincsenek a nyelvben, alternatíva: függvények.

Kifejezések, operátorok

A kifejezések hasonlóak, mint a C-ben megszokottak. Ami lényeges különbség, az az és és a vagy operátor viselkedése. Az && és a || operátorok mohók (ezeket lehet csak túlterhelni), és a lusta változataik a &&& és a ||| (alternatív jelölések: &&> és a ||>). Lusta és és vagy csak bool típusú kifejezéseket köthet össze.