A ScriptKernel programozási nyelv

Alprogramok, modulok

Szintaxis

function név(típus_1 név_1, ...,típus_N név_N) : vtípus_1, ..., vtípus_M
{
// utasítások
}
Eljárásról esetén (azaz ha nincs visszatérési értéke), a kettőspontra nincs szükség.
Ha declare blokkba is szerepelnie kell (például rekurzió esetén), akkor oda így kell beírni:
declare
{
function név(típus_1 név_1, ...,típus_N név_N) : vtípus_1, ...,vtípus_M;
}

Paraméterátadás

Ebben a verzióban minden string, tömb és rekord konstans referencia szerint, és minden egyéb érték szerint adódik át. A konstans referancia szerinti paraméterátadást a mutable kulcsszóval lehet felülírni: ebben az esetben az objektumok tartalmát már lehet módosítani, de nem lehet őket lecserélni.

Túlterhelés

Minden függvényt és minden operátort (kivéve a &&& és a ||| operátorokat) paraméter szerint túl lehet terhelni. Ezt a paraméterek számának és/vagy típusának megváltoztatásával érhetjük el. Az operátor túlterhelés szintaxisa hasonlít az Ada szintaxisához. Operátort nem csak infix alakban lehet leírni, hanem prefix alakban is.

function "+"(i32 a,i32 b,i32 c) : i32
{
return a+b+c;
}

main
{
write("2+3+4 = " + tos("+"(2, 3, 4)) + "\n");
}

Rekurzió

A nyelv támogatja a rekurziót, de csak deklarált függvényeket tud meghívni. Ezért a függvényt be kell helyezni a declare blokkba. Egy programon belül több declare blokk is lehet, ezeket egy halmazba gyűjti (egy deklaráció többször is szerepelhet).

Dinamikus linkelés

Minden program képes a függvényeit exportálni, és képes a már betöltött programok exportált függvényeit importálni. Ezeket a függvényeket a virtuális gép egy kontextusban tárolja, és egy kontextusba több programot is be lehet tölteni. Körkörös hivatkozások nem lehetnek, mert egy programot csak akkor tölt be, ha minden importálandó függvénye már ismert. E megszorítás alól kivétel a gazda program (vagyis a virtuális gépet futtató C/C++ program). Az exortálási szándékot az export blokkba, az importálási szándékot az import blokkba kell írni, hasonlóan, mint a declare blokk esetén. Ez exportált függvény egyben, deklarált, is. Egy programon belül több import és export blokk is lehet, és ezeknek a tartalmát is halmazban gyűjti. Csak olyan függvényeket lehet exportálni, amelyek a programban lettek definiálva.

export
{
function ex(u32 a) : string, string;
}
import
{
function im(string s,bool b) : string, seq<string>;
}
function ex(u32 a) : string, string
{
// utasítások
}
A linkeléshez hozzátartozik a rekordok (vagyis típusok) linkelése is. Megengedett az, hogy két különböző program hozzáadja ugyanazt a típust (ekkor a neve, és a szerkezete is 100% meg kell egyezzen -- egyedül a mezőnevek nem számítanak bele az összehasonlításba).